Reply by Juha Laiho February 11, 20062006-02-11
Hello,

I just went through compiling eCos for Falcom x35-xxl-si on
SuSE Linux 10, and I thought to share the experience in the
hopes to save some time for someone else.


SuSE Linux 10 has gcc 4.x as the native compiler, which apparently
was a major source of trouble in compiling the toolchain.


I used the eCos online documentation as the primary reference for
building the toolchain:
http://ecos.sourceware.org/build-toolchain.html

Differing slightly from the documentation, below is the package list
I used for the toolchain:

binutils-2.16.tar.bz2
gcc-core-3.2.3.tar.bz2
gcc-g++-3.2.3.tar.bz2
newlib-1.13.0.tar.gz
insight-6.1.tar.bz2

Directory structure for the build process was:
$BASE/gnu/pkg - containing the above packages
$BASE/gnu/src - the above packages exploded
$BASE/gnu/build - build area

Preparation steps, starting in $BASE directory; patches are described
later:
  BASE=$PWD
  cd gnu/src
  for f in ../pkg/*gz; do gzip -dc < $f | tar xf -; done
  for f in ../pkg/*bz2; do bzip2 -dc < $f | tar xf -; done
  mv newlib-1.13.0/newlib/ gcc-3.2.3/
  mv newlib-1.13.0/libgloss/ gcc-3.2.3/
  patch -p0 < gcc.patch
  patch -p0 < insight-6.1.patch
  TARGET=v850-elf
  PREFIX=/usr/local/ecostools
  cd $PREFIX
  mkdir bin lib libexec man man/man1 man/man3 man/man5 info share $TARGET
  PATH=$PREFIX/bin:$PATH

... this leaves us with all the sources exploded underneath the gnu/src
directory, and two patches applied to make it possible for the things
to compile under gcc-4. Also the destination directory structure is
prepared.


Building the toolchain:

binutils:
  cd $BASE/gnu/build
  mkdir binutils; cd binutils
  ../../src/binutils-2.16/configure --target=$TARGET --prefix=$PREFIX \
  -v 2>&1 | tee configure.out
  make -w all install 2>&1 | tee make.out

GCC:
  cd ..
  mkdir gcc
  cd gcc
  ../../src/gcc-3.2.3/configure --target=$TARGET --prefix=$PREFIX \
  --enable-languages=c,c++ --with-gnu-as --with--gnu-ld --with--newlib \
  --with-gxx-include-dir=$PREFIX/$TARGET/include \
  -v 2>&1 | tee configure.out
  make -w all install 2>&1 | tee make.out

insight:
  cd ..
  mkdir gdb
  cd gdb
  ../../src/insight-5.3/configure --target=$TARGET --prefix=$PREFIX \
  -v 2>&1 | tee configure.out
  make -w all install 2>&1 | tee make.out

Now this all looks simple; what wasn't so simple was to find out the
proper ways to modigy gcc (and insight) sources to get them to compile
with gcc-4. What still remained to do was to see whether insight-6.4
would be less complicated to compile.


After these, I started to build the ecosconfig tool, from the
repository-0.991p01.tgz package provided by Falcom; preparation:

  repository-0.991p01.tgz exists in $BASE/x35/pkg; directories
  $BASE/x35/src and $BASE/x35/build are created

  PREFIX=/usr/local/ecos
  cd $BASE/x35/src
  tar xvf ../pkg/repository-0.991p01.tgz
  patch -p0 < ../pkg/repository.patch

(so, also a small patch for the eCos repository contents were needed)


Then to compile the ecosconfig and the infra parts required for it:

  cd ../build
  mkdir ecos
  cd ecos
  ../../src/repository-0.991/host/configure --prefix=$PREFIX --with-tcl=/usr/local/ecostools --with-tcl-version=8.4 2>&1 | tee configure.out
  make 2>&1 | tee make.out
  make install 2>&1 | tee make-install.out

After this I set out to copy parts of the repository contents into
a newly created directory /usr/local/ecos/repository; from the
repository contents (x35/src/repository-0.991) subdirectories
packages, examples and demos_xxl.


Finished! With this, it is possible to create ecos working directories:
  ECOS_REPOSITORY=/usr/local/ecos/repository/packages
  export ECOS_REPOSITORY
  ecosconfig new x35xxlsi
  ecosconfig tree
  make


Patches:

gcc.ecos.patch; practically, the obstack.h is copied from GCC 4.0.2
sources; in addition to this, definition of current_binding_level
is reworked.

diff -cr gcc-3.2.3.orig/gcc/cp/decl.c gcc-3.2.3/gcc/cp/decl.c
*** gcc-3.2.3.orig/gcc/cp/decl.c	Tue Mar 18 01:16:55 2003
--- gcc-3.2.3/gcc/cp/decl.c	Thu Jan 12 13:47:57 2006
***************
*** 454,462 ****
  /* The binding level currently in effect.  */
  
  #define current_binding_level			\
