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
This commit is contained in:
Geoffrey Noer 1997-08-07 06:31:46 +00:00
parent 3d18ed7d46
commit 35ce4f0813
12 changed files with 912 additions and 551 deletions

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

View 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

View 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

View 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

View 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

182
gdb/configure vendored
View file

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

View 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

View file

@ -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));
extern struct target_ops wiggler_ops; /* Forward decl */
static unsigned char * wiggler_get_packet PARAMS ((int cmd, int *pktlen, int timeout));
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;
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,174 +495,50 @@ 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 ()
/* Read register BDM_REGNO and returns its value ala read_register() */
CORE_ADDR
wiggler_read_bdm_register (bdm_regno)
int bdm_regno;
{
unsigned char *regs;
int numregs;
int i;
int reglen;
unsigned char *p;
CORE_ADDR regval;
regs = read_bdm_registers (0, BDM_NUM_REGS - 1, &numregs);
p = wiggler_read_bdm_registers (bdm_regno, bdm_regno, &reglen);
regval = extract_unsigned_integer (p, reglen);
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");
return regval;
}
static int bdm_regmap[] = {BDM_REGMAP};
/* 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;
void
wiggler_write_bdm_registers (first_bdm_regno, regptr, reglen)
int first_bdm_regno;
unsigned char *regptr;
int reglen;
{
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;
supply_register (i, regs + 4 * regoffset);
}
else
supply_register (i, NULL); /* Unsupported register */
}
}
static void
wiggler_prepare_to_store ()
{
}
/* 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;
{
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;
bdm_regno = bdm_regmap [i];
buf[1] = bdm_regno >> 8;
buf[2] = bdm_regno & 0xff;
memcpy (&buf[4], &registers[REGISTER_BYTE (i)], 4);
put_packet (buf, 4 + 4);
p = get_packet (WIGGLER_WRITE_REGS, &pktlen, remote_timeout);
wiggler_put_packet (buf, 4 + reglen);
p = wiggler_get_packet (WIGGLER_WRITE_REGS, &pktlen, remote_timeout);
if (pktlen < 3)
error ("Truncated response packet from Wiggler");
@ -801,8 +547,24 @@ wiggler_store_registers (regno)
error_code = p[2];
if (error_code != 0)
wiggler_error ("wiggler_store_registers:", error_code);
}
wiggler_error ("wiggler_write_bdm_registers:", error_code);
}
void
wiggler_write_bdm_register (bdm_regno, reg)
int bdm_regno;
CORE_ADDR reg;
{
unsigned char buf[4];
store_unsigned_integer (buf, 4, reg);
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 */
/* Temporary replacement for target_store_registers(). This prevents
generic_load from trying to set the PC. */
static void
noop_store_registers (regno)
int regno;
{
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;
}
return origlen - len;
}
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);*/
}
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.");
}
/* 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 */
};
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);*/
}

132
gdb/ocd.h Normal file
View file

@ -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 */

260
gdb/ppc-bdm.c Normal file
View file

@ -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 */
/* 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, &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);
}
}
/* 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);
}

174
gdb/ser-ocd.c Normal file
View file

@ -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);
}

3
gdb/wigglers.def Normal file
View file

@ -0,0 +1,3 @@
EXPORTS
do_command
test_command