Wed Aug 6 16:15:31 1997 Geoffrey Noer <noer@cygnus.com>
authorGeoffrey Noer <noer@cygnus>
Thu, 7 Aug 1997 06:31:46 +0000 (06:31 +0000)
committerGeoffrey Noer <noer@cygnus>
Thu, 7 Aug 1997 06:31:46 +0000 (06:31 +0000)
        * 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  <grossman@cygnus.com>:
        * 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

12 files changed:
gdb/ChangeLog
gdb/Makefile.in
gdb/config/i386/cygwin32.mh
gdb/config/powerpc/ppc-eabi.mt
gdb/config/powerpc/ppc-sim.mt
gdb/configure
gdb/configure.in
gdb/ocd.c [moved from gdb/remote-wiggler.c with 67% similarity]
gdb/ocd.h [new file with mode: 0644]
gdb/ppc-bdm.c [new file with mode: 0644]
gdb/ser-ocd.c [new file with mode: 0644]
gdb/wigglers.def [new file with mode: 0644]

index 5deb3f2..fbc6650 100644 (file)
@@ -1,3 +1,72 @@
+Wed Aug  6 16:15:31 1997  Geoffrey Noer  <noer@cygnus.com>
+
+       * 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  <grossman@cygnus.com>:
+       * 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  <marka@cygnus.com>
 
index 0637f5b..99309c1 100644 (file)
@@ -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 
index e3686d1..0655e1e 100644 (file)
@@ -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
index b5da734..680ef1c 100644 (file)
@@ -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
index 5a590ac..f48d4db 100644 (file)
@@ -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
index 0e08faf..5d35b54 100755 (executable)
@@ -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 <<EOF
-#line 1244 "configure"
+#line 1247 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -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 <<EOF
-#line 1286 "configure"
+#line 1289 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -1290,7 +1293,7 @@ else
 #include <float.h>
 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
-#line 1311 "configure"
+#line 1314 "configure"
 #include "confdefs.h"
 #include <string.h>
 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
-#line 1329 "configure"
+#line 1332 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -1346,7 +1349,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 1350 "configure"
+#line 1353 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #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
-#line 1393 "configure"
+#line 1396 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 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 <<EOF
-#line 1430 "configure"
+#line 1433 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -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 <<EOF
-#line 1487 "configure"
+#line 1490 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1532,7 +1535,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:1536: \"$ac_compile\") 1>&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 <<EOF
-#line 1565 "configure"
+#line 1568 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1584,7 +1587,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:1588: \"$ac_link\") 1>&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 <<EOF
-#line 1635 "configure"
+#line 1638 "configure"
 #include "confdefs.h"
 #include <sys/procfs.h>
 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 <<EOF
-#line 1668 "configure"
+#line 1671 "configure"
 #include "confdefs.h"
 #include <sys/procfs.h>
 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 <<EOF
-#line 1704 "configure"
+#line 1707 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:1711: \"$ac_link\") 1>&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 <<EOF
-#line 1746 "configure"
+#line 1749 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1752,7 +1755,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:1756: \"$ac_compile\") 1>&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 <<EOF
-#line 1786 "configure"
+#line 1789 "configure"
 #include "confdefs.h"
 
 int main () {
@@ -1792,7 +1795,7 @@ int main () {
   return (strcmp ("12345", buf));
 }
 EOF
-if { (eval echo configure:1796: \"$ac_link\") 1>&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 <<EOF
-#line 1825 "configure"
+#line 1828 "configure"
 #include "confdefs.h"
 
 int main() {
 long double foo;
 ; return 0; }
 EOF
-if { (eval echo configure:1832: \"$ac_compile\") 1>&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 <<EOF
-#line 1862 "configure"
+#line 1865 "configure"
 #include "confdefs.h"
 
 int main () {
@@ -1868,7 +1871,7 @@ int main () {
   return (strncmp ("3.14159", buf, 7));
 }
 EOF
-if { (eval echo configure:1872: \"$ac_link\") 1>&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
-#line 1903 "configure"
+#line 1906 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 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 <<EOF
-#line 1942 "configure"
+#line 1945 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1961,7 +1964,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:1965: \"$ac_link\") 1>&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 <<EOF
-#line 1998 "configure"
+#line 2001 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -2134,7 +2137,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:2138: \"$ac_link\") 1>&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 <<EOF
-#line 2167 "configure"
+#line 2170 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -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 <<EOF
-#line 2215 "configure"
+#line 2218 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -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 <<EOF
-#line 2263 "configure"
+#line 2266 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -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 <<EOF
-#line 2347 "configure"
+#line 2350 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2354,7 +2357,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:2358: \"$ac_link\") 1>&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 <<EOF
-#line 2489 "configure"
+#line 2492 "configure"
 #include "confdefs.h"
 
 #ifdef __CYGWIN32__
@@ -2538,7 +2541,7 @@ if test "${with_tclconfig+set}" = set; then
 fi
 
   echo $ac_n "checking for Tcl configuration""... $ac_c" 1>&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
-#line 2817 "configure"
+#line 2820 "configure"
 #include "confdefs.h"
 #include <tclInt.h>
 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
-#line 2953 "configure"
+#line 2956 "configure"
 #include "confdefs.h"
 #include <tk.h>
 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
index d9fe00a..cb72af8 100644 (file)
@@ -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
 
similarity index 67%
rename from gdb/remote-wiggler.c
rename to gdb/ocd.c
index c767641..b20bd9c 100644 (file)
+++ 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 <sys/types.h>
-#endif
-
 #include <signal.h>
 #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;
 \f
-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)
 \f
 /* 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);
 }
 \f
-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, &reglen);
+  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], &registers[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);
+}
+\f
+void 
+wiggler_prepare_to_store ()
+{
 }
 \f
 /* 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);
 }
 \f
-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;
 }
 \f
-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);*/
 }
-\f
-/* 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.");
+
+}
+\f
 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 (file)
index 0000000..a8e0494
--- /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 (file)
index 0000000..6181298
--- /dev/null
@@ -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 <fcntl.h>
+#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 <sys/types.h>
+#include <signal.h>
+#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 */
+\f
+/* 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;
+}
+\f
+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, &reglen);
+
+  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);
+    }
+}
+\f
+/* 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 (file)
index 0000000..d3f1c8e
--- /dev/null
@@ -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 (file)
index 0000000..f29a100
--- /dev/null
@@ -0,0 +1,3 @@
+EXPORTS
+do_command
+test_command