!   (cfun && cp_function_chain->bindings		\
!    ? cp_function_chain->bindings		\
!    : scope_chain->bindings)
  
  /* The binding level of the current class, if any.  */
  
--- 454,462 ----
  /* The binding level currently in effect.  */
  
  #define current_binding_level			\
!   (*(struct binding_level **)(cfun && cp_function_chain->bindings		\
!    ? &(cp_function_chain->bindings)		\
!    : &(scope_chain->bindings)))
  
  /* The binding level of the current class, if any.  */
  
diff -cr gcc-3.2.3.orig/include/obstack.h gcc-3.2.3/include/obstack.h
*** gcc-3.2.3.orig/include/obstack.h	Wed Mar 14 21:44:38 2001
--- gcc-3.2.3/include/obstack.h	Tue Jul 13 23:54:38 2004
***************
*** 343,349 ****
  
  #endif
  
! #define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar)
  
  #define obstack_blank_fast(h,n) ((h)->next_free += (n))
  
--- 343,349 ----
  
  #endif
  
! #define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar))
  
  #define obstack_blank_fast(h,n) ((h)->next_free += (n))
  
***************
*** 411,417 ****
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + 1 > __o->chunk_limit)				\
       _obstack_newchunk (__o, 1);					\
!    *(__o->next_free)++ = (datum);					\
     (void) 0; })
  
  /* These assume that the obstack alignment is good enough for pointers or ints,
--- 411,417 ----
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + 1 > __o->chunk_limit)				\
       _obstack_newchunk (__o, 1);					\
!    obstack_1grow_fast (__o, datum);					\
     (void) 0; })
  
  /* These assume that the obstack alignment is good enough for pointers or ints,
***************
*** 423,441 ****
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + sizeof (void *) > __o->chunk_limit)		\
       _obstack_newchunk (__o, sizeof (void *));				\
!    *((void **)__o->next_free)++ = ((void *)datum);			\
!    (void) 0; })
  
  # define obstack_int_grow(OBSTACK,datum)				\
  __extension__								\
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + sizeof (int) > __o->chunk_limit)		\
       _obstack_newchunk (__o, sizeof (int));				\
!    *((int *)__o->next_free)++ = ((int)datum);				\
     (void) 0; })
  
! # define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr)
! # define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
  
  # define obstack_blank(OBSTACK,length)					\
  __extension__								\
--- 423,450 ----
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + sizeof (void *) > __o->chunk_limit)		\
       _obstack_newchunk (__o, sizeof (void *));				\
!    obstack_ptr_grow_fast (__o, datum); })
  
  # define obstack_int_grow(OBSTACK,datum)				\
  __extension__								\
  ({ struct obstack *__o = (OBSTACK);					\
     if (__o->next_free + sizeof (int) > __o->chunk_limit)		\
       _obstack_newchunk (__o, sizeof (int));				\
!    obstack_int_grow_fast (__o, datum); })
! 
! # define obstack_ptr_grow_fast(OBSTACK,aptr)				\
! __extension__								\
! ({ struct obstack *__o1 = (OBSTACK);					\
!    *(const void **) __o1->next_free = (aptr);				\
!    __o1->next_free += sizeof (const void *);				\
     (void) 0; })
  
! # define obstack_int_grow_fast(OBSTACK,aint)				\
! __extension__								\
! ({ struct obstack *__o1 = (OBSTACK);					\
!    *(int *) __o1->next_free = (aint);					\
!    __o1->next_free += sizeof (int);					\
!    (void) 0; })
  
  # define obstack_blank(OBSTACK,length)					\
  __extension__								\
***************
*** 443,449 ****
     int __len = (length);						\
     if (__o->chunk_limit - __o->next_free < __len)			\
       _obstack_newchunk (__o, __len);					\
!    __o->next_free += __len;						\
     (void) 0; })
  
  # define obstack_alloc(OBSTACK,length)					\
--- 452,458 ----
     int __len = (length);						\
     if (__o->chunk_limit - __o->next_free < __len)			\
       _obstack_newchunk (__o, __len);					\
!    obstack_blank_fast (__o, __len);					\
     (void) 0; })
  
  # define obstack_alloc(OBSTACK,length)					\
***************
*** 485,493 ****
  # define obstack_free(OBSTACK, OBJ)					\
  __extension__								\
  ({ struct obstack *__o = (OBSTACK);					\
!    void *__obj = (OBJ);							\
     if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit)  \
!      __o->next_free = __o->object_base = __obj;				\
     else (obstack_free) (__o, __obj); })
  
  #else /* not __GNUC__ or not __STDC__ */
