From 35ce4f08131b8de3b177971297076a3a2609bab5 Mon Sep 17 00:00:00 2001 From: Geoffrey Noer Date: Thu, 7 Aug 1997 06:31:46 +0000 Subject: [PATCH] Wed Aug 6 16:15:31 1997 Geoffrey Noer * Makefile.in: add DLLTOOL = @DLLTOOL@, pass on DLLTOOL to sub makes, change clean rule to also remove *.a to remove libwigglers.a, in dependencies: add ppc-bdm.o ocd.o ser-ocd.o and remove remote-wiggler.o * configure.in: add DLLTOOL support * configure: regenerate * wigglers.def: new file for imports for wigglers.dll * ser-ocd.c: new file which is layer between ocd.c and either the wigglers.dll or the target box, only stub so far * config/powerpc/ppc-eabi.mt: add ppc-bdm.o to TDEPFILES * config/powerpc/ppc-sim.mt: add ppc-bdm.o to TDEPFILES * config/i386/cygwin32.mh: add ocd.o ser-ocd.o libwigglers.a to XDEPFILES, add rules to build libwigglers.a checking in changes of Stu Grossman : * remote-wiggler.c: delete * ocd.c: new, was remote-wiggler.c always include sys/types.h, include ocd.h, move WIGGLER commands and many wiggler prototypes to ocd.h, make wiggler_desc static, stop making local wiggler functions static, define write_mem_command for wiggler_write_bytes (wiggler_start_remote): stop hardcoding the target type, instead set and use a target_type variable. (wiggler_open): add new target_type and ops args (wiggler_wait): now no longer takes pid and target_status as args, stop trying to set target_status struct, remove BGND insn checks (read_bdm_registers): renamed to wiggler_read_bdm_registers (wiggler_read_bdm_registers): numregs arg changed to reglen arg, remove pktlen check, set reglen instead of numregs (dump_all_bdm_regs): delete (wiggler_fetch_registers): delete (wiggler_prepare_to_store): now just an empty function (wiggler_store_registers): delete (wiggler_read_bdm_register): new (wiggler_write_bdm_registers): new (wiggler_write_bdm_register): new (wiggler_write_bytes): use write_mem_command variable instead of WIGGLER_WRITE_MEM (get_packet): renamed to wiggler_get_packet, change refs throughout (put_packet): renamed to wiggler_put_packet, change refs throughout (wiggler_get_packet): add break to default case of switch, change length of WIGGLER_GET_VERSION len to 10 from 4 to match specs (wiggler_mourn): unpush_target with current_ops, not &wiggler_ops (flash_xfer_memory): delete (noop_store_registers): new placeholder replacement for target_store_registers() which prevents generic_load from trying to set up the PC. (bdm_update_flash_command): add store_registers_tmp variable, make handling of wiggler_ops more generic -- define wiggler_ops in a target-specific file instead (such as ppc-bdm.c in the case of the ppc), use current_target to deal with registers again making this file less target-specific. (bdm_read_register_command): new (_initialize_remote_wiggler): stop doing add_target (&wiggler_ops), comment out add_cmd ("read-register", ...) * ocd.h: new, contains common wiggler prototypes, command definitions * ppc-bdm.c: file for ppc-specific OCD code, including target_ops structure for ppc bdm (bdm_ppc_open): new (bdm_ppc_wait): new (bdm_ppc_fetch_registers): new (bdm_ppc_store_registers_: new (_initialize_bdm_ppc): new * config/powerpc/tm-ppc-eabi.h: add necessary CPU32 BDM defines --- gdb/ChangeLog | 69 ++++ gdb/Makefile.in | 26 +- gdb/config/i386/cygwin32.mh | 13 +- gdb/config/powerpc/ppc-eabi.mt | 2 +- gdb/config/powerpc/ppc-sim.mt | 2 +- gdb/configure | 182 +++++----- gdb/configure.in | 3 + gdb/{remote-wiggler.c => ocd.c} | 595 ++++++++------------------------ gdb/ocd.h | 132 +++++++ gdb/ppc-bdm.c | 260 ++++++++++++++ gdb/ser-ocd.c | 174 ++++++++++ gdb/wigglers.def | 3 + 12 files changed, 911 insertions(+), 550 deletions(-) rename gdb/{remote-wiggler.c => ocd.c} (67%) create mode 100644 gdb/ocd.h create mode 100644 gdb/ppc-bdm.c create mode 100644 gdb/ser-ocd.c create mode 100644 gdb/wigglers.def diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5deb3f283b..fbc665002e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,72 @@ +Wed Aug 6 16:15:31 1997 Geoffrey Noer + + * Makefile.in: add DLLTOOL = @DLLTOOL@, pass on DLLTOOL to + sub makes, change clean rule to also remove *.a to remove + libwigglers.a, in dependencies: add ppc-bdm.o ocd.o ser-ocd.o and + remove remote-wiggler.o + * configure.in: add DLLTOOL support + * configure: regenerate + * wigglers.def: new file for imports for wigglers.dll + * ser-ocd.c: new file which is layer between ocd.c and either the + wigglers.dll or the target box, only stub so far + * config/powerpc/ppc-eabi.mt: add ppc-bdm.o to TDEPFILES + * config/powerpc/ppc-sim.mt: add ppc-bdm.o to TDEPFILES + * config/i386/cygwin32.mh: add ocd.o ser-ocd.o libwigglers.a + to XDEPFILES, add rules to build libwigglers.a + + checking in changes of Stu Grossman : + * remote-wiggler.c: delete + * ocd.c: new, was remote-wiggler.c + always include sys/types.h, include ocd.h, move WIGGLER + commands and many wiggler prototypes to ocd.h, make wiggler_desc + static, stop making local wiggler functions static, + define write_mem_command for wiggler_write_bytes + (wiggler_start_remote): stop hardcoding the target type, + instead set and use a target_type variable. + (wiggler_open): add new target_type and ops args + (wiggler_wait): now no longer takes pid and target_status as args, + stop trying to set target_status struct, remove BGND insn + checks + (read_bdm_registers): renamed to wiggler_read_bdm_registers + (wiggler_read_bdm_registers): numregs arg changed to reglen arg, + remove pktlen check, set reglen instead of numregs + (dump_all_bdm_regs): delete + (wiggler_fetch_registers): delete + (wiggler_prepare_to_store): now just an empty function + (wiggler_store_registers): delete + (wiggler_read_bdm_register): new + (wiggler_write_bdm_registers): new + (wiggler_write_bdm_register): new + (wiggler_write_bytes): use write_mem_command variable instead of + WIGGLER_WRITE_MEM + (get_packet): renamed to wiggler_get_packet, change refs throughout + (put_packet): renamed to wiggler_put_packet, change refs throughout + (wiggler_get_packet): add break to default case of switch, + change length of WIGGLER_GET_VERSION len to 10 from 4 to match + specs + (wiggler_mourn): unpush_target with current_ops, not &wiggler_ops + (flash_xfer_memory): delete + (noop_store_registers): new placeholder replacement for + target_store_registers() which prevents generic_load from trying to + set up the PC. + (bdm_update_flash_command): add store_registers_tmp variable, + make handling of wiggler_ops more generic -- define wiggler_ops + in a target-specific file instead (such as ppc-bdm.c in the case + of the ppc), use current_target to deal with registers again + making this file less target-specific. + (bdm_read_register_command): new + (_initialize_remote_wiggler): stop doing add_target (&wiggler_ops), + comment out add_cmd ("read-register", ...) + * ocd.h: new, contains common wiggler prototypes, command definitions + * ppc-bdm.c: file for ppc-specific OCD code, including target_ops + structure for ppc bdm + (bdm_ppc_open): new + (bdm_ppc_wait): new + (bdm_ppc_fetch_registers): new + (bdm_ppc_store_registers_: new + (_initialize_bdm_ppc): new + * config/powerpc/tm-ppc-eabi.h: add necessary CPU32 BDM defines + start-sanitize-tic80 Tue Aug 5 23:56:14 1997 Mark Alexander diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 0637f5bef7..99309c1610 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -51,6 +51,7 @@ AR = @AR@ AR_FLAGS = qv RANLIB = @RANLIB@ AWK = @AWK@ +DLLTOOL = @DLLTOOL@ # Flags that describe where you can find the termcap library. # This can be overridden in the host Makefile fragment file. @@ -137,7 +138,7 @@ TCL_CFLAGS = @TCLHDIR@ # Where is the TK library? Typically in ../tk. TK = @TK_BUILD_LIB_SPEC@ -TK_CFLAGS = @TKHDIR@ +TK_CFLAGS = @TKHDIR@ @TK_BUILD_INCLUDES@ # Where is Itcl? Typically in ../itcl. ITCL_CFLAGS = @ITCLHDIR@ @@ -151,6 +152,9 @@ X11_CFLAGS = @TK_XINCLUDES@ X11_LDFLAGS = X11_LIBS = +WIN32LDAPP = @WIN32LDAPP@ +WIN32LIBS = @WIN32LIBS@ + ENABLE_GDBTK= @ENABLE_GDBTK@ ENABLE_IDE= @ENABLE_IDE@ @@ -228,7 +232,7 @@ INSTALLED_LIBS=-lbfd -lreadline -lopcodes -liberty \ -lmmalloc -liberty CLIBS = $(SIM) $(BFD) $(READLINE) $(OPCODES) $(LIBIBERTY) \ $(TERMCAP) $(XM_CLIBS) $(TM_CLIBS) $(NAT_CLIBS) @LIBS@ \ - $(MMALLOC) $(LIBIBERTY) + $(MMALLOC) $(LIBIBERTY) $(WIN32LIBS) CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE) \ $(OPCODES) $(MMALLOC) $(LIBIBERTY) @@ -282,6 +286,7 @@ FLAGS_TO_PASS = \ "CHILL_LIB=$(CHILL_LIB)" \ "CXX=$(CXX)" \ "CXXFLAGS=$(CXXFLAGS)" \ + "DLLTOOL=$(DLLTOOL)" \ "RANLIB=$(RANLIB)" \ "MAKEINFO=$(MAKEINFO)" \ "INSTALL=$(INSTALL)" \ @@ -642,7 +647,7 @@ init.c: $(OBS) $(TSOBS) # Removing the old gdb first works better if it is running, at least on SunOS. gdb: $(OBS) $(TSOBS) $(ADD_DEPS) $(CDEPS) init.o rm -f gdb - $(HLDENV) $(CC_LD) $(INTERNAL_LDFLAGS) -o gdb \ + $(HLDENV) $(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) -o gdb \ init.o $(OBS) $(TSOBS) $(ADD_FILES) $(CLIBS) $(LOADLIBES) nlm: force @@ -753,7 +758,7 @@ tags: TAGS clean mostlyclean: @$(MAKE) $(FLAGS_TO_PASS) DO=clean "DODIRS=$(SUBDIRS)" subdir_do - rm -f *.o $(ADD_FILES) *~ init.c-tmp + rm -f *.o *.a $(ADD_FILES) *~ init.c-tmp rm -f init.c version.c rm -f gdb core make.log libgdb-files rm -f gdb[0-9] @@ -955,7 +960,7 @@ ALLDEPFILES = 29k-share/udi/udip2soc.c 29k-share/udi/udr.c \ remote-st.c remote-utils.c dcache.c \ remote-udi.c remote-vx.c remote-vx29k.c \ rs6000-nat.c rs6000-tdep.c \ - ser-go32.c ser-tcp.c sh-tdep.c solib.c sparc-nat.c \ + ser-go32.c ser-ocd.c ser-tcp.c sh-tdep.c solib.c sparc-nat.c \ sparc-tdep.c sparcl-tdep.c sun3-nat.c sun386-nat.c \ symm-tdep.c symm-nat.c \ tahoe-tdep.c ultra3-nat.c ultra3-xdep.c umax-xdep.c \ @@ -1381,6 +1386,10 @@ parse.o: parse.c $(command_h) $(defs_h) $(expression_h) $(frame_h) \ $(gdbtypes_h) language.h parser-defs.h $(symtab_h) $(value_h) \ gdb_string.h +ppc-bdm.o: ppc-bdm.c $(defs_h) $(gdbcore_h) gdb_string.h $(frame_h) \ + $(inferior_h) $(bfd_h) symfile.h target.h $(wait_h) $(gdbcmd_h) \ + objfiles.h gdb-stabs.h serial.h ocd.h + ppcbug-rom.o: ppcbug-rom.c monitor.h $(bfd_h) $(wait_h) $(defs_h) $(gdbcmd_h) \ $(inferior_h) target.h serial.h terminal.h @@ -1459,8 +1468,9 @@ remote-vx29k.o: remote-vx29k.c $(wait_h) complaints.h $(defs_h) $(gdbcmd_h) \ vx-share/ptrace.h vx-share/xdr_ld.h vx-share/xdr_ptrace.h \ vx-share/xdr_rdb.h gdb_string.h -remote-wiggler.o: remote-wiggler.c $(wait_h) complaints.h $(defs_h) \ - $(gdbcmd_h) $(gdbcore_h) $(inferior_h) target.h +ocd.o: ocd.c ocd.h $(gdbcore_h) gdb_string.h $(frame_h) $(inferior_h) \ + $(bfd_h) symfile.h target.h $(wait_h) $(gdbcmd_h) objfiles.h \ + gdb-stabs.h $(dcache_h) serial.h remote-utils.o: remote-utils.c $(defs_h) $(gdbcmd_h) $(gdbcore_h) \ $(inferior_h) $(remote_utils_h) gdb_string.h @@ -1493,6 +1503,8 @@ ser-go32.o: ser-go32.c $(defs_h) serial.h ser-mac.o: ser-mac.c $(defs_h) serial.h signals.h +ser-ocd.o: ser-ocd.c $(defs_h) serial.h signals.h gdb_string.h + ser-tcp.o: ser-tcp.c $(defs_h) serial.h signals.h gdb_string.h ser-unix.o: ser-unix.c $(defs_h) serial.h diff --git a/gdb/config/i386/cygwin32.mh b/gdb/config/i386/cygwin32.mh index e3686d1212..0655e1eba8 100644 --- a/gdb/config/i386/cygwin32.mh +++ b/gdb/config/i386/cygwin32.mh @@ -1,8 +1,19 @@ MH_CFLAGS= XM_FILE=xm-cygwin32.h -XDEPFILES=ser-tcp.o +XDEPFILES=ser-tcp.o ocd.o ser-ocd.o libwigglers.a TERMCAP= NATDEPFILES= win32-nat.o NAT_FILE=../nm-empty.h XM_CLIBS= MMALLOC_CFLAGS = -I$(MMALLOC_SRC) -DMMCHECK_FORCE=1 + +# BDM specific definitions for accessing the Wigglers.dll on Win32 +BDM_DLLNAME = Wigglers.dll +BDM_LIBNAME = libwigglers.a +BDM_DEFFILE = $(srcdir)/wigglers.def + +# Makefile target for making BDM_LIBNAME +libwigglers.def: + $(DLLTOOL) --as=i386-cygwin32-as -k --dllname $(BDM_DLLNAME) --output-lib $(BDM_LIBNAME) --def $(BDM_DEFFILE) + +libwigglers.a: libwigglers.def diff --git a/gdb/config/powerpc/ppc-eabi.mt b/gdb/config/powerpc/ppc-eabi.mt index b5da734f23..680ef1c4bf 100644 --- a/gdb/config/powerpc/ppc-eabi.mt +++ b/gdb/config/powerpc/ppc-eabi.mt @@ -1,3 +1,3 @@ # Target: PowerPC running eabi -TDEPFILES= rs6000-tdep.o remote-ppcbug.o +TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o TM_FILE= tm-ppc-eabi.h diff --git a/gdb/config/powerpc/ppc-sim.mt b/gdb/config/powerpc/ppc-sim.mt index 5a590ac084..f48d4dbc9c 100644 --- a/gdb/config/powerpc/ppc-sim.mt +++ b/gdb/config/powerpc/ppc-sim.mt @@ -1,5 +1,5 @@ # Target: PowerPC running eabi under the simulator -TDEPFILES= rs6000-tdep.o remote-ppcbug.o +TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o TM_FILE= tm-ppc-eabi.h SIM_OBS = remote-sim.o diff --git a/gdb/configure b/gdb/configure index 0e08faf508..5d35b54df7 100755 --- a/gdb/configure +++ b/gdb/configure @@ -864,6 +864,9 @@ else fi +DLLTOOL=${DLLTOOL-dlltool} + + ac_aux_dir= for ac_dir in `cd $srcdir;pwd`/.. $srcdir/`cd $srcdir;pwd`/..; do if test -f $ac_dir/install-sh; then @@ -911,7 +914,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:915: checking host system type" >&5 +echo "configure:918: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -932,7 +935,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:936: checking target system type" >&5 +echo "configure:939: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -950,7 +953,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:954: checking build system type" >&5 +echo "configure:957: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -995,7 +998,7 @@ configdirs="doc testsuite" # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:999: checking for a BSD compatible install" >&5 +echo "configure:1002: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1053,7 +1056,7 @@ fi # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1057: checking for $ac_word" >&5 +echo "configure:1060: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1084,7 +1087,7 @@ fi # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1088: checking for $ac_word" >&5 +echo "configure:1091: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1115,7 +1118,7 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1119: checking for $ac_word" >&5 +echo "configure:1122: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1151,7 +1154,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1155: checking for $ac_word" >&5 +echo "configure:1158: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1185,7 +1188,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1189: checking for $ac_word" >&5 +echo "configure:1192: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1235,12 +1238,12 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:1239: checking return type of signal handlers" >&5 +echo "configure:1242: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1257,7 +1260,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:1261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -1277,12 +1280,12 @@ EOF echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1281: checking for ANSI C header files" >&5 +echo "configure:1284: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1290,7 +1293,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1294: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1297: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -1307,7 +1310,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1325,7 +1328,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1346,7 +1349,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1357,7 +1360,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then : else @@ -1384,17 +1387,17 @@ for ac_hdr in limits.h memory.h string.h strings.h unistd.h termios.h termio.h s do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1388: checking for $ac_hdr" >&5 +echo "configure:1391: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1398: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1401: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -1421,12 +1424,12 @@ fi done echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6 -echo "configure:1425: checking whether stat file-mode macros are broken" >&5 +echo "configure:1428: checking whether stat file-mode macros are broken" >&5 if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1478,12 +1481,12 @@ fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:1482: checking for working const" >&5 +echo "configure:1485: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1539: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -1556,12 +1559,12 @@ fi for ac_func in setpgid sbrk select poll do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1560: checking for $ac_func" >&5 +echo "configure:1563: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1626,19 +1629,19 @@ EOF fi echo $ac_n "checking for gregset_t type""... $ac_c" 1>&6 -echo "configure:1630: checking for gregset_t type" >&5 +echo "configure:1633: checking for gregset_t type" >&5 if eval "test \"`echo '$''{'gdb_cv_have_gregset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { gregset_t *gregsetp = 0 ; return 0; } EOF -if { (eval echo configure:1642: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* gdb_cv_have_gregset_t=yes else @@ -1659,19 +1662,19 @@ EOF fi echo $ac_n "checking for fpregset_t type""... $ac_c" 1>&6 -echo "configure:1663: checking for fpregset_t type" >&5 +echo "configure:1666: checking for fpregset_t type" >&5 if eval "test \"`echo '$''{'gdb_cv_have_fpregset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { fpregset_t *fpregsetp = 0 ; return 0; } EOF -if { (eval echo configure:1675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* gdb_cv_have_fpregset_t=yes else @@ -1692,7 +1695,7 @@ EOF fi echo $ac_n "checking for main in -lm""... $ac_c" 1>&6 -echo "configure:1696: checking for main in -lm" >&5 +echo "configure:1699: checking for main in -lm" >&5 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1700,14 +1703,14 @@ else ac_save_LIBS="$LIBS" LIBS="-lm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1737,12 +1740,12 @@ fi echo $ac_n "checking for long long support in compiler""... $ac_c" 1>&6 -echo "configure:1741: checking for long long support in compiler" >&5 +echo "configure:1744: checking for long long support in compiler" >&5 if eval "test \"`echo '$''{'gdb_cv_c_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gdb_cv_c_long_long=yes else @@ -1774,7 +1777,7 @@ fi echo $ac_n "checking for long long support in printf""... $ac_c" 1>&6 -echo "configure:1778: checking for long long support in printf" >&5 +echo "configure:1781: checking for long long support in printf" >&5 if eval "test \"`echo '$''{'gdb_cv_printf_has_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1782,7 +1785,7 @@ else gdb_cv_printf_has_long_long=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then gdb_cv_printf_has_long_long=yes else @@ -1816,19 +1819,19 @@ echo "$ac_t""$gdb_cv_printf_has_long_long" 1>&6 echo $ac_n "checking for long double support in compiler""... $ac_c" 1>&6 -echo "configure:1820: checking for long double support in compiler" >&5 +echo "configure:1823: checking for long double support in compiler" >&5 if eval "test \"`echo '$''{'ac_cv_c_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_long_double=yes else @@ -1850,7 +1853,7 @@ fi echo $ac_n "checking for long double support in printf""... $ac_c" 1>&6 -echo "configure:1854: checking for long double support in printf" >&5 +echo "configure:1857: checking for long double support in printf" >&5 if eval "test \"`echo '$''{'gdb_cv_printf_has_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1858,7 +1861,7 @@ else gdb_cv_printf_has_long_double=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then gdb_cv_printf_has_long_double=yes else @@ -1894,17 +1897,17 @@ for ac_hdr in unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1898: checking for $ac_hdr" >&5 +echo "configure:1901: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1908: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1911: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -1933,12 +1936,12 @@ done for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1937: checking for $ac_func" >&5 +echo "configure:1940: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1986,7 +1989,7 @@ fi done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:1990: checking for working mmap" >&5 +echo "configure:1993: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1994,7 +1997,7 @@ else ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else @@ -2158,12 +2161,12 @@ fi echo $ac_n "checking whether malloc must be declared""... $ac_c" 1>&6 -echo "configure:2162: checking whether malloc must be declared" >&5 +echo "configure:2165: checking whether malloc must be declared" >&5 if eval "test \"`echo '$''{'bfd_cv_decl_needed_malloc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -2184,7 +2187,7 @@ int main() { char *(*pfn) = (char *(*)) malloc ; return 0; } EOF -if { (eval echo configure:2188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_decl_needed_malloc=no else @@ -2206,12 +2209,12 @@ EOF fi echo $ac_n "checking whether realloc must be declared""... $ac_c" 1>&6 -echo "configure:2210: checking whether realloc must be declared" >&5 +echo "configure:2213: checking whether realloc must be declared" >&5 if eval "test \"`echo '$''{'bfd_cv_decl_needed_realloc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -2232,7 +2235,7 @@ int main() { char *(*pfn) = (char *(*)) realloc ; return 0; } EOF -if { (eval echo configure:2236: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2239: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_decl_needed_realloc=no else @@ -2254,12 +2257,12 @@ EOF fi echo $ac_n "checking whether free must be declared""... $ac_c" 1>&6 -echo "configure:2258: checking whether free must be declared" >&5 +echo "configure:2261: checking whether free must be declared" >&5 if eval "test \"`echo '$''{'bfd_cv_decl_needed_free'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -2280,7 +2283,7 @@ int main() { char *(*pfn) = (char *(*)) free ; return 0; } EOF -if { (eval echo configure:2284: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2287: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_decl_needed_free=no else @@ -2308,7 +2311,7 @@ if test ${build} = ${host} -a ${host} = ${target} ; then case ${host_os} in hpux*) echo $ac_n "checking for HPUX/OSF thread support""... $ac_c" 1>&6 -echo "configure:2312: checking for HPUX/OSF thread support" >&5 +echo "configure:2315: checking for HPUX/OSF thread support" >&5 if test -f /usr/include/dce/cma_config.h ; then if test "$GCC" = "yes" ; then echo "$ac_t""yes" 1>&6 @@ -2326,7 +2329,7 @@ EOF ;; solaris*) echo $ac_n "checking for Solaris thread debugging library""... $ac_c" 1>&6 -echo "configure:2330: checking for Solaris thread debugging library" >&5 +echo "configure:2333: checking for Solaris thread debugging library" >&5 if test -f /usr/lib/libthread_db.so.1 ; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF @@ -2335,7 +2338,7 @@ EOF CONFIG_OBS="${CONFIG_OBS} sol-thread.o" echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:2339: checking for dlopen in -ldl" >&5 +echo "configure:2342: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2343,7 +2346,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2480,12 +2483,12 @@ fi # In the cygwin32 environment, we need some additional flags. echo $ac_n "checking for cygwin32""... $ac_c" 1>&6 -echo "configure:2484: checking for cygwin32" >&5 +echo "configure:2487: checking for cygwin32" >&5 if eval "test \"`echo '$''{'gdb_cv_os_cygwin32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 -echo "configure:2542: checking for Tcl configuration" >&5 +echo "configure:2545: checking for Tcl configuration" >&5 if eval "test \"`echo '$''{'ac_cv_c_tclconfig'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2646,7 +2649,7 @@ if test "${with_tkconfig+set}" = set; then fi echo $ac_n "checking for Tk configuration""... $ac_c" 1>&6 -echo "configure:2650: checking for Tk configuration" >&5 +echo "configure:2653: checking for Tk configuration" >&5 if eval "test \"`echo '$''{'ac_cv_c_tkconfig'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2742,7 +2745,7 @@ fi no_tcl=true echo $ac_n "checking for Tcl private headers. dir=${configdir}""... $ac_c" 1>&6 -echo "configure:2746: checking for Tcl private headers. dir=${configdir}" >&5 +echo "configure:2749: checking for Tcl private headers. dir=${configdir}" >&5 # Check whether --with-tclinclude or --without-tclinclude was given. if test "${with_tclinclude+set}" = set; then withval="$with_tclinclude" @@ -2808,17 +2811,17 @@ fi if test x"${ac_cv_c_tclh}" = x ; then ac_safe=`echo "tclInt.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for tclInt.h""... $ac_c" 1>&6 -echo "configure:2812: checking for tclInt.h" >&5 +echo "configure:2815: checking for tclInt.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2825: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -2878,7 +2881,7 @@ fi # no_tk=true echo $ac_n "checking for Tk private headers""... $ac_c" 1>&6 -echo "configure:2882: checking for Tk private headers" >&5 +echo "configure:2885: checking for Tk private headers" >&5 # Check whether --with-tkinclude or --without-tkinclude was given. if test "${with_tkinclude+set}" = set; then withval="$with_tkinclude" @@ -2944,17 +2947,17 @@ fi if test x"${ac_cv_c_tkh}" = x ; then ac_safe=`echo "tk.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for tk.h""... $ac_c" 1>&6 -echo "configure:2948: checking for tk.h" >&5 +echo "configure:2951: checking for tk.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2958: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2961: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -3000,7 +3003,7 @@ fi echo $ac_n "checking for Itcl private headers. srcdir=${srcdir}""... $ac_c" 1>&6 -echo "configure:3004: checking for Itcl private headers. srcdir=${srcdir}" >&5 +echo "configure:3007: checking for Itcl private headers. srcdir=${srcdir}" >&5 if test x"${ac_cv_c_itclh}" = x ; then for i in ${srcdir}/../itcl ${srcdir}/../../itcl ${srcdir}/../../../itcl ; do if test -f $i/src/itcl.h ; then @@ -3023,7 +3026,7 @@ fi echo $ac_n "checking for Tix private headers. srcdir=${srcdir}""... $ac_c" 1>&6 -echo "configure:3027: checking for Tix private headers. srcdir=${srcdir}" >&5 +echo "configure:3030: checking for Tix private headers. srcdir=${srcdir}" >&5 if test x"${ac_cv_c_tixh}" = x ; then for i in ${srcdir}/../tix ${srcdir}/../../tix ${srcdir}/../../../tix ; do if test -f $i/generic/tix.h ; then @@ -3229,7 +3232,7 @@ links="${links} nm.h" fi # start-sanitize-gdbtk echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:3233: checking whether ln -s works" >&5 +echo "configure:3236: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3398,6 +3401,7 @@ s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@CC@%$CC%g s%@CPP@%$CPP%g +s%@DLLTOOL@%$DLLTOOL%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g diff --git a/gdb/configure.in b/gdb/configure.in index d9fe00a755..cb72af8464 100644 --- a/gdb/configure.in +++ b/gdb/configure.in @@ -28,6 +28,9 @@ AC_AIX AC_MINIX AC_ISC_POSIX +DLLTOOL=${DLLTOOL-dlltool} +AC_SUBST(DLLTOOL) + AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/..) AC_CANONICAL_SYSTEM diff --git a/gdb/remote-wiggler.c b/gdb/ocd.c similarity index 67% rename from gdb/remote-wiggler.c rename to gdb/ocd.c index c767641175..b20bd9c8e4 100644 --- a/gdb/remote-wiggler.c +++ b/gdb/ocd.c @@ -1,5 +1,5 @@ /* Remote target communications for the Macraigor Systems BDM Wiggler - Copyright 1996 Free Software Foundation, Inc. + Copyright 1996, 1997 Free Software Foundation, Inc. This file is part of GDB. @@ -30,122 +30,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gdbcmd.h" #include "objfiles.h" #include "gdb-stabs.h" - #include "dcache.h" - -#ifdef USG #include -#endif - #include #include "serial.h" - -/* Wiggler serial protocol definitions */ - -#define DLE 020 /* Quote char */ -#define SYN 026 /* Start of packet */ -#define RAW_SYN ((026 << 8) | 026) /* get_quoted_char found a naked SYN */ - -/* Status flags */ - -#define WIGGLER_FLAG_RESET 0x01 /* Target is being reset */ -#define WIGGLER_FLAG_STOPPED 0x02 /* Target is halted */ -#define WIGGLER_FLAG_BDM 0x04 /* Target is in BDM */ -#define WIGGLER_FLAG_PWF 0x08 /* Power failed */ -#define WIGGLER_FLAG_CABLE_DISC 0x10 /* BDM cable disconnected */ - -#define WIGGLER_AYT 0x0 /* Are you there? */ -#define WIGGLER_GET_VERSION 0x1 /* Get Version */ -#define WIGGLER_SET_BAUD_RATE 0x2 /* Set Baud Rate */ -#define WIGGLER_INIT 0x10 /* Initialize Wiggler */ -#define WIGGLER_SET_SPEED 0x11 /* Set Speed */ -#define WIGGLER_GET_STATUS_MASK 0x12 /* Get Status Mask */ -#define WIGGLER_GET_CTRS 0x13 /* Get Error Counters */ -#define WIGGLER_SET_FUNC_CODE 0x14 /* Set Function Code */ -#define WIGGLER_SET_CTL_FLAGS 0x15 /* Set Control Flags */ -#define WIGGLER_SET_BUF_ADDR 0x16 /* Set Register Buffer Address */ -#define WIGGLER_RUN 0x20 /* Run Target from PC */ -#define WIGGLER_RUN_ADDR 0x21 /* Run Target from Specified Address */ -#define WIGGLER_STOP 0x22 /* Stop Target */ -#define WIGGLER_RESET_RUN 0x23 /* Reset Target and Run */ -#define WIGGLER_RESET 0x24 /* Reset Target and Halt */ -#define WIGGLER_STEP 0x25 /* Single step */ -#define WIGGLER_READ_REGS 0x30 /* Read Registers */ -#define WIGGLER_WRITE_REGS 0x31 /* Write Registers */ -#define WIGGLER_READ_MEM 0x32 /* Read Memory */ -#define WIGGLER_WRITE_MEM 0x33 /* Write Memory */ -#define WIGGLER_FILL_MEM 0x34 /* Fill Memory */ -#define WIGGLER_MOVE_MEM 0x35 /* Move Memory */ - -#define WIGGLER_READ_INT_MEM 0x80 /* Read Internal Memory */ -#define WIGGLER_WRITE_INT_MEM 0x81 /* Write Internal Memory */ -#define WIGGLER_JUMP 0x82 /* Jump to Subroutine */ - -#define WIGGLER_ERASE_FLASH 0x90 /* Erase flash memory */ -#define WIGGLER_PROGRAM_FLASH 0x91 /* Write flash memory */ -#define WIGGLER_EXIT_MON 0x93 /* Exit the flash programming monitor */ -#define WIGGLER_ENTER_MON 0x94 /* Enter the flash programming monitor */ - -#define WIGGLER_SET_STATUS 0x0a /* Set status */ -#define WIGGLER_FLAG_STOP 0x0 /* Stop the target, enter BDM */ -#define WIGGLER_FLAG_START 0x01 /* Start the target at PC */ -#define WIGGLER_FLAG_RETURN_STATUS 0x04 /* Return async status */ - -/* Stuff that should be in tm-xxx files. */ -#if 1 -#define BDM_NUM_REGS 24 -#define BDM_REGMAP 0, 1, 2, 3, 4, 5, 6, 7, /* d0 -> d7 */ \ - 8, 9, 10, 11, 12, 13, 14, 15, /* a0 -> a7 */ \ - 18, 16, /* ps, pc */ \ - -1, -1, -1, -1, -1, -1, -1, -1, /* fp0 -> fp7 */ \ - -1, -1, -1, -1, -1 /* fpcontrol, fpstatus, fpiaddr, fpcode, fpflags */ -#define BDM_BREAKPOINT 0x4a, 0xfa /* BGND insn */ -#else -#define BDM_NUM_REGS 24 -#define BDM_REGMAP 8, 9, 10, 11, 12, 13, 14, 15, /* d0 -> d7 */ \ - 16, 17, 18, 19, 20, 21, 22, 23, /* a0 -> a7 */ \ - 4, 0, /* ps, pc */ \ - -1, -1, -1, -1, -1, -1, -1, -1, /* fp0 -> fp7 */ \ - -1, -1, -1, -1, -1 /* fpcontrol, fpstatus, fpiaddr, fpcode, fpflags */ -#define WIGGLER_POLL -#endif +#include "ocd.h" /* Prototypes for local functions */ -static void wiggler_stop PARAMS ((void)); - -static void put_packet PARAMS ((unsigned char *packet, int pktlen)); -static unsigned char * get_packet PARAMS ((int cmd, int *pktlen, int timeout)); - static int wiggler_write_bytes PARAMS ((CORE_ADDR memaddr, char *myaddr, int len)); static int wiggler_read_bytes PARAMS ((CORE_ADDR memaddr, char *myaddr, int len)); -static void wiggler_files_info PARAMS ((struct target_ops *ignore)); - -static int wiggler_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, - int len, int should_write, - struct target_ops *target)); - -static void wiggler_prepare_to_store PARAMS ((void)); - -static void wiggler_fetch_registers PARAMS ((int regno)); - -static void wiggler_resume PARAMS ((int pid, int step, - enum target_signal siggnal)); - static int wiggler_start_remote PARAMS ((char *dummy)); -static void wiggler_open PARAMS ((char *name, int from_tty)); - -static void wiggler_close PARAMS ((int quitting)); - -static void wiggler_store_registers PARAMS ((int regno)); - -static void wiggler_mourn PARAMS ((void)); - static int readchar PARAMS ((int timeout)); static void reset_packet PARAMS ((void)); @@ -156,12 +56,6 @@ static int get_quoted_char PARAMS ((int timeout)); static void put_quoted_char PARAMS ((int c)); -static int wiggler_wait PARAMS ((int pid, struct target_waitstatus *status)); - -static void wiggler_kill PARAMS ((void)); - -static void wiggler_detach PARAMS ((char *args, int from_tty)); - static void wiggler_interrupt PARAMS ((int signo)); static void wiggler_interrupt_twice PARAMS ((int signo)); @@ -170,11 +64,11 @@ static void interrupt_query PARAMS ((void)); static unsigned char * do_command PARAMS ((int cmd, int *statusp, int *lenp)); -static unsigned char * read_bdm_registers PARAMS ((int first_bdm_regno, - int last_bdm_regno, - int *numregs)); +static void wiggler_put_packet PARAMS ((unsigned char *packet, int pktlen)); + +static unsigned char * wiggler_get_packet PARAMS ((int cmd, int *pktlen, int timeout)); -extern struct target_ops wiggler_ops; /* Forward decl */ +static struct target_ops *current_ops = NULL; static int last_run_status; @@ -190,9 +84,9 @@ extern int remote_timeout; /* Descriptor for I/O to remote machine. Initialize it to NULL so that wiggler_open knows that we don't have a file open when the program starts. */ -serial_t wiggler_desc = NULL; +static serial_t wiggler_desc = NULL; -static void +void wiggler_error (s, error_code) char *s; int error_code; @@ -228,7 +122,7 @@ wiggler_error (s, error_code) /* Return nonzero if the thread TH is still alive on the remote system. */ -static int +int wiggler_thread_alive (th) int th; { @@ -238,7 +132,7 @@ wiggler_thread_alive (th) /* Clean up connection to a remote debugger. */ /* ARGSUSED */ -static void +void wiggler_close (quitting) int quitting; { @@ -258,6 +152,9 @@ wiggler_start_remote (dummy) int status; int error_code; int speed; + enum wiggler_target_type target_type; + + target_type = (enum wiggler_target_type)dummy; immediate_quit = 1; /* Allow user to interrupt it */ @@ -276,9 +173,9 @@ wiggler_start_remote (dummy) buf[0] = WIGGLER_INIT; buf[1] = speed >> 8; buf[2] = speed & 0xff; - buf[3] = 0; /* CPU32 for now */ - put_packet (buf, 4); /* Init Wiggler params */ - p = get_packet (buf[0], &pktlen, remote_timeout); + buf[3] = target_type; + wiggler_put_packet (buf, 4); /* Init Wiggler params */ + p = wiggler_get_packet (buf[0], &pktlen, remote_timeout); if (pktlen < 2) error ("Truncated response packet from Wiggler"); @@ -306,9 +203,9 @@ wiggler_start_remote (dummy) buf[0] = WIGGLER_SET_CTL_FLAGS; buf[1] = 0; buf[2] = 1; /* Asynchronously return status when target stops */ - put_packet (buf, 3); + wiggler_put_packet (buf, 3); - p = get_packet (buf[0], &pktlen, remote_timeout); + p = wiggler_get_packet (buf[0], &pktlen, remote_timeout); if (pktlen < 2) error ("Truncated response packet from Wiggler"); @@ -342,10 +239,12 @@ wiggler_start_remote (dummy) static DCACHE *wiggler_dcache; -static void -wiggler_open (name, from_tty) +void +wiggler_open (name, from_tty, target_type, ops) char *name; int from_tty; + enum wiggler_target_type target_type; + struct target_ops *ops; { if (name == 0) error ("To open a Wiggler connection, you need to specify what serial\n\ @@ -353,7 +252,9 @@ device the Wiggler is attached to (e.g. /dev/ttya)."); target_preopen (from_tty); - unpush_target (&wiggler_ops); + current_ops = ops; + + unpush_target (current_ops); wiggler_dcache = dcache_init (wiggler_read_bytes, wiggler_write_bytes); @@ -382,7 +283,7 @@ device the Wiggler is attached to (e.g. /dev/ttya)."); puts_filtered (name); puts_filtered ("\n"); } - push_target (&wiggler_ops); /* Switch to using remote target now */ + push_target (current_ops); /* Switch to using remote target now */ /* Without this, some commands which require an active target (such as kill) won't work. This variable serves (at least) double duty as both the pid @@ -395,7 +296,7 @@ device the Wiggler is attached to (e.g. /dev/ttya)."); /* Start the remote connection; if error (0), discard this target. In particular, if the user quits, be sure to discard it (we'd be in an inconsistent state otherwise). */ - if (!catch_errors (wiggler_start_remote, (char *)0, + if (!catch_errors (wiggler_start_remote, (char *)target_type, "Couldn't establish connection to remote target\n", RETURN_MASK_ALL)) pop_target(); } @@ -405,7 +306,7 @@ device the Wiggler is attached to (e.g. /dev/ttya)."); better not have left any breakpoints in the target program or it'll die when it hits one. */ -static void +void wiggler_detach (args, from_tty) char *args; int from_tty; @@ -420,7 +321,7 @@ wiggler_detach (args, from_tty) /* Tell the remote machine to resume. */ -static void +void wiggler_resume (pid, step, siggnal) int pid, step; enum target_signal siggnal; @@ -435,7 +336,7 @@ wiggler_resume (pid, step, siggnal) do_command (WIGGLER_RUN, &last_run_status, &pktlen); } -static void +void wiggler_stop () { int status; @@ -467,7 +368,7 @@ wiggler_interrupt (signo) wiggler_stop (); buf[0] = WIGGLER_AYT; - put_packet (buf, 1); + wiggler_put_packet (buf, 1); wiggler_interrupt_flag = 1; } } @@ -511,10 +412,8 @@ static int kill_kludge; Returns "pid" (though it's not clear what, if anything, that means in the case of this target). */ -static int -wiggler_wait (pid, target_status) - int pid; - struct target_waitstatus *target_status; +int +wiggler_wait () { unsigned char *p; int error_code, status; @@ -522,16 +421,13 @@ wiggler_wait (pid, target_status) wiggler_interrupt_flag = 0; - target_status->kind = TARGET_WAITKIND_STOPPED; - target_status->value.sig = TARGET_SIGNAL_TRAP; - /* Target may already be stopped by the time we get here. */ if (!(last_run_status & WIGGLER_FLAG_BDM)) { ofunc = (void (*)()) signal (SIGINT, wiggler_interrupt); - p = get_packet (WIGGLER_AYT, &pktlen, -1); + p = wiggler_get_packet (WIGGLER_AYT, &pktlen, -1); signal (SIGINT, ofunc); @@ -551,46 +447,23 @@ wiggler_wait (pid, target_status) if (!(status & WIGGLER_FLAG_BDM)) error ("Wiggler woke up, but wasn't stopped: 0x%x", status); - - if (wiggler_interrupt_flag) - target_status->value.sig = TARGET_SIGNAL_INT; - } - - /* This test figures out if we just executed a BGND insn, and if it's one of - our breakpoints. If so, then we back up PC. N.B. When a BGND insn is - executed, the PC points at the loc just after the insn (ie: it's always - two bytes *after* the BGND). So, it's not sufficient to just see if PC-2 - is a BGND insn because we could have gotten there via a jump. We dis- - ambiguate this case by examining the ATEMP register (which is only - accessible from BDM). This will tell us if we entered BDM because we - executed a BGND insn. */ - - if (breakpoint_inserted_here_p (read_pc () - 2)) /* One of our breakpoints? */ - { /* Yes, see if we actually executed it */ -#if 0 /* Temporarily disabled until atemp reading is fixed. */ - int atemp; - int numregs; - - p = read_bdm_registers (23, 23, &numregs); - atemp = extract_unsigned_integer (p, 4); - - if (atemp == 1) /* And, did we hit a breakpoint insn? */ -#endif - write_pc (read_pc () - 2); /* Yes, then back up PC */ } - return inferior_pid; + if (wiggler_interrupt_flag) + return 1; + else + return 0; } -/* Read the remote registers into the block REGS. */ -/* Currently we just read all the registers, so we don't use regno. */ -/* ARGSUSED */ +/* Read registers from the Wiggler. Specify the starting and ending register + number. Return the number of regs actually read in *NUMREGS. Returns a + pointer to a static array containing the register contents. */ -static unsigned char * -read_bdm_registers (first_bdm_regno, last_bdm_regno, numregs) +unsigned char * +wiggler_read_bdm_registers (first_bdm_regno, last_bdm_regno, reglen) int first_bdm_regno; int last_bdm_regno; - int *numregs; + int *reglen; { unsigned char buf[10]; int i; @@ -605,11 +478,8 @@ read_bdm_registers (first_bdm_regno, last_bdm_regno, numregs) buf[3] = last_bdm_regno >> 8; buf[4] = last_bdm_regno & 0xff; - put_packet (buf, 5); - p = get_packet (WIGGLER_READ_REGS, &pktlen, remote_timeout); - - if (pktlen < 5) - error ("Truncated response packet from Wiggler"); + wiggler_put_packet (buf, 5); + p = wiggler_get_packet (WIGGLER_READ_REGS, &pktlen, remote_timeout); status = p[1]; error_code = p[2]; @@ -625,184 +495,76 @@ read_bdm_registers (first_bdm_regno, last_bdm_regno, numregs) || ((i & 3) != 0)) error ("Register block size bad: %d", i); - *numregs = i / 4; + *reglen = i; regs = p + 4; return regs; } -static void -dump_all_bdm_regs () -{ - unsigned char *regs; - int numregs; - int i; - - regs = read_bdm_registers (0, BDM_NUM_REGS - 1, &numregs); - - printf_unfiltered ("rpc = 0x%x ", - (int)extract_unsigned_integer (regs, 4)); - regs += 4; - printf_unfiltered ("usp = 0x%x ", - (int)extract_unsigned_integer (regs, 4)); - regs += 4; - printf_unfiltered ("ssp = 0x%x ", - (int)extract_unsigned_integer (regs, 4)); - regs += 4; - printf_unfiltered ("vbr = 0x%x ", - (int)extract_unsigned_integer (regs, 4)); - regs += 4; - printf_unfiltered ("sr = 0x%x ", - (int)extract_unsigned_integer (regs, 4)); - regs += 4; - printf_unfiltered ("sfc = 0x%x ", - (int)extract_unsigned_integer (regs, 4)); - regs += 4; - printf_unfiltered ("dfc = 0x%x ", - (int)extract_unsigned_integer (regs, 4)); - regs += 4; - printf_unfiltered ("atemp = 0x%x ", - (int)extract_unsigned_integer (regs, 4)); - regs += 4; - printf_unfiltered ("\n"); - - for (i = 0; i <= 7; i++) - printf_unfiltered ("d%i = 0x%x ", i, - (int)extract_unsigned_integer (regs + i * 4, 4)); - regs += 8 * 4; - printf_unfiltered ("\n"); - - for (i = 0; i <= 7; i++) - printf_unfiltered ("a%i = 0x%x ", i, - (int)extract_unsigned_integer (regs + i * 4, 4)); - printf_unfiltered ("\n"); -} - -static int bdm_regmap[] = {BDM_REGMAP}; +/* Read register BDM_REGNO and returns its value ala read_register() */ -/* Read the remote registers into the block REGS. */ -/* Currently we just read all the registers, so we don't use regno. */ -/* ARGSUSED */ -static void -wiggler_fetch_registers (regno) - int regno; +CORE_ADDR +wiggler_read_bdm_register (bdm_regno) + int bdm_regno; { - int i; - unsigned char *regs; - int first_regno, last_regno; - int first_bdm_regno, last_bdm_regno; - int numregs; - - if (regno == -1) - { - first_regno = 0; - last_regno = NUM_REGS - 1; - - first_bdm_regno = 0; - last_bdm_regno = BDM_NUM_REGS - 1; - } - else - { - first_regno = regno; - last_regno = regno; - - first_bdm_regno = bdm_regmap [regno]; - last_bdm_regno = bdm_regmap [regno]; - } - - if (first_bdm_regno == -1) - { - supply_register (first_regno, NULL); - return; /* Unsupported register */ - } - - regs = read_bdm_registers (first_bdm_regno, last_bdm_regno, &numregs); - - for (i = first_regno; i <= last_regno; i++) - { - int bdm_regno, regoffset; - - bdm_regno = bdm_regmap [i]; - if (bdm_regno != -1) - { - regoffset = bdm_regno - first_bdm_regno; - - if (regoffset >= numregs) - continue; + int reglen; + unsigned char *p; + CORE_ADDR regval; - supply_register (i, regs + 4 * regoffset); - } - else - supply_register (i, NULL); /* Unsupported register */ - } -} + p = wiggler_read_bdm_registers (bdm_regno, bdm_regno, ®len); + regval = extract_unsigned_integer (p, reglen); -static void -wiggler_prepare_to_store () -{ + return regval; } -/* Store register REGNO, or all registers if REGNO == -1, from the contents - of REGISTERS. FIXME: ignores errors. */ - -static void -wiggler_store_registers (regno) - int regno; +void +wiggler_write_bdm_registers (first_bdm_regno, regptr, reglen) + int first_bdm_regno; + unsigned char *regptr; + int reglen; { - unsigned char buf[10 + 256]; - int i; + unsigned char *buf; unsigned char *p; int error_code, status; int pktlen; - int first_regno, last_regno; - int first_bdm_regno, last_bdm_regno; - - if (regno == -1) - { - first_regno = 0; - last_regno = NUM_REGS - 1; - - first_bdm_regno = 0; - last_bdm_regno = BDM_NUM_REGS - 1; - } - else - { - first_regno = regno; - last_regno = regno; - first_bdm_regno = bdm_regmap [regno]; - last_bdm_regno = bdm_regmap [regno]; - } - - if (first_bdm_regno == -1) - return; /* Unsupported register */ + buf = alloca (4 + reglen); buf[0] = WIGGLER_WRITE_REGS; - buf[3] = 4; + buf[1] = first_bdm_regno >> 8; + buf[2] = first_bdm_regno & 0xff; + buf[3] = reglen; + memcpy (buf + 4, regptr, reglen); - for (i = first_regno; i <= last_regno; i++) - { - int bdm_regno; + wiggler_put_packet (buf, 4 + reglen); + p = wiggler_get_packet (WIGGLER_WRITE_REGS, &pktlen, remote_timeout); - bdm_regno = bdm_regmap [i]; + if (pktlen < 3) + error ("Truncated response packet from Wiggler"); - buf[1] = bdm_regno >> 8; - buf[2] = bdm_regno & 0xff; + status = p[1]; + error_code = p[2]; - memcpy (&buf[4], ®isters[REGISTER_BYTE (i)], 4); - put_packet (buf, 4 + 4); - p = get_packet (WIGGLER_WRITE_REGS, &pktlen, remote_timeout); + if (error_code != 0) + wiggler_error ("wiggler_write_bdm_registers:", error_code); +} - if (pktlen < 3) - error ("Truncated response packet from Wiggler"); +void +wiggler_write_bdm_register (bdm_regno, reg) + int bdm_regno; + CORE_ADDR reg; +{ + unsigned char buf[4]; - status = p[1]; - error_code = p[2]; + store_unsigned_integer (buf, 4, reg); - if (error_code != 0) - wiggler_error ("wiggler_store_registers:", error_code); - } + wiggler_write_bdm_registers (bdm_regno, buf, 4); +} + +void +wiggler_prepare_to_store () +{ } /* Write memory data directly to the remote machine. @@ -813,6 +575,8 @@ wiggler_store_registers (regno) Returns number of bytes transferred, or 0 for error. */ +static int write_mem_command = WIGGLER_WRITE_MEM; + static int wiggler_write_bytes (memaddr, myaddr, len) CORE_ADDR memaddr; @@ -825,7 +589,7 @@ wiggler_write_bytes (memaddr, myaddr, len) origlen = len; - buf[0] = WIGGLER_WRITE_MEM; + buf[0] = write_mem_command; buf[5] = 1; /* Write as bytes */ buf[6] = 0; /* Don't verify */ @@ -845,8 +609,8 @@ wiggler_write_bytes (memaddr, myaddr, len) buf[7] = numbytes; memcpy (&buf[8], myaddr, numbytes); - put_packet (buf, 8 + numbytes); - p = get_packet (WIGGLER_WRITE_MEM, &pktlen, remote_timeout); + wiggler_put_packet (buf, 8 + numbytes); + p = wiggler_get_packet (WIGGLER_WRITE_MEM, &pktlen, remote_timeout); if (pktlen < 3) error ("Truncated response packet from Wiggler"); @@ -918,8 +682,8 @@ wiggler_read_bytes (memaddr, myaddr, len) buf[6] = numbytes; - put_packet (buf, 7); - p = get_packet (WIGGLER_READ_MEM, &pktlen, remote_timeout); + wiggler_put_packet (buf, 7); + p = wiggler_get_packet (WIGGLER_READ_MEM, &pktlen, remote_timeout); if (pktlen < 4) error ("Truncated response packet from Wiggler"); @@ -960,7 +724,7 @@ wiggler_read_bytes (memaddr, myaddr, len) nonzero. Returns length of data written or read; 0 for error. */ /* ARGSUSED */ -static int +int wiggler_xfer_memory (memaddr, myaddr, len, should_write, target) CORE_ADDR memaddr; char *myaddr; @@ -971,7 +735,7 @@ wiggler_xfer_memory (memaddr, myaddr, len, should_write, target) return dcache_xfer_memory (wiggler_dcache, memaddr, myaddr, len, should_write); } -static void +void wiggler_files_info (ignore) struct target_ops *ignore; { @@ -1123,7 +887,7 @@ stu_put_packet (buf, len) */ static void -put_packet (buf, len) +wiggler_put_packet (buf, len) unsigned char *buf; int len; { @@ -1225,7 +989,7 @@ stu_get_packet (cmd, lenp, timeout) */ static unsigned char * -get_packet (cmd, lenp, timeout) +wiggler_get_packet (cmd, lenp, timeout) int cmd; int *lenp; { @@ -1241,7 +1005,7 @@ get_packet (cmd, lenp, timeout) ch = readchar (timeout); if (ch < 0) - error ("get_packet (readchar): %d", ch); + error ("wiggler_get_packet (readchar): %d", ch); if (ch != 0x55) goto find_packet; @@ -1256,7 +1020,7 @@ get_packet (cmd, lenp, timeout) ch = readchar (timeout); if (ch < 0) - error ("get_packet (readchar): %d", ch); + error ("wiggler_get_packet (readchar): %d", ch); *packet_ptr++ = ch; checksum += ch; @@ -1266,7 +1030,7 @@ get_packet (cmd, lenp, timeout) ch = readchar (timeout); if (ch < 0) - error ("get_packet (readchar): %d", ch); + error ("wiggler_get_packet (readchar): %d", ch); *packet_ptr++ = ch; checksum += ch; @@ -1275,7 +1039,7 @@ get_packet (cmd, lenp, timeout) ch = readchar (timeout); if (ch < 0) - error ("get_packet (readchar): %d", ch); + error ("wiggler_get_packet (readchar): %d", ch); *packet_ptr++ = ch; checksum += ch; @@ -1291,6 +1055,7 @@ get_packet (cmd, lenp, timeout) break; default: /* Error w/no params */ len = 0; + break; case 0x0: /* Normal result */ switch (packet[0]) { @@ -1320,7 +1085,7 @@ get_packet (cmd, lenp, timeout) len = 0; break; case WIGGLER_GET_VERSION: /* Get Version */ - len = 4; + len = 10; break; case WIGGLER_GET_STATUS_MASK: /* Get Status Mask */ len = 1; @@ -1342,7 +1107,7 @@ get_packet (cmd, lenp, timeout) ch = readchar (timeout); if (ch < 0) - error ("get_packet (readchar): %d", ch); + error ("wiggler_get_packet (readchar): %d", ch); *packet_ptr++ = ch; checksum += ch; len = ch; @@ -1355,7 +1120,7 @@ get_packet (cmd, lenp, timeout) ch = readchar (timeout); if (ch < 0) - error ("get_packet (readchar): %d", ch); + error ("wiggler_get_packet (readchar): %d", ch); *packet_ptr++ = ch; checksum += ch; } @@ -1385,8 +1150,8 @@ do_command (cmd, statusp, lenp) char errbuf[100]; buf[0] = cmd; - put_packet (buf, 1); /* Send command */ - p = get_packet (*buf, lenp, remote_timeout); + wiggler_put_packet (buf, 1); /* Send command */ + p = wiggler_get_packet (*buf, lenp, remote_timeout); if (*lenp < 3) error ("Truncated response packet from Wiggler"); @@ -1410,7 +1175,7 @@ do_command (cmd, statusp, lenp) return p + 3; } -static void +void wiggler_kill () { /* For some mysterious reason, wait_for_inferior calls kill instead of @@ -1427,17 +1192,17 @@ wiggler_kill () target_mourn_inferior (); } -static void +void wiggler_mourn () { - unpush_target (&wiggler_ops); + unpush_target (current_ops); generic_mourn_inferior (); } /* All we actually do is set the PC to the start address of exec_bfd, and start the program at that point. */ -static void +void wiggler_create_inferior (exec_file, args, env) char *exec_file; char *args; @@ -1450,7 +1215,7 @@ wiggler_create_inferior (exec_file, args, env) proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0); } -static void +void wiggler_load (args, from_tty) char *args; int from_tty; @@ -1526,58 +1291,13 @@ bdm_restart_command (args, from_tty) normal_stop (); } -static int -flash_xfer_memory (memaddr, myaddr, len, should_write, target) - CORE_ADDR memaddr; - char *myaddr; - int len; - int should_write; - struct target_ops *target; /* ignored */ -{ - char buf[256 + 10]; - unsigned char *p; - int origlen; - - if (!should_write) - abort (); - - origlen = len; - - buf[0] = WIGGLER_PROGRAM_FLASH; - - while (len > 0) - { - int numbytes; - int pktlen; - int status, error_code; - - numbytes = min (len, 256 - 6); - - buf[1] = memaddr >> 24; - buf[2] = memaddr >> 16; - buf[3] = memaddr >> 8; - buf[4] = memaddr; - - buf[5] = numbytes; - - memcpy (&buf[6], myaddr, numbytes); - put_packet (buf, 6 + numbytes); - p = get_packet (WIGGLER_PROGRAM_FLASH, &pktlen, remote_timeout); - if (pktlen < 3) - error ("Truncated response packet from Wiggler"); - - status = p[1]; - error_code = p[2]; - - if (error_code != 0) - wiggler_error ("flash_xfer_memory:", error_code); - - len -= numbytes; - memaddr += numbytes; - myaddr += numbytes; - } +/* Temporary replacement for target_store_registers(). This prevents + generic_load from trying to set the PC. */ - return origlen - len; +static void +noop_store_registers (regno) + int regno; +{ } static void @@ -1587,6 +1307,7 @@ bdm_update_flash_command (args, from_tty) { int status, pktlen; struct cleanup *old_chain; + void (*store_registers_tmp) PARAMS ((int)); if (!wiggler_desc) error ("Not connected to wiggler."); @@ -1600,70 +1321,41 @@ bdm_update_flash_command (args, from_tty) do_command (WIGGLER_ERASE_FLASH, &status, &pktlen); - wiggler_ops.to_xfer_memory = flash_xfer_memory; + write_mem_command = WIGGLER_PROGRAM_FLASH; + store_registers_tmp = current_target.to_store_registers; + current_target.to_store_registers = noop_store_registers; generic_load (args, from_tty); - wiggler_ops.to_xfer_memory = wiggler_xfer_memory; + current_target.to_store_registers = store_registers_tmp; + write_mem_command = WIGGLER_WRITE_MEM; do_command (WIGGLER_EXIT_MON, &status, &pktlen); /* discard_cleanups (old_chain);*/ } - -/* Define the target subroutine names */ - -struct target_ops wiggler_ops = { - "wiggler", /* to_shortname */ - "", /* to_longname */ - "", /* to_doc */ - wiggler_open, /* to_open */ - wiggler_close, /* to_close */ - NULL, /* to_attach */ - wiggler_detach, /* to_detach */ - wiggler_resume, /* to_resume */ - wiggler_wait, /* to_wait */ - wiggler_fetch_registers, /* to_fetch_registers */ - wiggler_store_registers, /* to_store_registers */ - wiggler_prepare_to_store, /* to_prepare_to_store */ - wiggler_xfer_memory, /* to_xfer_memory */ - wiggler_files_info, /* to_files_info */ - wiggler_insert_breakpoint, /* to_insert_breakpoint */ - memory_remove_breakpoint, /* to_remove_breakpoint */ - NULL, /* to_terminal_init */ - NULL, /* to_terminal_inferior */ - NULL, /* to_terminal_ours_for_output */ - NULL, /* to_terminal_ours */ - NULL, /* to_terminal_info */ - wiggler_kill, /* to_kill */ - wiggler_load, /* to_load */ - NULL, /* to_lookup_symbol */ - wiggler_create_inferior, /* to_create_inferior */ - wiggler_mourn, /* to_mourn_inferior */ - 0, /* to_can_run */ - 0, /* to_notice_signals */ - wiggler_thread_alive, /* to_thread_alive */ - 0, /* to_stop */ - process_stratum, /* to_stratum */ - NULL, /* to_next */ - 1, /* to_has_all_memory */ - 1, /* to_has_memory */ - 1, /* to_has_stack */ - 1, /* to_has_registers */ - 1, /* to_has_execution */ - NULL, /* sections */ - NULL, /* sections_end */ - OPS_MAGIC /* to_magic */ -}; +static void +bdm_read_register_command (args, from_tty) + char *args; + int from_tty; +{ + /* XXX repeat should go on to the next register */ + + if (!wiggler_desc) + error ("Not connected to wiggler."); + + if (!args) + error ("Must specify BDM register number."); + +} + void _initialize_remote_wiggler () { extern struct cmd_list_element *cmdlist; static struct cmd_list_element *bdm_cmd_list = NULL; - add_target (&wiggler_ops); - add_show_from_set (add_set_cmd ("remotetimeout", no_class, var_integer, (char *)&remote_timeout, "Set timeout value for remote read.\n", &setlist), @@ -1675,4 +1367,5 @@ _initialize_remote_wiggler () add_cmd ("reset", class_obscure, bdm_reset_command, "", &bdm_cmd_list); add_cmd ("restart", class_obscure, bdm_restart_command, "", &bdm_cmd_list); add_cmd ("update-flash", class_obscure, bdm_update_flash_command, "", &bdm_cmd_list); + /* add_cmd ("read-register", class_obscure, bdm_read_register_command, "", &bdm_cmd_list);*/ } diff --git a/gdb/ocd.h b/gdb/ocd.h new file mode 100644 index 0000000000..a8e0494b90 --- /dev/null +++ b/gdb/ocd.h @@ -0,0 +1,132 @@ +/* Definitions for the Macraigor Systems BDM Wiggler + Copyright 1996, 1997 Free Software Foundation, Inc. + +This file is part of GDB. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef WIGGLER_H +#define WIGGLER_H + +/* Wiggler serial protocol definitions */ + +#define DLE 020 /* Quote char */ +#define SYN 026 /* Start of packet */ +#define RAW_SYN ((026 << 8) | 026) /* get_quoted_char found a naked SYN */ + +/* Status flags */ + +#define WIGGLER_FLAG_RESET 0x01 /* Target is being reset */ +#define WIGGLER_FLAG_STOPPED 0x02 /* Target is halted */ +#define WIGGLER_FLAG_BDM 0x04 /* Target is in BDM */ +#define WIGGLER_FLAG_PWF 0x08 /* Power failed */ +#define WIGGLER_FLAG_CABLE_DISC 0x10 /* BDM cable disconnected */ + +/* Commands */ + +#define WIGGLER_AYT 0x0 /* Are you there? */ +#define WIGGLER_GET_VERSION 0x1 /* Get Version */ +#define WIGGLER_SET_BAUD_RATE 0x2 /* Set Baud Rate */ +#define WIGGLER_INIT 0x10 /* Initialize Wiggler */ +#define WIGGLER_SET_SPEED 0x11 /* Set Speed */ +#define WIGGLER_GET_STATUS_MASK 0x12 /* Get Status Mask */ +#define WIGGLER_GET_CTRS 0x13 /* Get Error Counters */ +#define WIGGLER_SET_FUNC_CODE 0x14 /* Set Function Code */ +#define WIGGLER_SET_CTL_FLAGS 0x15 /* Set Control Flags */ +#define WIGGLER_SET_BUF_ADDR 0x16 /* Set Register Buffer Address */ +#define WIGGLER_RUN 0x20 /* Run Target from PC */ +#define WIGGLER_RUN_ADDR 0x21 /* Run Target from Specified Address */ +#define WIGGLER_STOP 0x22 /* Stop Target */ +#define WIGGLER_RESET_RUN 0x23 /* Reset Target and Run */ +#define WIGGLER_RESET 0x24 /* Reset Target and Halt */ +#define WIGGLER_STEP 0x25 /* Single step */ +#define WIGGLER_READ_REGS 0x30 /* Read Registers */ +#define WIGGLER_WRITE_REGS 0x31 /* Write Registers */ +#define WIGGLER_READ_MEM 0x32 /* Read Memory */ +#define WIGGLER_WRITE_MEM 0x33 /* Write Memory */ +#define WIGGLER_FILL_MEM 0x34 /* Fill Memory */ +#define WIGGLER_MOVE_MEM 0x35 /* Move Memory */ + +#define WIGGLER_READ_INT_MEM 0x80 /* Read Internal Memory */ +#define WIGGLER_WRITE_INT_MEM 0x81 /* Write Internal Memory */ +#define WIGGLER_JUMP 0x82 /* Jump to Subroutine */ + +#define WIGGLER_ERASE_FLASH 0x90 /* Erase flash memory */ +#define WIGGLER_PROGRAM_FLASH 0x91 /* Write flash memory */ +#define WIGGLER_EXIT_MON 0x93 /* Exit the flash programming monitor */ +#define WIGGLER_ENTER_MON 0x94 /* Enter the flash programming monitor */ + +#define WIGGLER_SET_STATUS 0x0a /* Set status */ +#define WIGGLER_FLAG_STOP 0x0 /* Stop the target, enter BDM */ +#define WIGGLER_FLAG_START 0x01 /* Start the target at PC */ +#define WIGGLER_FLAG_RETURN_STATUS 0x04 /* Return async status */ + +/* Target type (for WIGGLER_INIT command) */ + +enum wiggler_target_type { + WIGGLER_TARGET_CPU32=0x0, /* Moto cpu32 family */ + WIGGLER_TARGET_CPU16=0x1, + WIGGLER_TARGET_MOTO_PPC=0x2, /* Motorola PPC 5xx/8xx */ + WIGGLER_TARGET_IBM_PPC=0x3}; /* IBM PPC 4xx */ + +void wiggler_open PARAMS ((char *name, int from_tty, enum wiggler_target_type, + struct target_ops *ops)); + +void wiggler_close PARAMS ((int quitting)); + +void wiggler_detach PARAMS ((char *args, int from_tty)); + +void wiggler_resume PARAMS ((int pid, int step, enum target_signal siggnal)); + +void wiggler_prepare_to_store PARAMS ((void)); + +void wiggler_stop PARAMS ((void)); + +void wiggler_files_info PARAMS ((struct target_ops *ignore)); + + +int wiggler_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, + int len, int should_write, + struct target_ops *target)); + +void wiggler_mourn PARAMS ((void)); + +void wiggler_create_inferior PARAMS ((char *exec_file, + char *args, + char **env)); + +int wiggler_thread_alive PARAMS ((int th)); + +void wiggler_error PARAMS ((char *s, int error_code)); + +void wiggler_kill PARAMS ((void)); + +void wiggler_load PARAMS((char *args, int from_tty)); + +unsigned char * wiggler_read_bdm_registers PARAMS ((int first_bdm_regno, + int last_bdm_regno, + int *reglen)); + +CORE_ADDR wiggler_read_bdm_register PARAMS ((int bdm_regno)); + +void wiggler_write_bdm_registers PARAMS ((int first_bdm_regno, + unsigned char *regptr, + int reglen)); + +void wiggler_write_bdm_register PARAMS ((int bdm_regno, CORE_ADDR reg)); + +int wiggler_wait PARAMS ((void)); + +#endif /* WIGGLER_H */ diff --git a/gdb/ppc-bdm.c b/gdb/ppc-bdm.c new file mode 100644 index 0000000000..6181298277 --- /dev/null +++ b/gdb/ppc-bdm.c @@ -0,0 +1,260 @@ +/* Remote target communications for the Macraigor Systems BDM Wiggler + talking to a Motorola PPC 505. + Copyright 1996, 1997 Free Software Foundation, Inc. + +This file is part of GDB. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include "defs.h" +#include "gdbcore.h" +#include "gdb_string.h" +#include +#include "frame.h" +#include "inferior.h" +#include "bfd.h" +#include "symfile.h" +#include "target.h" +#include "wait.h" +#include "gdbcmd.h" +#include "objfiles.h" +#include "gdb-stabs.h" +#include +#include +#include "serial.h" +#include "ocd.h" + +static void bdm_ppc_open PARAMS ((char *name, int from_tty)); + +static int bdm_ppc_wait PARAMS ((int pid, + struct target_waitstatus *target_status)); + +static void bdm_ppc_fetch_registers PARAMS ((int regno)); + +static void bdm_ppc_store_registers PARAMS ((int regno)); + +extern struct target_ops bdm_ppc_ops; /* Forward decl */ + +/* Open a connection to a remote debugger. + NAME is the filename used for communication. */ + +static void +bdm_ppc_open (name, from_tty) + char *name; + int from_tty; +{ + wiggler_open (name, from_tty, WIGGLER_TARGET_MOTO_PPC, &bdm_ppc_ops); +} + +/* Wait until the remote machine stops, then return, + storing status in STATUS just as `wait' would. + Returns "pid" (though it's not clear what, if anything, that + means in the case of this target). */ + +static int +bdm_ppc_wait (pid, target_status) + int pid; + struct target_waitstatus *target_status; +{ + int stop_reason; + + target_status->kind = TARGET_WAITKIND_STOPPED; + + stop_reason = wiggler_wait (); + + if (stop_reason) + { + target_status->value.sig = TARGET_SIGNAL_INT; + return inferior_pid; + } + + target_status->value.sig = TARGET_SIGNAL_TRAP; /* XXX for now */ + + { + unsigned long ecr, der; + + ecr = wiggler_read_bdm_register (148); /* Read the exception cause register */ + der = wiggler_read_bdm_register (149); /* Read the debug enables register */ + fprintf_unfiltered (gdb_stdout, "ecr = 0x%x, der = 0x%x\n", ecr, der); + } + + return inferior_pid; +} + +static int bdm_regmap[] = {BDM_REGMAP}; + +/* Read the remote registers into regs. + + The Wiggler uses the following codes to access the registers: + + 0 -> 1023 SPR 0 -> 1023 + 0 - SPR 0 - MQ + 1 - SPR 1 - XER + 8 - SPR 8 - LR + 9 - SPR 9 - CTR (known as cnt in GDB) + 26 - SPR 26 - SRR0 - pc + 1024 -> 2047 DCR 0 -> DCR 1023 (IBM PPC 4xx only) + 2048 -> 2079 R0 -> R31 + 2080 -> 2143 FP0 -> FP31 (64 bit regs) + 2144 CR (known as cnd in GDB) + 2145 FPCSR + 2146 MSR (known as ps in GDB) + */ + +static void +bdm_ppc_fetch_registers (regno) + int regno; +{ + int i; + unsigned char *regs; + int first_regno, last_regno; + int first_bdm_regno, last_bdm_regno; + int reglen; + + if (regno == -1) + { + first_regno = 0; + last_regno = NUM_REGS - 1; + + first_bdm_regno = 0; + last_bdm_regno = BDM_NUM_REGS - 1; + } + else + { + first_regno = regno; + last_regno = regno; + + first_bdm_regno = bdm_regmap [regno]; + last_bdm_regno = bdm_regmap [regno]; + } + + if (first_bdm_regno == -1) + { + supply_register (first_regno, NULL); + return; /* Unsupported register */ + } + + regs = wiggler_read_bdm_registers (first_bdm_regno, last_bdm_regno, ®len); + + for (i = first_regno; i <= last_regno; i++) + { + int bdm_regno, regoffset; + + bdm_regno = bdm_regmap [i]; + if (bdm_regno != -1) + { + regoffset = bdm_regno - first_bdm_regno; + + if (regoffset >= reglen / 4) + continue; + + supply_register (i, regs + 4 * regoffset); + } + else + supply_register (i, NULL); /* Unsupported register */ + } +} + +/* Store register REGNO, or all registers if REGNO == -1, from the contents + of REGISTERS. FIXME: ignores errors. */ + +static void +bdm_ppc_store_registers (regno) + int regno; +{ + int i; + int first_regno, last_regno; + int first_bdm_regno, last_bdm_regno; + + if (regno == -1) + { + first_regno = 0; + last_regno = NUM_REGS - 1; + + first_bdm_regno = 0; + last_bdm_regno = BDM_NUM_REGS - 1; + } + else + { + first_regno = regno; + last_regno = regno; + + first_bdm_regno = bdm_regmap [regno]; + last_bdm_regno = bdm_regmap [regno]; + } + + if (first_bdm_regno == -1) + return; /* Unsupported register */ + + for (i = first_regno; i <= last_regno; i++) + { + int bdm_regno; + + bdm_regno = bdm_regmap [i]; + + wiggler_write_bdm_registers (bdm_regno, registers + REGISTER_BYTE (i), 4); + } +} + +/* Define the target subroutine names */ + +struct target_ops bdm_ppc_ops = { + "wiggler", /* to_shortname */ + "", /* to_longname */ + "", /* to_doc */ + bdm_ppc_open, /* to_open */ + wiggler_close, /* to_close */ + NULL, /* to_attach */ + wiggler_detach, /* to_detach */ + wiggler_resume, /* to_resume */ + bdm_ppc_wait, /* to_wait */ + bdm_ppc_fetch_registers, /* to_fetch_registers */ + bdm_ppc_store_registers, /* to_store_registers */ + wiggler_prepare_to_store, /* to_prepare_to_store */ + wiggler_xfer_memory, /* to_xfer_memory */ + wiggler_files_info, /* to_files_info */ + memory_insert_breakpoint, /* to_insert_breakpoint */ + memory_remove_breakpoint, /* to_remove_breakpoint */ + NULL, /* to_terminal_init */ + NULL, /* to_terminal_inferior */ + NULL, /* to_terminal_ours_for_output */ + NULL, /* to_terminal_ours */ + NULL, /* to_terminal_info */ + wiggler_kill, /* to_kill */ + wiggler_load, /* to_load */ + NULL, /* to_lookup_symbol */ + wiggler_create_inferior, /* to_create_inferior */ + wiggler_mourn, /* to_mourn_inferior */ + 0, /* to_can_run */ + 0, /* to_notice_signals */ + wiggler_thread_alive, /* to_thread_alive */ + wiggler_stop, /* to_stop */ + process_stratum, /* to_stratum */ + NULL, /* to_next */ + 1, /* to_has_all_memory */ + 1, /* to_has_memory */ + 1, /* to_has_stack */ + 1, /* to_has_registers */ + 1, /* to_has_execution */ + NULL, /* sections */ + NULL, /* sections_end */ + OPS_MAGIC /* to_magic */ +}; + +void +_initialize_bdm_ppc () +{ + add_target (&bdm_ppc_ops); +} diff --git a/gdb/ser-ocd.c b/gdb/ser-ocd.c new file mode 100644 index 0000000000..d3f1c8ee6c --- /dev/null +++ b/gdb/ser-ocd.c @@ -0,0 +1,174 @@ +/* Remote serial interface for Macraigor Systems implementation of + On-Chip Debugging using serial target box or serial wiggler + + Copyright 1994, 1997 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include "defs.h" +#include "serial.h" + +static int ser_ocd_open PARAMS ((serial_t scb, const char *name)); +static void ser_ocd_raw PARAMS ((serial_t scb)); +static int ser_ocd_readchar PARAMS ((serial_t scb, int timeout)); +static int ser_ocd_setbaudrate PARAMS ((serial_t scb, int rate)); +static int ser_ocd_write PARAMS ((serial_t scb, const char *str, int len)); +static void ser_ocd_close PARAMS ((serial_t scb)); +static serial_ttystate ser_ocd_get_tty_state PARAMS ((serial_t scb)); +static int ser_ocd_set_tty_state PARAMS ((serial_t scb, serial_ttystate state)); + +static int +ocd_open (scb, name) + serial_t scb; + const char *name; +{ + return 0; +} + +static int +ocd_noop (scb) + serial_t scb; +{ + return 0; +} + +static void +ocd_raw (scb) + serial_t scb; +{ + /* Always in raw mode */ +} + +/* We need a buffer to store responses from the Wigglers.dll */ +char * from_wigglers_buffer; +char * bptr; /* curr spot in buffer */ + +static void +ocd_readremote () +{ +} + +static int +ocd_readchar (scb, timeout) + serial_t scb; + int timeout; +{ + +} + +struct ocd_ttystate { + int dummy; +}; + +/* ocd_{get set}_tty_state() are both dummys to fill out the function + vector. Someday, they may do something real... */ + +static serial_ttystate +ocd_get_tty_state (scb) + serial_t scb; +{ + struct ocd_ttystate *state; + + state = (struct ocd_ttystate *) xmalloc (sizeof *state); + + return (serial_ttystate) state; +} + +static int +ocd_set_tty_state (scb, ttystate) + serial_t scb; + serial_ttystate ttystate; +{ + return 0; +} + +static int +ocd_noflush_set_tty_state (scb, new_ttystate, old_ttystate) + serial_t scb; + serial_ttystate new_ttystate; + serial_ttystate old_ttystate; +{ + return 0; +} + +static void +ocd_print_tty_state (scb, ttystate) + serial_t scb; + serial_ttystate ttystate; +{ + /* Nothing to print. */ + return; +} + +static int +ocd_setbaudrate (scb, rate) + serial_t scb; + int rate; +{ + return 0; +} + +static int +ocd_write (scb, str, len) + serial_t scb; + const char *str; + int len; +{ + char c; + + ocd_readremote(); + +#ifdef __CYGWIN32__ + /* send packet to Wigglers.dll and store response so we can give it to + remote-wiggler.c when get_packet is run */ + do_command (str, from_wigglers_buffer); +#endif + + return 0; +} + +static void +ocd_close (scb) + serial_t scb; +{ + wiggler_close (0); +} + +static struct serial_ops ocd_ops = +{ + "ocd", + 0, + ocd_open, + ocd_close, + ocd_readchar, + ocd_write, + ocd_noop, /* flush output */ + ocd_noop, /* flush input */ + ocd_noop, /* send break -- currently used only for nindy */ + ocd_raw, + ocd_get_tty_state, + ocd_set_tty_state, + ocd_print_tty_state, + ocd_noflush_set_tty_state, + ocd_setbaudrate, +}; + +void +_initialize_ser_ocd_bdm () +{ + serial_add_interface (&ocd_ops); +} diff --git a/gdb/wigglers.def b/gdb/wigglers.def new file mode 100644 index 0000000000..f29a100afd --- /dev/null +++ b/gdb/wigglers.def @@ -0,0 +1,3 @@ +EXPORTS +do_command +test_command -- 2.34.1