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:
parent
3d18ed7d46
commit
35ce4f0813
12 changed files with 912 additions and 551 deletions
|
@ -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>
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
182
gdb/configure
vendored
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
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 ()
|
||||
/* 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, ®len);
|
||||
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;
|
||||
wiggler_put_packet (buf, 4 + reglen);
|
||||
p = wiggler_get_packet (WIGGLER_WRITE_REGS, &pktlen, remote_timeout);
|
||||
|
||||
bdm_regno = bdm_regmap [i];
|
||||
if (pktlen < 3)
|
||||
error ("Truncated response packet from Wiggler");
|
||||
|
||||
buf[1] = bdm_regno >> 8;
|
||||
buf[2] = bdm_regno & 0xff;
|
||||
status = p[1];
|
||||
error_code = p[2];
|
||||
|
||||
memcpy (&buf[4], ®isters[REGISTER_BYTE (i)], 4);
|
||||
put_packet (buf, 4 + 4);
|
||||
p = get_packet (WIGGLER_WRITE_REGS, &pktlen, remote_timeout);
|
||||
if (error_code != 0)
|
||||
wiggler_error ("wiggler_write_bdm_registers:", error_code);
|
||||
}
|
||||
|
||||
if (pktlen < 3)
|
||||
error ("Truncated response packet from Wiggler");
|
||||
void
|
||||
wiggler_write_bdm_register (bdm_regno, reg)
|
||||
int bdm_regno;
|
||||
CORE_ADDR reg;
|
||||
{
|
||||
unsigned char buf[4];
|
||||
|
||||
status = p[1];
|
||||
error_code = p[2];
|
||||
store_unsigned_integer (buf, 4, reg);
|
||||
|
||||
if (error_code != 0)
|
||||
wiggler_error ("wiggler_store_registers:", error_code);
|
||||
}
|
||||
wiggler_write_bdm_registers (bdm_regno, buf, 4);
|
||||
}
|
||||
|
||||
void
|
||||
wiggler_prepare_to_store ()
|
||||
{
|
||||
}
|
||||
|
||||
/* Write memory data directly to the remote machine.
|
||||
|
@ -813,6 +575,8 @@ wiggler_store_registers (regno)
|
|||
|
||||
Returns number of bytes transferred, or 0 for error. */
|
||||
|
||||
static int write_mem_command = WIGGLER_WRITE_MEM;
|
||||
|
||||
static int
|
||||
wiggler_write_bytes (memaddr, myaddr, len)
|
||||
CORE_ADDR memaddr;
|
||||
|
@ -825,7 +589,7 @@ wiggler_write_bytes (memaddr, myaddr, len)
|
|||
|
||||
origlen = len;
|
||||
|
||||
buf[0] = WIGGLER_WRITE_MEM;
|
||||
buf[0] = write_mem_command;
|
||||
buf[5] = 1; /* Write as bytes */
|
||||
buf[6] = 0; /* Don't verify */
|
||||
|
||||
|
@ -845,8 +609,8 @@ wiggler_write_bytes (memaddr, myaddr, len)
|
|||
buf[7] = numbytes;
|
||||
|
||||
memcpy (&buf[8], myaddr, numbytes);
|
||||
put_packet (buf, 8 + numbytes);
|
||||
p = get_packet (WIGGLER_WRITE_MEM, &pktlen, remote_timeout);
|
||||
wiggler_put_packet (buf, 8 + numbytes);
|
||||
p = wiggler_get_packet (WIGGLER_WRITE_MEM, &pktlen, remote_timeout);
|
||||
if (pktlen < 3)
|
||||
error ("Truncated response packet from Wiggler");
|
||||
|
||||
|
@ -918,8 +682,8 @@ wiggler_read_bytes (memaddr, myaddr, len)
|
|||
|
||||
buf[6] = numbytes;
|
||||
|
||||
put_packet (buf, 7);
|
||||
p = get_packet (WIGGLER_READ_MEM, &pktlen, remote_timeout);
|
||||
wiggler_put_packet (buf, 7);
|
||||
p = wiggler_get_packet (WIGGLER_READ_MEM, &pktlen, remote_timeout);
|
||||
if (pktlen < 4)
|
||||
error ("Truncated response packet from Wiggler");
|
||||
|
||||
|
@ -960,7 +724,7 @@ wiggler_read_bytes (memaddr, myaddr, len)
|
|||
nonzero. Returns length of data written or read; 0 for error. */
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
int
|
||||
wiggler_xfer_memory (memaddr, myaddr, len, should_write, target)
|
||||
CORE_ADDR memaddr;
|
||||
char *myaddr;
|
||||
|
@ -971,7 +735,7 @@ wiggler_xfer_memory (memaddr, myaddr, len, should_write, target)
|
|||
return dcache_xfer_memory (wiggler_dcache, memaddr, myaddr, len, should_write);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
wiggler_files_info (ignore)
|
||||
struct target_ops *ignore;
|
||||
{
|
||||
|
@ -1123,7 +887,7 @@ stu_put_packet (buf, len)
|
|||
*/
|
||||
|
||||
static void
|
||||
put_packet (buf, len)
|
||||
wiggler_put_packet (buf, len)
|
||||
unsigned char *buf;
|
||||
int len;
|
||||
{
|
||||
|
@ -1225,7 +989,7 @@ stu_get_packet (cmd, lenp, timeout)
|
|||
*/
|
||||
|
||||
static unsigned char *
|
||||
get_packet (cmd, lenp, timeout)
|
||||
wiggler_get_packet (cmd, lenp, timeout)
|
||||
int cmd;
|
||||
int *lenp;
|
||||
{
|
||||
|
@ -1241,7 +1005,7 @@ get_packet (cmd, lenp, timeout)
|
|||
ch = readchar (timeout);
|
||||
|
||||
if (ch < 0)
|
||||
error ("get_packet (readchar): %d", ch);
|
||||
error ("wiggler_get_packet (readchar): %d", ch);
|
||||
|
||||
if (ch != 0x55)
|
||||
goto find_packet;
|
||||
|
@ -1256,7 +1020,7 @@ get_packet (cmd, lenp, timeout)
|
|||
ch = readchar (timeout);
|
||||
|
||||
if (ch < 0)
|
||||
error ("get_packet (readchar): %d", ch);
|
||||
error ("wiggler_get_packet (readchar): %d", ch);
|
||||
|
||||
*packet_ptr++ = ch;
|
||||
checksum += ch;
|
||||
|
@ -1266,7 +1030,7 @@ get_packet (cmd, lenp, timeout)
|
|||
ch = readchar (timeout);
|
||||
|
||||
if (ch < 0)
|
||||
error ("get_packet (readchar): %d", ch);
|
||||
error ("wiggler_get_packet (readchar): %d", ch);
|
||||
*packet_ptr++ = ch;
|
||||
checksum += ch;
|
||||
|
||||
|
@ -1275,7 +1039,7 @@ get_packet (cmd, lenp, timeout)
|
|||
ch = readchar (timeout);
|
||||
|
||||
if (ch < 0)
|
||||
error ("get_packet (readchar): %d", ch);
|
||||
error ("wiggler_get_packet (readchar): %d", ch);
|
||||
*packet_ptr++ = ch;
|
||||
checksum += ch;
|
||||
|
||||
|
@ -1291,6 +1055,7 @@ get_packet (cmd, lenp, timeout)
|
|||
break;
|
||||
default: /* Error w/no params */
|
||||
len = 0;
|
||||
break;
|
||||
case 0x0: /* Normal result */
|
||||
switch (packet[0])
|
||||
{
|
||||
|
@ -1320,7 +1085,7 @@ get_packet (cmd, lenp, timeout)
|
|||
len = 0;
|
||||
break;
|
||||
case WIGGLER_GET_VERSION: /* Get Version */
|
||||
len = 4;
|
||||
len = 10;
|
||||
break;
|
||||
case WIGGLER_GET_STATUS_MASK: /* Get Status Mask */
|
||||
len = 1;
|
||||
|
@ -1342,7 +1107,7 @@ get_packet (cmd, lenp, timeout)
|
|||
ch = readchar (timeout);
|
||||
|
||||
if (ch < 0)
|
||||
error ("get_packet (readchar): %d", ch);
|
||||
error ("wiggler_get_packet (readchar): %d", ch);
|
||||
*packet_ptr++ = ch;
|
||||
checksum += ch;
|
||||
len = ch;
|
||||
|
@ -1355,7 +1120,7 @@ get_packet (cmd, lenp, timeout)
|
|||
ch = readchar (timeout);
|
||||
|
||||
if (ch < 0)
|
||||
error ("get_packet (readchar): %d", ch);
|
||||
error ("wiggler_get_packet (readchar): %d", ch);
|
||||
*packet_ptr++ = ch;
|
||||
checksum += ch;
|
||||
}
|
||||
|
@ -1385,8 +1150,8 @@ do_command (cmd, statusp, lenp)
|
|||
char errbuf[100];
|
||||
|
||||
buf[0] = cmd;
|
||||
put_packet (buf, 1); /* Send command */
|
||||
p = get_packet (*buf, lenp, remote_timeout);
|
||||
wiggler_put_packet (buf, 1); /* Send command */
|
||||
p = wiggler_get_packet (*buf, lenp, remote_timeout);
|
||||
|
||||
if (*lenp < 3)
|
||||
error ("Truncated response packet from Wiggler");
|
||||
|
@ -1410,7 +1175,7 @@ do_command (cmd, statusp, lenp)
|
|||
return p + 3;
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
wiggler_kill ()
|
||||
{
|
||||
/* For some mysterious reason, wait_for_inferior calls kill instead of
|
||||
|
@ -1427,17 +1192,17 @@ wiggler_kill ()
|
|||
target_mourn_inferior ();
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
wiggler_mourn ()
|
||||
{
|
||||
unpush_target (&wiggler_ops);
|
||||
unpush_target (current_ops);
|
||||
generic_mourn_inferior ();
|
||||
}
|
||||
|
||||
/* All we actually do is set the PC to the start address of exec_bfd, and start
|
||||
the program at that point. */
|
||||
|
||||
static void
|
||||
void
|
||||
wiggler_create_inferior (exec_file, args, env)
|
||||
char *exec_file;
|
||||
char *args;
|
||||
|
@ -1450,7 +1215,7 @@ wiggler_create_inferior (exec_file, args, env)
|
|||
proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
wiggler_load (args, from_tty)
|
||||
char *args;
|
||||
int from_tty;
|
||||
|
@ -1526,58 +1291,13 @@ bdm_restart_command (args, from_tty)
|
|||
normal_stop ();
|
||||
}
|
||||
|
||||
static int
|
||||
flash_xfer_memory (memaddr, myaddr, len, should_write, target)
|
||||
CORE_ADDR memaddr;
|
||||
char *myaddr;
|
||||
int len;
|
||||
int should_write;
|
||||
struct target_ops *target; /* ignored */
|
||||
/* 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
132
gdb/ocd.h
Normal 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
260
gdb/ppc-bdm.c
Normal 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, ®len);
|
||||
|
||||
for (i = first_regno; i <= last_regno; i++)
|
||||
{
|
||||
int bdm_regno, regoffset;
|
||||
|
||||
bdm_regno = bdm_regmap [i];
|
||||
if (bdm_regno != -1)
|
||||
{
|
||||
regoffset = bdm_regno - first_bdm_regno;
|
||||
|
||||
if (regoffset >= reglen / 4)
|
||||
continue;
|
||||
|
||||
supply_register (i, regs + 4 * regoffset);
|
||||
}
|
||||
else
|
||||
supply_register (i, NULL); /* Unsupported register */
|
||||
}
|
||||
}
|
||||
|
||||
/* Store register REGNO, or all registers if REGNO == -1, from the contents
|
||||
of REGISTERS. FIXME: ignores errors. */
|
||||
|
||||
static void
|
||||
bdm_ppc_store_registers (regno)
|
||||
int regno;
|
||||
{
|
||||
int i;
|
||||
int first_regno, last_regno;
|
||||
int first_bdm_regno, last_bdm_regno;
|
||||
|
||||
if (regno == -1)
|
||||
{
|
||||
first_regno = 0;
|
||||
last_regno = NUM_REGS - 1;
|
||||
|
||||
first_bdm_regno = 0;
|
||||
last_bdm_regno = BDM_NUM_REGS - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
first_regno = regno;
|
||||
last_regno = regno;
|
||||
|
||||
first_bdm_regno = bdm_regmap [regno];
|
||||
last_bdm_regno = bdm_regmap [regno];
|
||||
}
|
||||
|
||||
if (first_bdm_regno == -1)
|
||||
return; /* Unsupported register */
|
||||
|
||||
for (i = first_regno; i <= last_regno; i++)
|
||||
{
|
||||
int bdm_regno;
|
||||
|
||||
bdm_regno = bdm_regmap [i];
|
||||
|
||||
wiggler_write_bdm_registers (bdm_regno, registers + REGISTER_BYTE (i), 4);
|
||||
}
|
||||
}
|
||||
|
||||
/* Define the target subroutine names */
|
||||
|
||||
struct target_ops bdm_ppc_ops = {
|
||||
"wiggler", /* to_shortname */
|
||||
"", /* to_longname */
|
||||
"", /* to_doc */
|
||||
bdm_ppc_open, /* to_open */
|
||||
wiggler_close, /* to_close */
|
||||
NULL, /* to_attach */
|
||||
wiggler_detach, /* to_detach */
|
||||
wiggler_resume, /* to_resume */
|
||||
bdm_ppc_wait, /* to_wait */
|
||||
bdm_ppc_fetch_registers, /* to_fetch_registers */
|
||||
bdm_ppc_store_registers, /* to_store_registers */
|
||||
wiggler_prepare_to_store, /* to_prepare_to_store */
|
||||
wiggler_xfer_memory, /* to_xfer_memory */
|
||||
wiggler_files_info, /* to_files_info */
|
||||
memory_insert_breakpoint, /* to_insert_breakpoint */
|
||||
memory_remove_breakpoint, /* to_remove_breakpoint */
|
||||
NULL, /* to_terminal_init */
|
||||
NULL, /* to_terminal_inferior */
|
||||
NULL, /* to_terminal_ours_for_output */
|
||||
NULL, /* to_terminal_ours */
|
||||
NULL, /* to_terminal_info */
|
||||
wiggler_kill, /* to_kill */
|
||||
wiggler_load, /* to_load */
|
||||
NULL, /* to_lookup_symbol */
|
||||
wiggler_create_inferior, /* to_create_inferior */
|
||||
wiggler_mourn, /* to_mourn_inferior */
|
||||
0, /* to_can_run */
|
||||
0, /* to_notice_signals */
|
||||
wiggler_thread_alive, /* to_thread_alive */
|
||||
wiggler_stop, /* to_stop */
|
||||
process_stratum, /* to_stratum */
|
||||
NULL, /* to_next */
|
||||
1, /* to_has_all_memory */
|
||||
1, /* to_has_memory */
|
||||
1, /* to_has_stack */
|
||||
1, /* to_has_registers */
|
||||
1, /* to_has_execution */
|
||||
NULL, /* sections */
|
||||
NULL, /* sections_end */
|
||||
OPS_MAGIC /* to_magic */
|
||||
};
|
||||
|
||||
void
|
||||
_initialize_bdm_ppc ()
|
||||
{
|
||||
add_target (&bdm_ppc_ops);
|
||||
}
|
174
gdb/ser-ocd.c
Normal file
174
gdb/ser-ocd.c
Normal 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
3
gdb/wigglers.def
Normal file
|
@ -0,0 +1,3 @@
|
|||
EXPORTS
|
||||
do_command
|
||||
test_command
|
Loading…
Add table
Reference in a new issue