--- 494,502 ----
  # define obstack_free(OBSTACK, OBJ)					\
  __extension__								\
  ({ struct obstack *__o = (OBSTACK);					\
!    void *__obj = (void *) (OBJ);					\
     if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit)  \
!      __o->next_free = __o->object_base = (char *) __obj;		\
     else (obstack_free) (__o, __obj); })
  
  #else /* not __GNUC__ or not __STDC__ */
***************
*** 530,555 ****
  # define obstack_1grow(h,datum)						\
  ( (((h)->next_free + 1 > (h)->chunk_limit)				\
     ? (_obstack_newchunk ((h), 1), 0) : 0),				\
!   (*((h)->next_free)++ = (datum)))
  
  # define obstack_ptr_grow(h,datum)					\
  ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit)		\
     ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),		\
!   (*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum)))
  
  # define obstack_int_grow(h,datum)					\
  ( (((h)->next_free + sizeof (int) > (h)->chunk_limit)			\
     ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),			\
!   (*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum)))
  
! # define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr)
! # define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
  
  # define obstack_blank(h,length)					\
  ( (h)->temp = (length),							\
    (((h)->chunk_limit - (h)->next_free < (h)->temp)			\
     ? (_obstack_newchunk ((h), (h)->temp), 0) : 0),			\
!   ((h)->next_free += (h)->temp))
  
  # define obstack_alloc(h,length)					\
   (obstack_blank ((h), (length)), obstack_finish ((h)))
--- 539,567 ----
  # define obstack_1grow(h,datum)						\
  ( (((h)->next_free + 1 > (h)->chunk_limit)				\
     ? (_obstack_newchunk ((h), 1), 0) : 0),				\
!   obstack_1grow_fast (h, datum))
  
  # define obstack_ptr_grow(h,datum)					\
  ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit)		\
     ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),		\
