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:
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