From 2c22a2ef761868ef7e4b1b82d33261b49841b458 Mon Sep 17 00:00:00 2001 From: drdani Date: Tue, 27 Jul 2004 13:42:53 +0000 Subject: [PATCH] bug fixes git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3403 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- sim/ucsim/.version | 2 +- sim/ucsim/NEWS | 6 +++++ sim/ucsim/cmd.src/cmdconf.cc | 2 +- sim/ucsim/cmd.src/cmdutil.cc | 46 ++++++++++++++++++++++++++++++++++++ sim/ucsim/cmd.src/cmdutil.h | 2 ++ sim/ucsim/cmd.src/newcmd.cc | 10 ++++++++ sim/ucsim/cmd.src/newcmdcl.h | 1 + sim/ucsim/configure | 37 +++++++++++++++++++++++------ sim/ucsim/configure.in | 13 ++++++---- sim/ucsim/errorcl.h | 27 ++------------------- sim/ucsim/libtool | 2 +- sim/ucsim/s51.src/uc51.cc | 2 +- sim/ucsim/sim.src/mem.cc | 21 +++++++--------- sim/ucsim/sim.src/stack.cc | 2 +- sim/ucsim/sim.src/uc.cc | 17 ++++++------- 15 files changed, 128 insertions(+), 62 deletions(-) diff --git a/sim/ucsim/.version b/sim/ucsim/.version index cb0c939a..be14282b 100644 --- a/sim/ucsim/.version +++ b/sim/ucsim/.version @@ -1 +1 @@ -0.5.2 +0.5.3 diff --git a/sim/ucsim/NEWS b/sim/ucsim/NEWS index ce227235..0fd259e7 100644 --- a/sim/ucsim/NEWS +++ b/sim/ucsim/NEWS @@ -39,3 +39,9 @@ Bug fixes 0.5.2 Bug fixes to run sdcc regression tests + + +0.5.3 + +Eliminate need of flex (for compile) +Fix of some includes diff --git a/sim/ucsim/cmd.src/cmdconf.cc b/sim/ucsim/cmd.src/cmdconf.cc index a78cc7f7..6cd15ff6 100644 --- a/sim/ucsim/cmd.src/cmdconf.cc +++ b/sim/ucsim/cmd.src/cmdconf.cc @@ -94,7 +94,7 @@ COMMAND_DO_WORK_APP(cl_conf_objects_cmd) cmdline->param(1), cmdline->param(2), cmdline->param(3) };*/ - conf_objects_cmd_print_node(con, 0, application); + conf_objects_cmd_print_node(con, 0, /*application*/&error_class_base); return(DD_FALSE); } diff --git a/sim/ucsim/cmd.src/cmdutil.cc b/sim/ucsim/cmd.src/cmdutil.cc index aa831bf8..831bfa00 100644 --- a/sim/ucsim/cmd.src/cmdutil.cc +++ b/sim/ucsim/cmd.src/cmdutil.cc @@ -291,4 +291,50 @@ proc_escape(char *string, int *len) } +int +cmd_vfprintf(FILE *f, char *format, va_list ap) +{ + int ret; + if (!f) + return(0); +#ifdef HAVE_VASPRINTF + char *msg= NULL; + vasprintf(&msg, format, ap); + ret= fprintf(f, "%s", msg); + free(msg); +#else +# ifdef HAVE_VSNPRINTF + char msg[80*25]; + vsnprintf(msg, 80*25, format, ap); + ret= fprintf(f, "%s", msg); +# else +# ifdef HAVE_VPRINTF + char msg[80*25]; + vsprintf(msg, format, ap); /* Dangerous */ + ret= fprintf(f, "%s", msg); +# else +# ifdef HAVE_DOPRNT + /* ??? */ + /*strcpy(msg, "Unimplemented printf has called.\n");*/ +# else + /*strcpy(msg, "printf can not be implemented, upgrade your libc.\n");*/ +# endif +# endif +# endif +#endif + fflush(f); + return(ret); +} + +int +cmd_fprintf(FILE *f, char *format, ...) +{ + va_list ap; + va_start(ap, format); + int ret= cmd_vfprintf(f, format, ap); + va_end(ap); + return(ret); +} + + /* End of cmd.src/cmdutil.cc */ diff --git a/sim/ucsim/cmd.src/cmdutil.h b/sim/ucsim/cmd.src/cmdutil.h index 0e630d9d..229bdc35 100644 --- a/sim/ucsim/cmd.src/cmdutil.h +++ b/sim/ucsim/cmd.src/cmdutil.h @@ -43,6 +43,8 @@ extern struct name_entry *get_name_entry(struct name_entry tabl[], uchar *bitaddr, uchar *bitmask, char **symname);*/ extern char *proc_escape(char *string, int *len); +extern int cmd_vfprintf(FILE *f, char *format, va_list ap); +extern int cmd_fprintf(FILE *f, char *format, ...); #endif diff --git a/sim/ucsim/cmd.src/newcmd.cc b/sim/ucsim/cmd.src/newcmd.cc index cf32c05c..8aedf819 100644 --- a/sim/ucsim/cmd.src/newcmd.cc +++ b/sim/ucsim/cmd.src/newcmd.cc @@ -953,6 +953,16 @@ cl_commander::all_print(char *string, int length) * Printing to actual_console */ +FILE * +cl_commander::get_out(void) +{ + if (actual_console) + return(actual_console->get_out()); + else if (frozen_console) + return(frozen_console->get_out()); + return(0); +} + int cl_commander::dd_printf(char *format, ...) { diff --git a/sim/ucsim/cmd.src/newcmdcl.h b/sim/ucsim/cmd.src/newcmdcl.h index 6e3af3e4..bbdad5c8 100644 --- a/sim/ucsim/cmd.src/newcmdcl.h +++ b/sim/ucsim/cmd.src/newcmdcl.h @@ -212,6 +212,7 @@ public: void set_fd_set(void); void prompt(void); + FILE *get_out(void); int all_printf(char *format, ...); // print to all consoles int all_print(char *string, int length); int dd_printf(char *format, ...); // print to actual_console diff --git a/sim/ucsim/configure b/sim/ucsim/configure index 721ac730..3c63d5f4 100755 --- a/sim/ucsim/configure +++ b/sim/ucsim/configure @@ -11635,7 +11635,7 @@ if test "${ucsim_cv_CXXggdb+set}" = set; then else cat >_test_.c < -void main(void) {} +int main(void) {return(0);} EOF $CXX -v -ggdb -c _test_.c 1>&5 2>&5 if test "$?" = "0"; then @@ -11648,10 +11648,33 @@ fi echo "$as_me:$LINENO: result: $ucsim_cv_CXXggdb" >&5 echo "${ECHO_T}$ucsim_cv_CXXggdb" >&6 -if test "$ucsim_cv_CXXggdb" = "yes"; then - gopt="-ggdb" + +echo "$as_me:$LINENO: checking whether $CXX accepts -gstabs" >&5 +echo $ECHO_N "checking whether $CXX accepts -gstabs... $ECHO_C" >&6 +if test "${ucsim_cv_CXXgstabs+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >_test_.c < +int main(void) {return(0);} +EOF +$CXX -v -gstabs -c _test_.c 1>&5 2>&5 +if test "$?" = "0"; then + ucsim_cv_CXXgstabs="yes" +else + ucsim_cv_CXXgstabs="no" +fi +rm -f _test_.* a.out +fi +echo "$as_me:$LINENO: result: $ucsim_cv_CXXgstabs" >&5 +echo "${ECHO_T}$ucsim_cv_CXXgstabs" >&6 + +if test "$ucsim_cv_CXXgstabs" = "yes"; then + gopt="-gstabs+ -g3" +elif test "$ucsim_cv_CXXggdb" = "yes"; then + gopt="-ggdb -g3" else - gopt="-g" + gopt="-g" fi if test "$CXXFLAGS"x = x ;then CXXFLAGS="$gopt" @@ -11667,7 +11690,7 @@ if test "${ucsim_cv_CXXpipe+set}" = set; then else cat >_test_.c < -void main(void) {} +int main(void) {return(0);} EOF $CXX -v -pipe -c _test_.c 1>&5 2>&5 if test "$?" = "0"; then @@ -11694,7 +11717,7 @@ if test "${ucsim_cv_CXXfPIC+set}" = set; then else cat >_test_.c < -void main(void) {} +int main(void) {return(0);} EOF $CXX -v -fPIC -c _test_.c 1>&5 2>&5 if test "$?" = "0"; then @@ -11718,7 +11741,7 @@ if test "${ucsim_cv_CXXfpic+set}" = set; then else cat >_test_.c < -void main(void) {} +int main(void) {return(0);} EOF $CXX -v -fpic -c _test_.c 1>&5 2>&5 if test "$?" = "0"; then diff --git a/sim/ucsim/configure.in b/sim/ucsim/configure.in index 600d53cb..1c9e0592 100644 --- a/sim/ucsim/configure.in +++ b/sim/ucsim/configure.in @@ -306,7 +306,7 @@ AC_DEFUN(DD_COPT, [ AC_CACHE_CHECK(whether $$1 accepts -$2,ucsim_cv_$1$2, cat >_test_.c < -void main(void) {} +int main(void) {return(0);} EOF $$1 -v -$2 -c _test_.c 1>&5 2>&5 if test "$?" = "0"; then @@ -361,10 +361,13 @@ AC_SUBST(M_OR_MM) # This is the first time when CFLAGS are set/modified!! DD_COPT(CXX, ggdb) -if test "$ucsim_cv_CXXggdb" = "yes"; then - gopt="-ggdb" -else - gopt="-g" +DD_COPT(CXX, gstabs) +if test "$ucsim_cv_CXXgstabs" = "yes"; then + gopt="-gstabs+ -g3" +elif test "$ucsim_cv_CXXggdb" = "yes"; then + gopt="-ggdb -g3" +else + gopt="-g" fi if test "$CXXFLAGS"x = x ;then CXXFLAGS="$gopt" diff --git a/sim/ucsim/errorcl.h b/sim/ucsim/errorcl.h index 8e0461f7..c4075bd4 100644 --- a/sim/ucsim/errorcl.h +++ b/sim/ucsim/errorcl.h @@ -44,38 +44,15 @@ enum error_on_off { const int err_stop= (err_unknown|err_error); -/* -#define ERROR_METHODS(NAME) \ -enum error_type \ -cl_error_##NAME ::get_type(void)\ -{\ - return(err_##NAME##_class.get_type());\ -}\ -bool \ -cl_error_##NAME ::is_on(void)\ -{\ - return(err_##NAME##_class.is_on());\ -} -*/ - #define ERROR_CLASS_DECL(NAME) \ extern class cl_error_class error_##NAME##_class;\ class cl_error_##NAME -/* -#define ERROR_CLASS_DEF(TYPE,NAME,CLASS_NAME) \ -class cl_error_class error_##NAME##_class(TYPE, CLASS_NAME); -*/ -/* -#define ERROR_CLASS_DEF_ON(TYPE,NAME,CLASS_NAME,ON) \ -class cl_error_class error_##NAME##_class(TYPE, CLASS_NAME, ON); -*/ - #define ERROR_CLASS_DEF_PARENT(TYPE,NAME,CLASS_NAME,PARENT) \ -class cl_error_class error_##NAME##_class(TYPE, CLASS_NAME, &(PARENT)); +class cl_error_class error_##NAME##_class(TYPE, CLASS_NAME, &(PARENT)) #define ERROR_CLASS_DEF_PARENT_ON(TYPE,NAME,CLASS_NAME,PARENT,ON) \ -class cl_error_class error_##NAME##_class(TYPE, CLASS_NAME, &(PARENT), ON); +class cl_error_class error_##NAME##_class(TYPE, CLASS_NAME, &(PARENT), ON) extern class cl_list *registered_errors; diff --git a/sim/ucsim/libtool b/sim/ucsim/libtool index 4f5a9019..fe1e5a3d 100755 --- a/sim/ucsim/libtool +++ b/sim/ucsim/libtool @@ -1,7 +1,7 @@ #! /bin/sh # libtool - Provide generalized library-building support services. -# Generated automatically by (GNU 0.5.2) +# Generated automatically by (GNU 0.5.3) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996-2000 Free Software Foundation, Inc. diff --git a/sim/ucsim/s51.src/uc51.cc b/sim/ucsim/s51.src/uc51.cc index a5f8dc99..815b34c8 100644 --- a/sim/ucsim/s51.src/uc51.cc +++ b/sim/ucsim/s51.src/uc51.cc @@ -227,7 +227,7 @@ cl_51core::make_memories(void) class cl_address_decoder *ad; class cl_memory_chip *chip; - chip= new cl_memory_chip("rom_chip", 0x10000, 8, 0xff); + chip= new cl_memory_chip("rom_chip", 0x10000, 8/*, 0xff*/); chip->init(); memchips->add(chip); ad= new cl_address_decoder(as= rom/*address_space(MEM_ROM_ID)*/, diff --git a/sim/ucsim/sim.src/mem.cc b/sim/ucsim/sim.src/mem.cc index 7d9a780f..e5a32c93 100644 --- a/sim/ucsim/sim.src/mem.cc +++ b/sim/ucsim/sim.src/mem.cc @@ -41,6 +41,7 @@ // cmd #include "newcmdcl.h" +#include "cmdutil.h" // local #include "memcl.h" @@ -1401,12 +1402,10 @@ cl_error_mem_invalid_address(class cl_memory *amem, t_addr aaddr): void cl_error_mem_invalid_address::print(class cl_commander *c) { - c->dd_printf(get_type_name()); - c->dd_printf(": invalid address ", get_type_name()); - c->dd_printf(mem->addr_format, addr); - c->dd_printf(" in memory "); - c->dd_printf(mem->get_name()); - c->dd_printf(".\n"); + FILE *f= c->get_out(); + cmd_fprintf(f, "%s: invalid address ", get_type_name()); + cmd_fprintf(f, mem->addr_format, addr); + cmd_fprintf(f, " in memory %s.\n", mem->get_name()); } /* Non-decoded address space access */ @@ -1425,12 +1424,10 @@ cl_error_mem_non_decoded(class cl_memory *amem, t_addr aaddr): void cl_error_mem_non_decoded::print(class cl_commander *c) { - c->dd_printf(get_type_name()); - c->dd_printf(": access of non-decoded address "); - c->dd_printf(mem->addr_format, addr); - c->dd_printf(" in memory "); - c->dd_printf(mem->get_name()); - c->dd_printf(".\n"); + FILE *f= c->get_out(); + cmd_fprintf(f, "%s: access of non-decoded address ", get_type_name()); + cmd_fprintf(f, mem->addr_format, addr); + cmd_fprintf(f, " in memory %s.\n", mem->get_name()); } diff --git a/sim/ucsim/sim.src/stack.cc b/sim/ucsim/sim.src/stack.cc index d9c5fe8d..d27f91be 100644 --- a/sim/ucsim/sim.src/stack.cc +++ b/sim/ucsim/sim.src/stack.cc @@ -431,7 +431,7 @@ ERROR_CLASS_DEF_PARENT(err_error, stack_tracker, "stack_tracker", ERROR_CLASS_DEF_PARENT(err_error, stack_tracker_wrong_handle, "stack_tracker_wrong_handle", - error_stack_tracker_class) + error_stack_tracker_class); cl_error_stack_tracker_wrong_handle::cl_error_stack_tracker_wrong_handle(bool write_op): cl_error_stack_tracker() diff --git a/sim/ucsim/sim.src/uc.cc b/sim/ucsim/sim.src/uc.cc index 600e9d1a..caef99df 100644 --- a/sim/ucsim/sim.src/uc.cc +++ b/sim/ucsim/sim.src/uc.cc @@ -47,6 +47,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "timercl.h" #include "cmdstatcl.h" #include "cmdmemcl.h" +#include "cmdutil.h" // local, sim.src #include "uccl.h" @@ -1866,18 +1867,18 @@ cl_error_unknown_code::cl_error_unknown_code(class cl_uc *the_uc) void cl_error_unknown_code::print(class cl_commander *c) { - c->dd_printf(get_type_name()); - c->dd_printf(": unknown instruction code at "); + FILE *f= c->get_out(); + cmd_fprintf(f, "%s: unknown instruction code at ", get_type_name()); if (uc->rom) { - c->dd_printf(uc->rom->addr_format, PC); - c->dd_printf(" ("); - c->dd_printf(uc->rom->data_format, uc->rom->get(PC)); - c->dd_printf(")"); + cmd_fprintf(f, uc->rom->addr_format, PC); + cmd_fprintf(f, " ("); + cmd_fprintf(f, uc->rom->data_format, uc->rom->get(PC)); + cmd_fprintf(f, ")"); } else - c->dd_printf("0x%06x", PC); - c->dd_printf("\n"); + cmd_fprintf(f, "0x%06x", PC); + cmd_fprintf(f, "\n"); } -- 2.30.2