!   obstack_ptr_grow_fast (h, datum))
  
  # define obstack_int_grow(h,datum)					\
  ( (((h)->next_free + sizeof (int) > (h)->chunk_limit)			\
     ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),			\
!   obstack_int_grow_fast (h, datum))
! 
! # define obstack_ptr_grow_fast(h,aptr)					\
!   (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
  
! # define obstack_int_grow_fast(h,aint)					\
!   (((int *) ((h)->next_free += sizeof (int)))[-1] = (aptr))
  
  # define obstack_blank(h,length)					\
  ( (h)->temp = (length),							\
    (((h)->chunk_limit - (h)->next_free < (h)->temp)			\
     ? (_obstack_newchunk ((h), (h)->temp), 0) : 0),			\
!   obstack_blank_fast (h, (h)->temp))
  
  # define obstack_alloc(h,length)					\
   (obstack_blank ((h), (length)), obstack_finish ((h)))




insight-6.1.ecos.patch; removed -fwritable-strings gcc flags (no
longer supported by gcc, no longer needed by tcl/tk):

diff -cr insight-6.1.orig/gdb/configure insight-6.1/gdb/configure
*** insight-6.1.orig/gdb/configure	Thu Feb 26 02:41:46 2004
--- insight-6.1/gdb/configure	Thu Jan 12 14:47:43 2006
***************
*** 10187,10197 ****
             # know whether 8.2 will or not, but I bet it will.
             # I don't have to worry about 7.x since we don't support it.
             GDBTK_CFLAGS=""
- 	   if test "$GCC" = "yes"; then
-                if test "$TCL_VERSION" != "8.0" ; then
-                    GDBTK_CFLAGS="-fwritable-strings"
- 	       fi
-            fi
  
  	   # Include some libraries that Tcl and Tk want.
  	   TCL_LIBS='$(LIBGUI) $(ITCL) $(ITK) $(TK) $(TCL) $(X11_LDFLAGS) $(X11_LIBS)'
--- 10187,10192 ----
diff -cr insight-6.1.orig/libgui/configure insight-6.1/libgui/configure
*** insight-6.1.orig/libgui/configure	Wed Feb 12 06:18:53 2003
--- insight-6.1/libgui/configure	Thu Jan 12 14:48:04 2006
***************
*** 1920,1933 ****
  rm -f conftest*
  
  
- # Tcl8.1 requires writable strings for gcc
- 
- if test "$GCC" = "yes"; then
-    LIBGUI_CFLAGS=-fwritable-strings
- else
-    LIBGUI_CFLAGS=
- fi
- 
  echo $ac_n "checking for cygwin32""... $ac_c" 1>&6
  echo "configure:1933: checking for cygwin32" >&5
  if eval "test \"`echo '$''{'ide_cv_os_cygwin32'+set}'`\" = set"; then
--- 1920,1925 ----




repository.patch; ugly work to get the const - non-const -definitions to
match across source; so far looks like I got these correct; also couple
of minor changes in actual eCos code for x35 (the dos-newlines embedded
in file v85x_v850_falxxl_i2c.h were truly nasty; the -fpermissive -flag
could be restricted to perhaps just a couple of modules, but out of
laziness I put it into global cflags). WATCH OUT for the two sequences
of ^M in the patch section for v85x_v850_falxxl_i2c.h; you'll need to
change these by hand into 'CR' control characters before running
the patch:

diff -cr repository-0.991.orig/host/libcdl/cdlcore.hxx repository-0.991/host/libcdl/cdlcore.hxx
*** repository-0.991.orig/host/libcdl/cdlcore.hxx	2001-09-14 13:37:28.000000000 +0300
--- repository-0.991/host/libcdl/cdlcore.hxx	2006-02-11 23:03:19.000000000 +0200
***************
*** 1322,1328 ****
    private:
      // This is the Tcl command proc that gets registered for all
      // CdlInterpreterCommand instances.
!     static int          tcl_command_proc(ClientData, Tcl_Interp*, int, char*[]);
  
      // This key is used to access the CdlInterpreter assoc data.
      static char*        cdlinterpreter_assoc_data_key;
--- 1322,1328 ----
    private:
      // This is the Tcl command proc that gets registered for all
      // CdlInterpreterCommand instances.
!     static int          tcl_command_proc(ClientData, Tcl_Interp*, int, const char*[]);
  
      // This key is used to access the CdlInterpreter assoc data.
      static char*        cdlinterpreter_assoc_data_key;
diff -cr repository-0.991.orig/host/libcdl/database.cxx repository-0.991/host/libcdl/database.cxx
*** repository-0.991.orig/host/libcdl/database.cxx	2001-09-14 13:37:29.000000000 +0300
--- repository-0.991/host/libcdl/database.cxx	2006-02-11 23:03:19.000000000 +0200
***************
*** 312,318 ****
          int         list_count      = 0;
          char**      list_entries    = 0;
          Tcl_Interp* tcl_interp      = interp->get_tcl_interpreter();
!         if (TCL_OK != Tcl_SplitList(tcl_interp, argv[1], &list_count, &list_entries)) {
              CdlParse::report_error(interp, diag_package + name, Tcl_GetStringResult(tcl_interp));
          } else {
              if (0 == list_count) {
--- 312,318 ----
          int         list_count      = 0;
          char**      list_entries    = 0;
          Tcl_Interp* tcl_interp      = interp->get_tcl_interpreter();
!         if (TCL_OK != Tcl_SplitList(tcl_interp, argv[1], &list_count, (const char ***)&list_entries)) {
              CdlParse::report_error(interp, diag_package + name, Tcl_GetStringResult(tcl_interp));
          } else {
              if (0 == list_count) {
***************
*** 542,548 ****
          int         list_count      = 0;
          char**      list_entries    = 0;
          Tcl_Interp* tcl_interp      = interp->get_tcl_interpreter();
!         if (TCL_OK != Tcl_SplitList(tcl_interp, argv[1], &list_count, &list_entries)) {
              CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp));
          } else {
              if (0 == list_count) {
--- 542,548 ----
          int         list_count      = 0;
          char**      list_entries    = 0;
          Tcl_Interp* tcl_interp      = interp->get_tcl_interpreter();
!         if (TCL_OK != Tcl_SplitList(tcl_interp, argv[1], &list_count, (const char ***)&list_entries)) {
              CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp));
          } else {
              if (0 == list_count) {
***************
*** 584,590 ****
          int         list_count      = 0;
          char**      list_entries    = 0;
          Tcl_Interp* tcl_interp      = interp->get_tcl_interpreter();
!         if (TCL_OK != Tcl_SplitList(tcl_interp, argv[1], &list_count, &list_entries)) {
              CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp));
          } else {
              // Allow for a dummy target spec, just in case it proves useful.
--- 584,590 ----
          int         list_count      = 0;
          char**      list_entries    = 0;
          Tcl_Interp* tcl_interp      = interp->get_tcl_interpreter();
!         if (TCL_OK != Tcl_SplitList(tcl_interp, argv[1], &list_count, (const char ***)&list_entries)) {
              CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp));
          } else {
              // Allow for a dummy target spec, just in case it proves useful.
***************
*** 622,628 ****
          int         list_count      = 0;
          char**      list_entries    = 0;
          Tcl_Interp* tcl_interp      = interp->get_tcl_interpreter();
!         if (TCL_OK != Tcl_SplitList(tcl_interp, argv[1], &list_count, &list_entries)) {
              CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp));
          } else {
              for (int i = 0; i < list_count; i++) {
--- 622,628 ----
          int         list_count      = 0;
          char**      list_entries    = 0;
          Tcl_Interp* tcl_interp      = interp->get_tcl_interpreter();
!         if (TCL_OK != Tcl_SplitList(tcl_interp, argv[1], &list_count, (const char ***)&list_entries)) {
              CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp));
          } else {
              for (int i = 0; i < list_count; i++) {
***************
*** 658,664 ****
          int         list_count      = 0;
          char**      list_entries    = 0;
          Tcl_Interp* tcl_interp      = interp->get_tcl_interpreter();
!         if (TCL_OK != Tcl_SplitList(tcl_interp, argv[1], &list_count, &list_entries)) {
              CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp));
          } else {
              for (int i = 0; i < list_count; i++) {
--- 658,664 ----
          int         list_count      = 0;
          char**      list_entries    = 0;
          Tcl_Interp* tcl_interp      = interp->get_tcl_interpreter();
!         if (TCL_OK != Tcl_SplitList(tcl_interp, argv[1], &list_count, (const char ***)&list_entries)) {
              CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp));
          } else {
              for (int i = 0; i < list_count; i++) {
diff -cr repository-0.991.orig/host/libcdl/interp.cxx repository-0.991/host/libcdl/interp.cxx
*** repository-0.991.orig/host/libcdl/interp.cxx	2001-09-14 13:37:29.000000000 +0300
--- repository-0.991/host/libcdl/interp.cxx	2006-02-11 23:03:19.000000000 +0200
***************
*** 690,696 ****
      // raised up to the library level. That way the error count
      // etc. are kept accurate.
      if ((TCL_OK != result) && !cdl_result) {
!         char* tcl_result = Tcl_GetStringResult(tcl_interp);
          if ((0 == tcl_result) || ('\0' == tcl_result[0])) {
              tcl_result = "Internal error, no additional information available.";
          }
--- 690,696 ----
      // raised up to the library level. That way the error count
      // etc. are kept accurate.
      if ((TCL_OK != result) && !cdl_result) {
!         const char* tcl_result = Tcl_GetStringResult(tcl_interp);
          if ((0 == tcl_result) || ('\0' == tcl_result[0])) {
              tcl_result = "Internal error, no additional information available.";
          }
***************
*** 746,752 ****
      // raised up to the library level. That way the error count
      // etc. are kept accurate.
      if ((TCL_OK != result) && !cdl_result) {
!         char* tcl_result = Tcl_GetStringResult(tcl_interp);
          if ((0 == tcl_result) || ('\0' == tcl_result[0])) {
              tcl_result = "Internal error, no additional information available.";
          }
--- 746,752 ----
      // raised up to the library level. That way the error count
      // etc. are kept accurate.
      if ((TCL_OK != result) && !cdl_result) {
!         const char* tcl_result = Tcl_GetStringResult(tcl_interp);
          if ((0 == tcl_result) || ('\0' == tcl_result[0])) {
              tcl_result = "Internal error, no additional information available.";
          }
***************
*** 783,789 ****
      // raised up to the library level. That way the error count
      // etc. are kept accurate.
      if ((TCL_OK != result) && !cdl_result) {
!         char* tcl_result = Tcl_GetStringResult(tcl_interp);
          if ((0 == tcl_result) || ('\0' == tcl_result[0])) {
              tcl_result = "Internal error, no additional information available.";
          }
--- 783,789 ----
      // raised up to the library level. That way the error count
      // etc. are kept accurate.
      if ((TCL_OK != result) && !cdl_result) {
!         const char* tcl_result = Tcl_GetStringResult(tcl_interp);
          if ((0 == tcl_result) || ('\0' == tcl_result[0])) {
              tcl_result = "Internal error, no additional information available.";
          }
***************
*** 870,876 ****
  // i.e. a function pointer. That function needs a pointer to the
  // CdlInterpreter object, which can be accessed via AssocData.
  int
! CdlInterpreterBody::tcl_command_proc(ClientData data, Tcl_Interp* tcl_interp, int argc, char* argv[])
  {
      CYG_REPORT_FUNCNAMETYPE("CdlInterpreter::tcl_command_proc", "result %d");
      CYG_REPORT_FUNCARG3XV(data, tcl_interp, argc);
--- 870,876 ----
  // i.e. a function pointer. That function needs a pointer to the
  // CdlInterpreter object, which can be accessed via AssocData.
  int
! CdlInterpreterBody::tcl_command_proc(ClientData data, Tcl_Interp* tcl_interp, int argc, const char* argv[])
  {
      CYG_REPORT_FUNCNAMETYPE("CdlInterpreter::tcl_command_proc", "result %d");
      CYG_REPORT_FUNCARG3XV(data, tcl_interp, argc);
***************
*** 890,896 ****
      CYG_ASSERT_CLASSC(interp);
  
      try {
!         result = (*command)(interp, argc, argv);
      } catch(std::bad_alloc e) {
          interp->set_result(CdlParse::construct_diagnostic(interp, "internal error", "", "Out of memory."));
          result = TCL_ERROR;
--- 890,896 ----
      CYG_ASSERT_CLASSC(interp);
  
      try {
!         result = (*command)(interp, argc, (char **)argv);
      } catch(std::bad_alloc e) {
          interp->set_result(CdlParse::construct_diagnostic(interp, "internal error", "", "Out of memory."));
          result = TCL_ERROR;
***************
*** 923,929 ****
      } x;
      x.command = command;
  
!     if (0 == Tcl_CreateCommand(tcl_interp, const_cast<char*>(name.c_str()), &tcl_command_proc, x.data, 0)) {
          throw std::bad_alloc();
      }
      CYG_REPORT_RETURN();
--- 923,929 ----
      } x;
      x.command = command;
  
!     if (0 == Tcl_CreateCommand(tcl_interp, const_cast<char*>(name.c_str()), &tcl_command_proc, x.data, NULL)) {
          throw std::bad_alloc();
      }
      CYG_REPORT_RETURN();
***************
*** 1054,1060 ****
      CYG_PRECONDITIONC("" != name);
  
      std::string result = "";
!     char *tmp = Tcl_GetVar(tcl_interp, const_cast<char*>(name.c_str()), TCL_GLOBAL_ONLY);
      if (0 != tmp) {
          result = tmp;
      }
--- 1054,1060 ----
      CYG_PRECONDITIONC("" != name);
  
      std::string result = "";
!     const char *tmp = Tcl_GetVar(tcl_interp, const_cast<char*>(name.c_str()), TCL_GLOBAL_ONLY);
      if (0 != tmp) {
          result = tmp;
      }
***************
*** 1184,1190 ****
  
      int         count;
      char**      array;
!     if (TCL_OK != Tcl_SplitList(tcl_interp, const_cast<char*>(tcl_result.c_str()), &count, &array)) {
          throw std::bad_alloc();
      }
      for (int i = 0; i < count; i++) {
--- 1184,1190 ----
  
      int         count;
      char**      array;
!     if (TCL_OK != Tcl_SplitList(tcl_interp, const_cast<char*>(tcl_result.c_str()), &count, (const char ***)&array)) {
          throw std::bad_alloc();
      }
      for (int i = 0; i < count; i++) {
***************
*** 1251,1257 ****
      }
      int         count;
      char**      array;
!     if (TCL_OK != Tcl_SplitList(tcl_interp, const_cast<char*>(tcl_result.c_str()), &count, &array)) {
          throw std::bad_alloc();
      }
      for (int i = 0; i < count; i++) {
--- 1251,1257 ----
      }
      int         count;
      char**      array;
!     if (TCL_OK != Tcl_SplitList(tcl_interp, const_cast<char*>(tcl_result.c_str()), &count, (const char ***)&array)) {
          throw std::bad_alloc();
      }
      for (int i = 0; i < count; i++) {
diff -cr repository-0.991.orig/packages/devs/wallclock/v85x/falxxl/current/include/v85x_v850_falxxl_i2c.h repository-0.991/packages/devs/wallclock/v85x/falxxl/current/include/v85x_v850_falxxl_i2c.h
*** repository-0.991.orig/packages/devs/wallclock/v85x/falxxl/current/include/v85x_v850_falxxl_i2c.h	2002-06-19 17:04:17.000000000 +0300
--- repository-0.991/packages/devs/wallclock/v85x/falxxl/current/include/v85x_v850_falxxl_i2c.h	2006-02-11 23:04:21.000000000 +0200
***************
*** 54,60 ****
  #define FALSE	0
  #endif
  
! #define ERROR 1 ^M
  
  #ifndef CYGDAT_IO_I2CBUS_DEVICE
  #define CYGDAT_IO_I2CBUS_DEVICE "/dev/i2c"
--- 54,60 ----
  #define FALSE	0
  #endif
  
! #define ERROR 1
  
  #ifndef CYGDAT_IO_I2CBUS_DEVICE
  #define CYGDAT_IO_I2CBUS_DEVICE "/dev/i2c"
***************
*** 68,74 ****
  } i2c_device_t;
  
  #define IIC_WORD_ADDRESS 0x8000
! #define IIC_MAX_ERROR ^M	100
  
  extern size_t iic_cpy(i2c_device_t *cfg,cyg_uint8 *buf,size_t num);
  
--- 68,74 ----
  } i2c_device_t;
  
  #define IIC_WORD_ADDRESS 0x8000
! #define IIC_MAX_ERROR 	100
  
  extern size_t iic_cpy(i2c_device_t *cfg,cyg_uint8 *buf,size_t num);
  
diff -cr repository-0.991.orig/packages/hal/v85x/falxxl/current/cdl/hal_v85x_f35xxlsi.cdl repository-0.991/packages/hal/v85x/falxxl/current/cdl/hal_v85x_f35xxlsi.cdl
*** repository-0.991.orig/packages/hal/v85x/falxxl/current/cdl/hal_v85x_f35xxlsi.cdl	2003-01-14 10:33:41.000000000 +0200
--- repository-0.991/packages/hal/v85x/falxxl/current/cdl/hal_v85x_f35xxlsi.cdl	2006-02-11 23:06:31.000000000 +0200
***************
*** 369,375 ****
              display "Global compiler flags"
              flavor  data
              no_define
!             default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" }
              description   "
                  This option controls the global compiler flags which
                  are used to compile all packages by
--- 369,375 ----
              display "Global compiler flags"
              flavor  data
              no_define
!             default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -fpermissive" }
              description   "
                  This option controls the global compiler flags which
                  are used to compile all packages by


----
END of patches.