Compiling eCos on Suse Linux 10

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:

formatting link

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(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(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(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(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(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(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(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(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
 Click to see the full signature
Reply to
Juha Laiho
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.