* breakpoint.c (breakpoint_re_set): #ifdef GET_LONGJMP_TARGET
around calls to create_longjmp_breakpoint. Why install the breakpoints if we can't find the longjmp target? * infrun.c (wait_for_inferior): Cleanup comments near call test. * remote-mips.c: Fixed a bunch of prototypes to avoid char/int complaint from picky compilers. Add comment to mips_expect. Replace all instances of sr_get_debug with remote_debug. * (mips_readchar): Don't jam init string to monitor. mips_initialize() handles that. * (mips_receive_header): Print better message when we get too much garbage. * (mips_request): Allow caller to pass in buff to allow them to analyze the returned message. * (mips_initialize): Re-do initialization to try sending a BREAK, a ^C, and then a download escape sequence. Cleanup protocol startup. Eliminate sleeps. Clear breakpoints (if using monitor breakpoints). Re-init frame. * (mips_detach): Close down target. start-sanitize-gm * (mips_resume): Pass signal down to target. * (mips_create_inferior): Start target with TARGET_SIGNAL_PWR. end-sanitize-gm * (mips_wait): Handle return status with registers, or breakpoint stuff. * (mips_kill): Add ^C handling. * (mips_insert_breakpoint mips_remove_breakpoint): Call new breakpoint stuff if enabled. * (calculate_mask remote_mips_set_watchpoint remote_mips_remove_watchpoint remote_mips_stopped_by_watchpoint): Hardware watchpoint/breakpoint stuff. * (common_breakpoint): Common code for new monitor breakpoint commands. * (mips_load): Don't use `prompt'. It's a global variable. * top.c (dont_repeat_command): New command for use in user-defined commands to suppress auto-repeat (by hittin return key). start-sanitize-gm * utils.c (request_quit): Call target_kill here. Good idea. Needs a better implementation. end-sanitize-gm * valops.c: Add start of auto function-call abandonment capability. start-sanitize-gm * c-exp.y: Add code (currently disabled) to handle GM dynamic structures (it conflicts with @!). * eval.c (evaluate_subexp_standard): ditto. * expprint.c (print_subexp dump_expression): ditto. * expression.h (enum exp_opcode): ditto. * parse.c (length_of_subexp): ditto. * configure, configure.in: Add mip*-*-magic* target. * magic.c magic.h: Special routines to handle GM stuff (like stepping through dispatcher). end-sanitize-gm
This commit is contained in:
parent
d6d44ef984
commit
cd10c7e388
15 changed files with 1235 additions and 215 deletions
|
@ -60,6 +60,20 @@ else
|
|||
fi
|
||||
fi
|
||||
|
||||
gm_files="magic.c magic.h"
|
||||
|
||||
if ( echo $* | grep keep\-gm > /dev/null ) ; then
|
||||
keep_these_too="${gm_files} ${keep_these_too}"
|
||||
if [ -n "${verbose}" ] ; then
|
||||
echo Keeping ${gm_files}
|
||||
fi
|
||||
else
|
||||
lose_these_too="${gm_files} ${lose_these_too}"
|
||||
if [ -n "${verbose}" ] ; then
|
||||
echo Deleting ${gm_files}
|
||||
fi
|
||||
fi
|
||||
|
||||
# All files listed between the "Things-to-keep:" line and the
|
||||
# "Files-to-sed:" line will be kept. All other files will be removed.
|
||||
# Directories listed in this section will have their own Sanitize
|
||||
|
@ -488,6 +502,33 @@ else
|
|||
done
|
||||
fi
|
||||
|
||||
if ( echo $* | grep keep\-gm > /dev/null ) ; then
|
||||
for i in * ; do
|
||||
if test ! -d $i && (grep sanitize-gm $i > /dev/null) ; then
|
||||
if [ -n "${verbose}" ] ; then
|
||||
echo Keeping gm stuff in $i
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
for i in * ; do
|
||||
if test ! -d $i && (grep sanitize-gm $i > /dev/null) ; then
|
||||
if [ -n "${verbose}" ] ; then
|
||||
echo Removing traces of \"gm\" from $i...
|
||||
fi
|
||||
cp $i new
|
||||
sed '/start\-sanitize\-gm/,/end-\sanitize\-gm/d' < $i > new
|
||||
if [ -n "${safe}" -a ! -f .Recover/$i ] ; then
|
||||
if [ -n "${verbose}" ] ; then
|
||||
echo Caching $i in .Recover...
|
||||
fi
|
||||
mv $i .Recover
|
||||
fi
|
||||
mv new $i
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
for i in * ; do
|
||||
if test ! -d $i && (grep sanitize $i > /dev/null) ; then
|
||||
echo '***' Some mentions of Sanitize are still left in $i! 1>&2
|
||||
|
|
|
@ -1,3 +1,56 @@
|
|||
Fri Oct 27 09:54:07 1995 Stu Grossman (grossman@cygnus.com)
|
||||
|
||||
* breakpoint.c (breakpoint_re_set): #ifdef GET_LONGJMP_TARGET
|
||||
around calls to create_longjmp_breakpoint. Why install the
|
||||
breakpoints if we can't find the longjmp target?
|
||||
* infrun.c (wait_for_inferior): Cleanup comments near call test.
|
||||
* remote-mips.c: Fixed a bunch of prototypes to avoid char/int
|
||||
complaint from picky compilers. Add comment to mips_expect.
|
||||
Replace all instances of sr_get_debug with remote_debug.
|
||||
* (mips_readchar): Don't jam init string to monitor.
|
||||
mips_initialize() handles that.
|
||||
* (mips_receive_header): Print better message when we get too
|
||||
much garbage.
|
||||
* (mips_request): Allow caller to pass in buff to allow them to
|
||||
analyze the returned message.
|
||||
* (mips_initialize): Re-do initialization to try sending a BREAK,
|
||||
a ^C, and then a download escape sequence. Cleanup protocol
|
||||
startup. Eliminate sleeps. Clear breakpoints (if using monitor
|
||||
breakpoints). Re-init frame.
|
||||
* (mips_detach): Close down target.
|
||||
start-sanitize-gm
|
||||
* (mips_resume): Pass signal down to target.
|
||||
* (mips_create_inferior): Start target with TARGET_SIGNAL_PWR.
|
||||
end-sanitize-gm
|
||||
* (mips_wait): Handle return status with registers, or breakpoint stuff.
|
||||
* (mips_kill): Add ^C handling.
|
||||
* (mips_insert_breakpoint mips_remove_breakpoint): Call new
|
||||
breakpoint stuff if enabled.
|
||||
* (calculate_mask remote_mips_set_watchpoint
|
||||
remote_mips_remove_watchpoint remote_mips_stopped_by_watchpoint):
|
||||
Hardware watchpoint/breakpoint stuff.
|
||||
* (common_breakpoint): Common code for new monitor breakpoint commands.
|
||||
* (mips_load): Don't use `prompt'. It's a global variable.
|
||||
* top.c (dont_repeat_command): New command for use in
|
||||
user-defined commands to suppress auto-repeat (by hittin return key).
|
||||
start-sanitize-gm
|
||||
* utils.c (request_quit): Call target_kill here. Good idea.
|
||||
Needs a better implementation.
|
||||
end-sanitize-gm
|
||||
* valops.c: Add start of auto function-call abandonment capability.
|
||||
|
||||
start-sanitize-gm
|
||||
* c-exp.y: Add code (currently disabled) to handle GM dynamic
|
||||
structures (it conflicts with @!).
|
||||
* eval.c (evaluate_subexp_standard): ditto.
|
||||
* expprint.c (print_subexp dump_expression): ditto.
|
||||
* expression.h (enum exp_opcode): ditto.
|
||||
* parse.c (length_of_subexp): ditto.
|
||||
* configure, configure.in: Add mip*-*-magic* target.
|
||||
* magic.c magic.h: Special routines to handle GM stuff (like
|
||||
stepping through dispatcher).
|
||||
end-sanitize-gm
|
||||
|
||||
Thu Oct 26 22:02:27 1995 Stan Shebs <shebs@andros.cygnus.com>
|
||||
|
||||
* mpw-config.in: Add support for PowerMac host, add beginnings
|
||||
|
|
|
@ -16,7 +16,7 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "defs.h"
|
||||
#include <ctype.h>
|
||||
|
@ -28,7 +28,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#include "gdbcore.h"
|
||||
#include "gdbcmd.h"
|
||||
#include "value.h"
|
||||
#include "ctype.h"
|
||||
#include "command.h"
|
||||
#include "inferior.h"
|
||||
#include "thread.h"
|
||||
|
@ -1953,7 +1952,7 @@ set_raw_breakpoint (sal)
|
|||
}
|
||||
|
||||
static void
|
||||
create_longjmp_breakpoint(func_name)
|
||||
create_longjmp_breakpoint (func_name)
|
||||
char *func_name;
|
||||
{
|
||||
struct symtab_and_line sal;
|
||||
|
@ -1976,7 +1975,7 @@ create_longjmp_breakpoint(func_name)
|
|||
sal.symtab = NULL;
|
||||
sal.line = 0;
|
||||
|
||||
b = set_raw_breakpoint(sal);
|
||||
b = set_raw_breakpoint (sal);
|
||||
if (!b) return;
|
||||
|
||||
b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
|
||||
|
@ -3420,10 +3419,12 @@ breakpoint_re_set ()
|
|||
set_language (save_language);
|
||||
input_radix = save_input_radix;
|
||||
|
||||
create_longjmp_breakpoint("longjmp");
|
||||
create_longjmp_breakpoint("_longjmp");
|
||||
create_longjmp_breakpoint("siglongjmp");
|
||||
create_longjmp_breakpoint(NULL);
|
||||
#ifdef GET_LONGJMP_TARGET
|
||||
create_longjmp_breakpoint ("longjmp");
|
||||
create_longjmp_breakpoint ("_longjmp");
|
||||
create_longjmp_breakpoint ("siglongjmp");
|
||||
create_longjmp_breakpoint (NULL);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* Took this out (temporaliy at least), since it produces an extra
|
||||
|
|
|
@ -294,6 +294,15 @@ exp : exp '.' name
|
|||
write_exp_elt_opcode (STRUCTOP_STRUCT); }
|
||||
;
|
||||
|
||||
/* start-sanitize-gm
|
||||
Need to find a better way to do this...
|
||||
exp : exp '@' name
|
||||
{ write_exp_elt_opcode (STRUCTOP_FIELD);
|
||||
write_exp_string ($3);
|
||||
write_exp_elt_opcode (STRUCTOP_FIELD);
|
||||
}
|
||||
end-sanitize-gm */
|
||||
|
||||
exp : exp '.' qualified_name
|
||||
{ /* exp.type::name becomes exp.*(&type::name) */
|
||||
/* Note: this doesn't work if name is a
|
||||
|
|
272
gdb/configure
vendored
272
gdb/configure
vendored
|
@ -1,7 +1,7 @@
|
|||
#! /bin/sh
|
||||
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated automatically using autoconf version 2.4
|
||||
# Generated automatically using autoconf version 2.4.2
|
||||
# Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
|
||||
#
|
||||
# This configure script is free software; the Free Software Foundation
|
||||
|
@ -39,6 +39,18 @@ target=NONE
|
|||
verbose=
|
||||
x_includes=NONE
|
||||
x_libraries=NONE
|
||||
bindir='${exec_prefix}/bin'
|
||||
sbindir='${exec_prefix}/sbin'
|
||||
libexecdir='${exec_prefix}/libexec'
|
||||
datadir='${prefix}/share'
|
||||
sysconfdir='${prefix}/etc'
|
||||
sharedstatedir='${prefix}/com'
|
||||
localstatedir='${prefix}/var'
|
||||
libdir='${exec_prefix}/lib'
|
||||
includedir='${prefix}/include'
|
||||
oldincludedir='/usr/include'
|
||||
infodir='${prefix}/info'
|
||||
mandir='${prefix}/man'
|
||||
|
||||
# Initialize some other variables.
|
||||
subdirs=
|
||||
|
@ -63,9 +75,14 @@ do
|
|||
|
||||
case "$ac_option" in
|
||||
|
||||
-build | --build | --buil | --bui | --bu | --b)
|
||||
-bindir | --bindir | --bindi | --bind | --bin | --bi)
|
||||
ac_prev=bindir ;;
|
||||
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
|
||||
bindir="$ac_optarg" ;;
|
||||
|
||||
-build | --build | --buil | --bui | --bu)
|
||||
ac_prev=build ;;
|
||||
-build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*)
|
||||
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
|
||||
build="$ac_optarg" ;;
|
||||
|
||||
-cache-file | --cache-file | --cache-fil | --cache-fi \
|
||||
|
@ -75,6 +92,12 @@ do
|
|||
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
|
||||
cache_file="$ac_optarg" ;;
|
||||
|
||||
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
|
||||
ac_prev=datadir ;;
|
||||
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
|
||||
| --da=*)
|
||||
datadir="$ac_optarg" ;;
|
||||
|
||||
-disable-* | --disable-*)
|
||||
ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
|
||||
# Reject names that are not valid shell variable names.
|
||||
|
@ -125,12 +148,26 @@ Configuration:
|
|||
Directory and file names:
|
||||
--prefix=PREFIX install architecture-independent files in PREFIX
|
||||
[$ac_default_prefix]
|
||||
--exec-prefix=PREFIX install architecture-dependent files in PREFIX
|
||||
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
|
||||
[same as prefix]
|
||||
--bindir=DIR user executables in DIR [EPREFIX/bin]
|
||||
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
|
||||
--libexecdir=DIR program executables in DIR [EPREFIX/libexec]
|
||||
--datadir=DIR read-only architecture-independent data in DIR [PREFIX/share]
|
||||
--sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
|
||||
--sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com]
|
||||
--localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
|
||||
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
|
||||
--includedir=DIR C header files in DIR [PREFIX/include]
|
||||
--oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
|
||||
--infodir=DIR info documentation in DIR [PREFIX/info]
|
||||
--mandir=DIR man documentation in DIR [PREFIX/man]
|
||||
--srcdir=DIR find the sources in DIR [configure dir or ..]
|
||||
--program-prefix=PREFIX prepend PREFIX to installed program names
|
||||
--program-suffix=SUFFIX append SUFFIX to installed program names
|
||||
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
|
||||
EOF
|
||||
cat << EOF
|
||||
Host type:
|
||||
--build=BUILD configure for building on BUILD [BUILD=HOST]
|
||||
--host=HOST configure for HOST [guessed]
|
||||
|
@ -151,6 +188,44 @@ EOF
|
|||
-host=* | --host=* | --hos=* | --ho=*)
|
||||
host="$ac_optarg" ;;
|
||||
|
||||
-includedir | --includedir | --includedi | --included | --include \
|
||||
| --includ | --inclu | --incl | --inc)
|
||||
ac_prev=includedir ;;
|
||||
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
|
||||
| --includ=* | --inclu=* | --incl=* | --inc=*)
|
||||
includedir="$ac_optarg" ;;
|
||||
|
||||
-infodir | --infodir | --infodi | --infod | --info | --inf)
|
||||
ac_prev=infodir ;;
|
||||
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
|
||||
infodir="$ac_optarg" ;;
|
||||
|
||||
-libdir | --libdir | --libdi | --libd)
|
||||
ac_prev=libdir ;;
|
||||
-libdir=* | --libdir=* | --libdi=* | --libd=*)
|
||||
libdir="$ac_optarg" ;;
|
||||
|
||||
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
|
||||
| --libexe | --libex | --libe)
|
||||
ac_prev=libexecdir ;;
|
||||
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
|
||||
| --libexe=* | --libex=* | --libe=*)
|
||||
libexecdir="$ac_optarg" ;;
|
||||
|
||||
-localstatedir | --localstatedir | --localstatedi | --localstated \
|
||||
| --localstate | --localstat | --localsta | --localst \
|
||||
| --locals | --local | --loca | --loc | --lo)
|
||||
ac_prev=localstatedir ;;
|
||||
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
|
||||
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
|
||||
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
|
||||
localstatedir="$ac_optarg" ;;
|
||||
|
||||
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
|
||||
ac_prev=mandir ;;
|
||||
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
|
||||
mandir="$ac_optarg" ;;
|
||||
|
||||
-nfp | --nfp | --nf)
|
||||
# Obsolete; use --without-fp.
|
||||
with_fp=no ;;
|
||||
|
@ -163,6 +238,15 @@ EOF
|
|||
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
|
||||
no_recursion=yes ;;
|
||||
|
||||
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
|
||||
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
|
||||
| --oldin | --oldi | --old | --ol | --o)
|
||||
ac_prev=oldincludedir ;;
|
||||
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
|
||||
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
|
||||
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
|
||||
oldincludedir="$ac_optarg" ;;
|
||||
|
||||
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
|
||||
ac_prev=prefix ;;
|
||||
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
|
||||
|
@ -203,6 +287,23 @@ EOF
|
|||
| -silent | --silent | --silen | --sile | --sil)
|
||||
silent=yes ;;
|
||||
|
||||
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
||||
ac_prev=sbindir ;;
|
||||
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
||||
| --sbi=* | --sb=*)
|
||||
sbindir="$ac_optarg" ;;
|
||||
|
||||
-sharedstatedir | --sharedstatedir | --sharedstatedi \
|
||||
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
|
||||
| --sharedst | --shareds | --shared | --share | --shar \
|
||||
| --sha | --sh)
|
||||
ac_prev=sharedstatedir ;;
|
||||
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
|
||||
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
|
||||
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
|
||||
| --sha=* | --sh=*)
|
||||
sharedstatedir="$ac_optarg" ;;
|
||||
|
||||
-site | --site | --sit)
|
||||
ac_prev=site ;;
|
||||
-site=* | --site=* | --sit=*)
|
||||
|
@ -213,6 +314,13 @@ EOF
|
|||
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
|
||||
srcdir="$ac_optarg" ;;
|
||||
|
||||
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
|
||||
| --syscon | --sysco | --sysc | --sys | --sy)
|
||||
ac_prev=sysconfdir ;;
|
||||
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
|
||||
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
|
||||
sysconfdir="$ac_optarg" ;;
|
||||
|
||||
-target | --target | --targe | --targ | --tar | --ta | --t)
|
||||
ac_prev=target ;;
|
||||
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
|
||||
|
@ -222,7 +330,7 @@ EOF
|
|||
verbose=yes ;;
|
||||
|
||||
-version | --version | --versio | --versi | --vers)
|
||||
echo "configure generated by autoconf version 2.4"
|
||||
echo "configure generated by autoconf version 2.4.2"
|
||||
exit 0 ;;
|
||||
|
||||
-with-* | --with-*)
|
||||
|
@ -387,9 +495,12 @@ fi
|
|||
|
||||
ac_ext=c
|
||||
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5 2>&5'
|
||||
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5 2>&5'
|
||||
ac_cpp='echo $CPP $CPPFLAGS 1>&5;
|
||||
$CPP $CPPFLAGS'
|
||||
ac_compile='echo ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5;
|
||||
${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5 2>&5'
|
||||
ac_link='echo ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5;
|
||||
${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5 2>&5'
|
||||
|
||||
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
|
||||
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
|
||||
|
@ -416,7 +527,7 @@ else
|
|||
ac_cv_prog_CC="$CC" # Let the user override the test.
|
||||
else
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in $PATH; do
|
||||
for ac_dir in cc; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f $ac_dir/$ac_word; then
|
||||
ac_cv_prog_CC="gcc"
|
||||
|
@ -450,6 +561,7 @@ else
|
|||
ac_cv_prog_gcc=no
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$ac_t""$ac_cv_prog_gcc" 1>&6
|
||||
if test $ac_cv_prog_gcc = yes; then
|
||||
GCC=yes
|
||||
|
@ -467,7 +579,8 @@ fi
|
|||
rm -f conftest*
|
||||
|
||||
fi
|
||||
echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6
|
||||
|
||||
echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6
|
||||
if test $ac_cv_prog_gcc_g = yes; then
|
||||
CFLAGS="-g -O"
|
||||
else
|
||||
|
@ -494,7 +607,7 @@ else
|
|||
# On the NeXT, cc -E runs the code through the compiler's parser,
|
||||
# not just through cpp.
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 498 "configure"
|
||||
#line 611 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <assert.h>
|
||||
Syntax Error
|
||||
|
@ -508,7 +621,7 @@ else
|
|||
rm -rf conftest*
|
||||
CPP="${CC-cc} -E -traditional-cpp"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 512 "configure"
|
||||
#line 625 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <assert.h>
|
||||
Syntax Error
|
||||
|
@ -535,7 +648,7 @@ echo "$ac_t""$CPP" 1>&6
|
|||
|
||||
echo $ac_n "checking for AIX""... $ac_c" 1>&6
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 539 "configure"
|
||||
#line 652 "configure"
|
||||
#include "confdefs.h"
|
||||
#ifdef _AIX
|
||||
yes
|
||||
|
@ -562,7 +675,7 @@ 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 566 "configure"
|
||||
#line 679 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <minix/config.h>
|
||||
EOF
|
||||
|
@ -680,10 +793,17 @@ else
|
|||
esac
|
||||
done
|
||||
IFS="$ac_save_ifs"
|
||||
# As a last resort, use the slow shell script.
|
||||
test -z "$ac_cv_path_install" && ac_cv_path_install="$ac_install_sh"
|
||||
|
||||
fi
|
||||
INSTALL="$ac_cv_path_install"
|
||||
if test "${ac_cv_path_install+set}" = set; then
|
||||
INSTALL="$ac_cv_path_install"
|
||||
else
|
||||
# As a last resort, use the slow shell script. We don't cache a
|
||||
# path for INSTALL within a source directory, because that will
|
||||
# break other packages using the cache if that directory is
|
||||
# removed, or if the path is relative.
|
||||
INSTALL="$ac_install_sh"
|
||||
fi
|
||||
fi
|
||||
echo "$ac_t""$INSTALL" 1>&6
|
||||
|
||||
|
@ -703,7 +823,7 @@ else
|
|||
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
|
||||
else
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in $PATH; do
|
||||
for ac_dir in :; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f $ac_dir/$ac_word; then
|
||||
ac_cv_prog_RANLIB="ranlib"
|
||||
|
@ -887,7 +1007,7 @@ else
|
|||
ac_cv_c_cross=yes
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 891 "configure"
|
||||
#line 1011 "configure"
|
||||
#include "confdefs.h"
|
||||
main(){return(0);}
|
||||
EOF
|
||||
|
@ -900,15 +1020,16 @@ fi
|
|||
fi
|
||||
rm -fr conftest*
|
||||
fi
|
||||
cross_compiling=$ac_cv_c_cross
|
||||
|
||||
echo "$ac_t""$ac_cv_c_cross" 1>&6
|
||||
cross_compiling=$ac_cv_c_cross
|
||||
|
||||
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
|
||||
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 912 "configure"
|
||||
#line 1033 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
@ -930,7 +1051,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 934 "configure"
|
||||
#line 1055 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <string.h>
|
||||
EOF
|
||||
|
@ -948,7 +1069,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 952 "configure"
|
||||
#line 1073 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <stdlib.h>
|
||||
EOF
|
||||
|
@ -969,7 +1090,7 @@ if test "$cross_compiling" = yes; then
|
|||
ac_cv_header_stdc=no
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 973 "configure"
|
||||
#line 1094 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <ctype.h>
|
||||
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
||||
|
@ -990,6 +1111,7 @@ fi
|
|||
rm -fr conftest*
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$ac_t""$ac_cv_header_stdc" 1>&6
|
||||
if test $ac_cv_header_stdc = yes; then
|
||||
cat >> confdefs.h <<\EOF
|
||||
|
@ -1006,7 +1128,7 @@ 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 1010 "configure"
|
||||
#line 1132 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <$ac_hdr>
|
||||
EOF
|
||||
|
@ -1024,7 +1146,7 @@ rm -f conftest*
|
|||
fi
|
||||
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
ac_tr_hdr=HAVE_`echo $ac_hdr | tr '[a-z]./\055' '[A-Z]___'`
|
||||
ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdedfghijklmnopqrstuvwxyz./\055' 'ABCDEDFGHIJKLMNOPQRSTUVWXYZ___'`
|
||||
cat >> confdefs.h <<EOF
|
||||
#define $ac_tr_hdr 1
|
||||
EOF
|
||||
|
@ -1039,7 +1161,7 @@ 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 1043 "configure"
|
||||
#line 1165 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
@ -1080,6 +1202,7 @@ fi
|
|||
rm -f conftest*
|
||||
|
||||
fi
|
||||
|
||||
echo "$ac_t""$ac_cv_header_stat_broken" 1>&6
|
||||
if test $ac_cv_header_stat_broken = yes; then
|
||||
cat >> confdefs.h <<\EOF
|
||||
|
@ -1097,7 +1220,7 @@ else
|
|||
ac_cv_func_mmap=no
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1101 "configure"
|
||||
#line 1224 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
/* Thanks to Mike Haertel and Jim Avera for this test. */
|
||||
|
@ -1181,6 +1304,7 @@ fi
|
|||
fi
|
||||
rm -fr conftest*
|
||||
fi
|
||||
|
||||
echo "$ac_t""$ac_cv_func_mmap" 1>&6
|
||||
if test $ac_cv_func_mmap = yes; then
|
||||
cat >> confdefs.h <<\EOF
|
||||
|
@ -1195,8 +1319,8 @@ ENABLE_CLIBS=
|
|||
ENABLE_OBS=
|
||||
|
||||
# Check whether --enable-netrom or --disable-netrom was given.
|
||||
enableval="$enable_netrom"
|
||||
if test -n "$enableval"; then
|
||||
if test "${enable_netrom+set}" = set; then
|
||||
enableval="$enable_netrom"
|
||||
case "${enableval}" in
|
||||
yes) enable_netrom=yes ;;
|
||||
no) enable_netrom=no ;;
|
||||
|
@ -1213,8 +1337,8 @@ fi
|
|||
ENABLE_GDBTK=
|
||||
|
||||
# Check whether --enable-gdbtk or --disable-gdbtk was given.
|
||||
enableval="$enable_gdbtk"
|
||||
if test -n "$enableval"; then
|
||||
if test "${enable_gdbtk+set}" = set; then
|
||||
enableval="$enable_gdbtk"
|
||||
case "${enableval}" in
|
||||
yes) enable_gdbtk=yes ;;
|
||||
no) enable_gdbtk=no ;;
|
||||
|
@ -1231,8 +1355,8 @@ if test "${enable_gdbtk}" = "yes"; then
|
|||
echo $ac_n "checking for X""... $ac_c" 1>&6
|
||||
|
||||
# Check whether --with-x or --without-x was given.
|
||||
withval="$with_x"
|
||||
if test -n "$withval"; then
|
||||
if test "${with_x+set}" = set; then
|
||||
withval="$with_x"
|
||||
:
|
||||
fi
|
||||
|
||||
|
@ -1285,7 +1409,7 @@ test -z "$x_direct_test_library" && x_direct_test_library=Xt
|
|||
test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
|
||||
test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1289 "configure"
|
||||
#line 1413 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <$x_direct_test_include>
|
||||
EOF
|
||||
|
@ -1348,7 +1472,7 @@ rm -f conftest*
|
|||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-l$x_direct_test_library $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1352 "configure"
|
||||
#line 1476 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() { return 0; }
|
||||
|
@ -1460,13 +1584,14 @@ else
|
|||
# libraries we check for below, so use a different variable.
|
||||
# --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
|
||||
echo $ac_n "checking for -lICE""... $ac_c" 1>&6
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_ICE'+set}'`\" = set"; then
|
||||
ac_lib_var=`echo ICE | tr '+./' 'p__'`
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-lICE $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1470 "configure"
|
||||
#line 1595 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() { return 0; }
|
||||
|
@ -1476,16 +1601,16 @@ IceConnectionNumber()
|
|||
EOF
|
||||
if eval $ac_link; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_ICE=yes"
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_ICE=no"
|
||||
eval "ac_cv_lib_$ac_lib_var=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
LIBS="$ac_save_LIBS"
|
||||
|
||||
fi
|
||||
if eval "test \"`echo '$ac_cv_lib_'ICE`\" = yes"; then
|
||||
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
|
||||
else
|
||||
|
@ -1503,13 +1628,14 @@ fi
|
|||
# libraries were built with DECnet support. And karl@cs.umb.edu says
|
||||
# the Alpha needs dnet_stub (dnet does not exist).
|
||||
echo $ac_n "checking for -ldnet""... $ac_c" 1>&6
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_dnet'+set}'`\" = set"; then
|
||||
ac_lib_var=`echo dnet | tr '+./' 'p__'`
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-ldnet $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1513 "configure"
|
||||
#line 1639 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() { return 0; }
|
||||
|
@ -1519,16 +1645,16 @@ dnet_ntoa()
|
|||
EOF
|
||||
if eval $ac_link; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_dnet=yes"
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_dnet=no"
|
||||
eval "ac_cv_lib_$ac_lib_var=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
LIBS="$ac_save_LIBS"
|
||||
|
||||
fi
|
||||
if eval "test \"`echo '$ac_cv_lib_'dnet`\" = yes"; then
|
||||
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
|
||||
else
|
||||
|
@ -1537,13 +1663,14 @@ fi
|
|||
|
||||
if test $ac_cv_lib_dnet = no; then
|
||||
echo $ac_n "checking for -ldnet_stub""... $ac_c" 1>&6
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_dnet_stub'+set}'`\" = set"; then
|
||||
ac_lib_var=`echo dnet_stub | tr '+./' 'p__'`
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-ldnet_stub $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1547 "configure"
|
||||
#line 1674 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() { return 0; }
|
||||
|
@ -1553,16 +1680,16 @@ dnet_ntoa()
|
|||
EOF
|
||||
if eval $ac_link; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_dnet_stub=yes"
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_dnet_stub=no"
|
||||
eval "ac_cv_lib_$ac_lib_var=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
LIBS="$ac_save_LIBS"
|
||||
|
||||
fi
|
||||
if eval "test \"`echo '$ac_cv_lib_'dnet_stub`\" = yes"; then
|
||||
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
|
||||
else
|
||||
|
@ -1576,13 +1703,14 @@ fi
|
|||
# Not sure which flavor of 386 UNIX this is, but it seems harmless to
|
||||
# check for it.
|
||||
echo $ac_n "checking for -lnsl""... $ac_c" 1>&6
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_nsl'+set}'`\" = set"; then
|
||||
ac_lib_var=`echo nsl | tr '+./' 'p__'`
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-lnsl $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1586 "configure"
|
||||
#line 1714 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() { return 0; }
|
||||
|
@ -1592,16 +1720,16 @@ t_accept()
|
|||
EOF
|
||||
if eval $ac_link; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_nsl=yes"
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_nsl=no"
|
||||
eval "ac_cv_lib_$ac_lib_var=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
LIBS="$ac_save_LIBS"
|
||||
|
||||
fi
|
||||
if eval "test \"`echo '$ac_cv_lib_'nsl`\" = yes"; then
|
||||
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
|
||||
else
|
||||
|
@ -1614,13 +1742,14 @@ fi
|
|||
# But -lsocket is broken on IRIX, according to simon@lia.di.epfl.ch.
|
||||
if test "`(uname) 2>/dev/null`" != IRIX; then
|
||||
echo $ac_n "checking for -lsocket""... $ac_c" 1>&6
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_socket'+set}'`\" = set"; then
|
||||
ac_lib_var=`echo socket | tr '+./' 'p__'`
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-lsocket $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1624 "configure"
|
||||
#line 1753 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() { return 0; }
|
||||
|
@ -1630,16 +1759,16 @@ socket()
|
|||
EOF
|
||||
if eval $ac_link; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_socket=yes"
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_socket=no"
|
||||
eval "ac_cv_lib_$ac_lib_var=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
LIBS="$ac_save_LIBS"
|
||||
|
||||
fi
|
||||
if eval "test \"`echo '$ac_cv_lib_'socket`\" = yes"; then
|
||||
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
X_EXTRA_LIBS="$X_EXTRA_LIBS -lsocket"
|
||||
else
|
||||
|
@ -1677,7 +1806,7 @@ 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 1681 "configure"
|
||||
#line 1810 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <tk.h>
|
||||
EOF
|
||||
|
@ -1779,7 +1908,7 @@ 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 1783 "configure"
|
||||
#line 1912 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <tclInt.h>
|
||||
EOF
|
||||
|
@ -2207,6 +2336,9 @@ mips64*el-*-elf*) gdb_target=idtl64 ;;
|
|||
mips64*-*-elf*) gdb_target=idt64 ;;
|
||||
mips*el-*-ecoff*) gdb_target=idtl ;;
|
||||
mips*-*-ecoff*) gdb_target=idt ;;
|
||||
# start-sanitize-gm
|
||||
mips*-*-magic*) gdb_target=magic ;;
|
||||
# end-sanitize-gm
|
||||
mips*el-*-elf*) gdb_target=idtl ;;
|
||||
mips*-*-elf*) gdb_target=idt ;;
|
||||
mips*-little-*) gdb_target=littlemips ;;
|
||||
|
@ -2435,7 +2567,7 @@ do
|
|||
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
|
||||
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
|
||||
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
|
||||
echo "$CONFIG_STATUS generated by autoconf version 2.4"
|
||||
echo "$CONFIG_STATUS generated by autoconf version 2.4.2"
|
||||
exit 0 ;;
|
||||
-help | --help | --hel | --he | --h)
|
||||
echo "\$ac_cs_usage"; exit 0 ;;
|
||||
|
@ -2462,6 +2594,18 @@ s%@LIBS@%$LIBS%g
|
|||
s%@exec_prefix@%$exec_prefix%g
|
||||
s%@prefix@%$prefix%g
|
||||
s%@program_transform_name@%$program_transform_name%g
|
||||
s%@bindir@%$bindir%g
|
||||
s%@sbindir@%$sbindir%g
|
||||
s%@libexecdir@%$libexecdir%g
|
||||
s%@datadir@%$datadir%g
|
||||
s%@sysconfdir@%$sysconfdir%g
|
||||
s%@sharedstatedir@%$sharedstatedir%g
|
||||
s%@localstatedir@%$localstatedir%g
|
||||
s%@libdir@%$libdir%g
|
||||
s%@includedir@%$includedir%g
|
||||
s%@oldincludedir@%$oldincludedir%g
|
||||
s%@infodir@%$infodir%g
|
||||
s%@mandir@%$mandir%g
|
||||
s%@CC@%$CC%g
|
||||
s%@CPP@%$CPP%g
|
||||
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
|
||||
|
|
|
@ -417,6 +417,9 @@ mips64*el-*-elf*) gdb_target=idtl64 ;;
|
|||
mips64*-*-elf*) gdb_target=idt64 ;;
|
||||
mips*el-*-ecoff*) gdb_target=idtl ;;
|
||||
mips*-*-ecoff*) gdb_target=idt ;;
|
||||
# start-sanitize-gm
|
||||
mips*-*-magic*) gdb_target=magic ;;
|
||||
# end-sanitize-gm
|
||||
mips*el-*-elf*) gdb_target=idtl ;;
|
||||
mips*-*-elf*) gdb_target=idt ;;
|
||||
mips*-little-*) gdb_target=littlemips ;;
|
||||
|
|
37
gdb/eval.c
37
gdb/eval.c
|
@ -29,6 +29,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||
#include "demangle.h"
|
||||
#include "language.h" /* For CAST_IS_CONVERSION */
|
||||
#include "f-lang.h" /* for array bound stuff */
|
||||
/* start-sanitize-gm */
|
||||
#ifdef GENERAL_MAGIC_HACKS
|
||||
#include "magic.h"
|
||||
#endif /* GENERAL_MAGIC_HACKS */
|
||||
/* end-sanitize-gm */
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
|
||||
|
@ -839,6 +844,36 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
|
|||
NULL, "structure pointer");
|
||||
}
|
||||
|
||||
/* start-sanitize-gm */
|
||||
#ifdef GENERAL_MAGIC_HACKS
|
||||
case STRUCTOP_FIELD:
|
||||
tem = longest_to_int (exp->elts[pc + 1].longconst);
|
||||
(*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
|
||||
arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
|
||||
if (noside == EVAL_SKIP)
|
||||
goto nosideret;
|
||||
{
|
||||
CORE_ADDR object = value_as_long (arg1);
|
||||
struct type *type = type_of_object (object);
|
||||
|
||||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||
return value_zero (lookup_struct_elt_type (type,
|
||||
&exp->elts[pc + 2].string,
|
||||
0),
|
||||
lval_memory);
|
||||
else
|
||||
{
|
||||
value_ptr temp = value_from_longest (builtin_type_unsigned_long,
|
||||
baseptr_of_object (value_as_long(arg1)));
|
||||
|
||||
VALUE_TYPE (temp) = type;
|
||||
return value_struct_elt (&temp, NULL, &exp->elts[pc + 2].string,
|
||||
NULL, "structure pointer");
|
||||
}
|
||||
}
|
||||
#endif /* GENERAL_MAGIC_HACKS */
|
||||
/* end-sanitize-gm */
|
||||
|
||||
case STRUCTOP_MEMBER:
|
||||
arg1 = evaluate_subexp_for_address (exp, pos, noside);
|
||||
goto handle_pointer_to_member;
|
||||
|
@ -1259,8 +1294,6 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
|
|||
error ("Non-integral right operand for \"@\" operator.");
|
||||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||
{
|
||||
if (VALUE_REPEATED (arg1))
|
||||
error ("Cannot create artificial arrays of artificial arrays.");
|
||||
return allocate_repeat_value (VALUE_TYPE (arg1),
|
||||
longest_to_int (value_as_long (arg2)));
|
||||
}
|
||||
|
|
114
gdb/expprint.c
114
gdb/expprint.c
|
@ -15,7 +15,7 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "defs.h"
|
||||
#include "symtab.h"
|
||||
|
@ -30,9 +30,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
static void
|
||||
print_subexp PARAMS ((struct expression *, int *, GDB_FILE *, enum precedence));
|
||||
|
||||
static void
|
||||
print_simple_m2_func PARAMS ((char *, struct expression *, int *, GDB_FILE *));
|
||||
|
||||
void
|
||||
print_expression (exp, stream)
|
||||
struct expression *exp;
|
||||
|
@ -153,6 +150,13 @@ print_subexp (exp, pos, stream, prec)
|
|||
fputs_filtered (")", stream);
|
||||
return;
|
||||
|
||||
case OP_NAME:
|
||||
case OP_EXPRSTRING:
|
||||
nargs = longest_to_int (exp -> elts[pc + 1].longconst);
|
||||
(*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
|
||||
fputs_filtered (&exp->elts[pc + 2].string, stream);
|
||||
return;
|
||||
|
||||
case OP_STRING:
|
||||
nargs = longest_to_int (exp -> elts[pc + 1].longconst);
|
||||
(*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
|
||||
|
@ -163,8 +167,11 @@ print_subexp (exp, pos, stream, prec)
|
|||
return;
|
||||
|
||||
case OP_BITSTRING:
|
||||
error ("support for OP_BITSTRING unimplemented");
|
||||
break;
|
||||
nargs = longest_to_int (exp -> elts[pc + 1].longconst);
|
||||
(*pos)
|
||||
+= 3 + BYTES_TO_EXP_ELEM ((nargs + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT);
|
||||
fprintf (stream, "B'<unimplemented>'");
|
||||
return;
|
||||
|
||||
case OP_ARRAY:
|
||||
(*pos) += 3;
|
||||
|
@ -266,6 +273,16 @@ print_subexp (exp, pos, stream, prec)
|
|||
fputs_filtered (")", stream);
|
||||
return;
|
||||
|
||||
case TERNOP_SLICE:
|
||||
case TERNOP_SLICE_COUNT:
|
||||
print_subexp (exp, pos, stream, PREC_SUFFIX);
|
||||
fputs_filtered ("(", stream);
|
||||
print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
|
||||
fputs_filtered (opcode == TERNOP_SLICE ? " : " : " UP ", stream);
|
||||
print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
|
||||
fputs_filtered (")", stream);
|
||||
return;
|
||||
|
||||
case STRUCTOP_STRUCT:
|
||||
tem = longest_to_int (exp->elts[pc + 1].longconst);
|
||||
(*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
|
||||
|
@ -283,6 +300,19 @@ print_subexp (exp, pos, stream, prec)
|
|||
fputs_filtered (&exp->elts[pc + 2].string, stream);
|
||||
return;
|
||||
|
||||
/* start-sanitize-gm */
|
||||
#ifdef GENERAL_MAGIC_HACKS
|
||||
case STRUCTOP_FIELD:
|
||||
tem = longest_to_int (exp->elts[pc + 1].longconst);
|
||||
(*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
|
||||
print_subexp (exp, pos, stream, PREC_SUFFIX);
|
||||
fputs_filtered ("@", stream);
|
||||
fputs_filtered (&exp->elts[pc + 2].string, stream);
|
||||
return;
|
||||
|
||||
#endif /* GENERAL_MAGIC_HACKS */
|
||||
/* end-sanitize-gm */
|
||||
|
||||
case BINOP_SUBSCRIPT:
|
||||
print_subexp (exp, pos, stream, PREC_SUFFIX);
|
||||
fputs_filtered ("[", stream);
|
||||
|
@ -386,46 +416,6 @@ print_subexp (exp, pos, stream, prec)
|
|||
print_subexp(exp,pos,stream,PREC_PREFIX);
|
||||
fprintf_unfiltered(stream,")");
|
||||
return;
|
||||
|
||||
case UNOP_CAP:
|
||||
print_simple_m2_func("CAP",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_CHR:
|
||||
print_simple_m2_func("CHR",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_ORD:
|
||||
print_simple_m2_func("ORD",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_ABS:
|
||||
print_simple_m2_func("ABS",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_FLOAT:
|
||||
print_simple_m2_func("FLOAT",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_HIGH:
|
||||
print_simple_m2_func("HIGH",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_MAX:
|
||||
print_simple_m2_func("MAX",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_MIN:
|
||||
print_simple_m2_func("MIN",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_ODD:
|
||||
print_simple_m2_func("ODD",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_TRUNC:
|
||||
print_simple_m2_func("TRUNC",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case BINOP_INCL:
|
||||
case BINOP_EXCL:
|
||||
|
@ -450,6 +440,7 @@ print_subexp (exp, pos, stream, prec)
|
|||
error ("Invalid expression");
|
||||
}
|
||||
|
||||
/* Note that PREC_BUILTIN will always emit parentheses. */
|
||||
if ((int) myprec < (int) prec)
|
||||
fputs_filtered ("(", stream);
|
||||
if ((int) opcode > (int) BINOP_END)
|
||||
|
@ -464,7 +455,11 @@ print_subexp (exp, pos, stream, prec)
|
|||
{
|
||||
/* Unary prefix operator. */
|
||||
fputs_filtered (op_str, stream);
|
||||
if (myprec == PREC_BUILTIN_FUNCTION)
|
||||
fputs_filtered ("(", stream);
|
||||
print_subexp (exp, pos, stream, PREC_PREFIX);
|
||||
if (myprec == PREC_BUILTIN_FUNCTION)
|
||||
fputs_filtered (")", stream);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -493,23 +488,6 @@ print_subexp (exp, pos, stream, prec)
|
|||
fputs_filtered (")", stream);
|
||||
}
|
||||
|
||||
/* Print out something of the form <s>(<arg>).
|
||||
This is used to print out some builtin Modula-2
|
||||
functions.
|
||||
FIXME: There is probably some way to get the precedence
|
||||
rules to do this (print a unary operand with parens around it). */
|
||||
static void
|
||||
print_simple_m2_func(s,exp,pos,stream)
|
||||
char *s;
|
||||
register struct expression *exp;
|
||||
register int *pos;
|
||||
GDB_FILE *stream;
|
||||
{
|
||||
fprintf_unfiltered(stream,"%s(",s);
|
||||
print_subexp(exp,pos,stream,PREC_PREFIX);
|
||||
fprintf_unfiltered(stream,")");
|
||||
}
|
||||
|
||||
/* Return the operator corresponding to opcode OP as
|
||||
a string. NULL indicates that the opcode was not found in the
|
||||
current language table. */
|
||||
|
@ -596,6 +574,8 @@ dump_expression (exp, stream, note)
|
|||
case BINOP_CONCAT: opcode_name = "BINOP_CONCAT"; break;
|
||||
case BINOP_END: opcode_name = "BINOP_END"; break;
|
||||
case TERNOP_COND: opcode_name = "TERNOP_COND"; break;
|
||||
case TERNOP_SLICE: opcode_name = "TERNOP_SLICE"; break;
|
||||
case TERNOP_SLICE_COUNT: opcode_name = "TERNOP_SLICE_COUNT"; break;
|
||||
case OP_LONG: opcode_name = "OP_LONG"; break;
|
||||
case OP_DOUBLE: opcode_name = "OP_DOUBLE"; break;
|
||||
case OP_VAR_VALUE: opcode_name = "OP_VAR_VALUE"; break;
|
||||
|
@ -618,6 +598,9 @@ dump_expression (exp, stream, note)
|
|||
case UNOP_PREDECREMENT: opcode_name = "UNOP_PREDECREMENT"; break;
|
||||
case UNOP_POSTDECREMENT: opcode_name = "UNOP_POSTDECREMENT"; break;
|
||||
case UNOP_SIZEOF: opcode_name = "UNOP_SIZEOF"; break;
|
||||
case UNOP_LOWER: opcode_name = "UNOP_LOWER"; break;
|
||||
case UNOP_UPPER: opcode_name = "UNOP_UPPER"; break;
|
||||
case UNOP_LENGTH: opcode_name = "UNOP_LENGTH"; break;
|
||||
case UNOP_PLUS: opcode_name = "UNOP_PLUS"; break;
|
||||
case UNOP_CAP: opcode_name = "UNOP_CAP"; break;
|
||||
case UNOP_CHR: opcode_name = "UNOP_CHR"; break;
|
||||
|
@ -633,6 +616,11 @@ dump_expression (exp, stream, note)
|
|||
case OP_M2_STRING: opcode_name = "OP_M2_STRING"; break;
|
||||
case STRUCTOP_STRUCT: opcode_name = "STRUCTOP_STRUCT"; break;
|
||||
case STRUCTOP_PTR: opcode_name = "STRUCTOP_PTR"; break;
|
||||
/* start-sanitize-gm */
|
||||
#ifdef GENERAL_MAGIC_HACKS
|
||||
+ case STRUCTOP_FIELD: opcode_name = "STRUCTOP_FIELD"; break;
|
||||
#endif /* GENERAL_MAGIC_HACKS */
|
||||
/* end-sanitize-gm */
|
||||
case OP_THIS: opcode_name = "OP_THIS"; break;
|
||||
case OP_SCOPE: opcode_name = "OP_SCOPE"; break;
|
||||
case OP_TYPE: opcode_name = "OP_TYPE"; break;
|
||||
|
|
|
@ -15,7 +15,7 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#if !defined (EXPRESSION_H)
|
||||
#define EXPRESSION_H 1
|
||||
|
@ -247,6 +247,9 @@ enum exp_opcode
|
|||
UNOP_ODD,
|
||||
UNOP_TRUNC,
|
||||
|
||||
/* Chill builtin functions. */
|
||||
UNOP_LOWER, UNOP_UPPER, UNOP_LENGTH,
|
||||
|
||||
OP_BOOL, /* Modula-2 builtin BOOLEAN type */
|
||||
OP_M2_STRING, /* Modula-2 string constants */
|
||||
|
||||
|
@ -264,6 +267,14 @@ enum exp_opcode
|
|||
STRUCTOP_STRUCT,
|
||||
STRUCTOP_PTR,
|
||||
|
||||
/* start-sanitize-gm */
|
||||
#ifdef GENERAL_MAGIC_HACKS
|
||||
/* STRUCTOP_FIELD is for handling field access for Magic Cap dynamic objects.
|
||||
*/
|
||||
STRUCTOP_FIELD,
|
||||
#endif /* GENERAL_MAGIC_HACKS */
|
||||
/* end-sanitize-gm */
|
||||
|
||||
/* C++ */
|
||||
/* OP_THIS is just a placeholder for the class instance variable.
|
||||
It just comes in a tight (OP_THIS, OP_THIS) pair. */
|
||||
|
@ -287,7 +298,13 @@ enum exp_opcode
|
|||
/* OP_TYPE is for parsing types, and used with the "ptype" command
|
||||
so we can look up types that are qualified by scope, either with
|
||||
the GDB "::" operator, or the Modula-2 '.' operator. */
|
||||
OP_TYPE
|
||||
OP_TYPE,
|
||||
|
||||
/* An un-looked-up identifier. */
|
||||
OP_NAME,
|
||||
|
||||
/* An unparsed expression. Used for Scheme (for now at least) */
|
||||
OP_EXPRSTRING
|
||||
};
|
||||
|
||||
union exp_element
|
||||
|
@ -319,8 +336,6 @@ struct expression
|
|||
#define BYTES_TO_EXP_ELEM(bytes) \
|
||||
(((bytes) + sizeof (union exp_element) - 1) / sizeof (union exp_element))
|
||||
|
||||
#include "value.h"
|
||||
|
||||
/* From parse.c */
|
||||
|
||||
extern struct expression *parse_expression PARAMS ((char *));
|
||||
|
@ -354,9 +369,6 @@ enum noside
|
|||
extern struct value* evaluate_subexp_standard
|
||||
PARAMS ((struct type *, struct expression *, int*, enum noside));
|
||||
|
||||
extern value_ptr evaluate_subexp_with_coercion PARAMS ((struct expression *,
|
||||
int *, enum noside));
|
||||
|
||||
/* From expprint.c */
|
||||
|
||||
extern void print_expression PARAMS ((struct expression *, GDB_FILE *));
|
||||
|
|
420
gdb/magic.c
Normal file
420
gdb/magic.c
Normal file
|
@ -0,0 +1,420 @@
|
|||
#include "defs.h"
|
||||
#include "gdbcmd.h"
|
||||
#include "symtab.h"
|
||||
#include "value.h"
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#ifdef DYNAMIC_COMMAND_SUPPORT
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
typedef unsigned long ulong;
|
||||
|
||||
#ifdef DYNAMIC_COMMAND_SUPPORT
|
||||
static void
|
||||
dlopen_command PARAMS ((char *, int));
|
||||
#endif
|
||||
|
||||
#ifdef DYNAMIC_COMMAND_SUPPORT
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
dlopen_command (arg, from_tty)
|
||||
char *arg;
|
||||
int from_tty;
|
||||
{
|
||||
char *p;
|
||||
void *hdl;
|
||||
void (*sym)();
|
||||
|
||||
if (arg == 0) {
|
||||
error ("No arguments specified.");
|
||||
return;
|
||||
}
|
||||
p = arg;
|
||||
while(*p != ' ' && *p != '\0')
|
||||
p++;
|
||||
if (*p != ' ') {
|
||||
error ("Not enough arguments.");
|
||||
return;
|
||||
}
|
||||
*p++ = '\0';
|
||||
|
||||
hdl = dlopen(arg, RTLD_NOW);
|
||||
if (hdl == NULL) {
|
||||
fprintf(stderr, "%s: %s\n", arg, dlerror());
|
||||
return;
|
||||
}
|
||||
sym = dlsym(hdl, p);
|
||||
|
||||
if (sym == NULL) {
|
||||
fprintf(stderr, "%s: %s\n", p, dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
sym();
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
local_shell_escape (char *arg)
|
||||
{
|
||||
#ifdef CANT_FORK
|
||||
/* FIXME: what about errors (I don't know how GO32 system() handles
|
||||
them)? */
|
||||
system (arg);
|
||||
#else /* Can fork. */
|
||||
int rc, status, pid;
|
||||
char *p, *user_shell;
|
||||
|
||||
if ((user_shell = (char *) getenv ("SHELL")) == NULL)
|
||||
user_shell = "/bin/sh";
|
||||
|
||||
/* Get the name of the shell for arg0 */
|
||||
if ((p = strrchr (user_shell, '/')) == NULL)
|
||||
p = user_shell;
|
||||
else
|
||||
p++; /* Get past '/' */
|
||||
|
||||
if ((pid = fork()) == 0)
|
||||
{
|
||||
if (!arg)
|
||||
execl (user_shell, p, 0);
|
||||
else
|
||||
execl (user_shell, p, "-c", arg, 0);
|
||||
|
||||
fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
|
||||
safe_strerror (errno));
|
||||
gdb_flush (gdb_stderr);
|
||||
_exit (0177);
|
||||
}
|
||||
|
||||
if (pid != -1)
|
||||
while ((rc = wait (&status)) != pid && rc != -1)
|
||||
;
|
||||
else
|
||||
error ("Fork failed");
|
||||
#endif /* Can fork. */
|
||||
}
|
||||
|
||||
static void
|
||||
GetClassName(long objectID, char* name)
|
||||
{
|
||||
register value_ptr val;
|
||||
register struct symbol *sym;
|
||||
struct minimal_symbol *msymbol;
|
||||
struct type *type;
|
||||
value_ptr blocklen;
|
||||
LONGEST maddr;
|
||||
|
||||
/* Find the address of RemoteGetClassName in the inferior. */
|
||||
|
||||
sym = lookup_symbol ("RemoteGetClassName", 0, VAR_NAMESPACE, 0, NULL);
|
||||
if (sym != NULL)
|
||||
{
|
||||
if (SYMBOL_CLASS (sym) != LOC_BLOCK)
|
||||
{
|
||||
error ("\"RemoteGetClassName\" exists in this program but is not a function.");
|
||||
}
|
||||
val = value_of_variable (sym, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
msymbol = lookup_minimal_symbol ("RemoteGetClassName", "", (struct objfile *) NULL);
|
||||
if (msymbol != NULL)
|
||||
{
|
||||
type = lookup_pointer_type (builtin_type_char);
|
||||
type = lookup_function_type (type);
|
||||
type = lookup_pointer_type (type);
|
||||
maddr = (LONGEST) SYMBOL_VALUE_ADDRESS (msymbol);
|
||||
val = value_from_longest (type, maddr);
|
||||
}
|
||||
else
|
||||
{
|
||||
error ("evaluation of this expression requires the program to have a function \"RemoteGetClassName\".");
|
||||
}
|
||||
}
|
||||
|
||||
blocklen = value_from_longest (builtin_type_int, (LONGEST) objectID);
|
||||
val = call_function_by_hand (val, 1, &blocklen);
|
||||
if (value_logical_not (val))
|
||||
{
|
||||
error ("Could not get class name.");
|
||||
}
|
||||
read_memory(value_as_pointer(val), name, 32);
|
||||
|
||||
}
|
||||
|
||||
static CORE_ADDR
|
||||
GetBasePtr(long objectID)
|
||||
{
|
||||
register value_ptr val;
|
||||
register struct symbol *sym;
|
||||
struct minimal_symbol *msymbol;
|
||||
struct type *type;
|
||||
value_ptr blocklen;
|
||||
LONGEST maddr;
|
||||
|
||||
/* Find the address of RemoteGetBasePtr in the inferior. */
|
||||
|
||||
sym = lookup_symbol ("RemoteGetBasePtr", 0, VAR_NAMESPACE, 0, NULL);
|
||||
if (sym != NULL)
|
||||
{
|
||||
if (SYMBOL_CLASS (sym) != LOC_BLOCK)
|
||||
{
|
||||
error ("\"RemoteGetBasePtr\" exists in this program but is not a function.");
|
||||
}
|
||||
val = value_of_variable (sym, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
msymbol = lookup_minimal_symbol ("RemoteGetBasePtr", "", (struct objfile *) NULL);
|
||||
if (msymbol != NULL)
|
||||
{
|
||||
type = lookup_pointer_type (builtin_type_char);
|
||||
type = lookup_function_type (type);
|
||||
type = lookup_pointer_type (type);
|
||||
maddr = (LONGEST) SYMBOL_VALUE_ADDRESS (msymbol);
|
||||
val = value_from_longest (type, maddr);
|
||||
}
|
||||
else
|
||||
{
|
||||
error ("evaluation of this expression requires the program to have a function \"RemoteGetBasePtr\".");
|
||||
}
|
||||
}
|
||||
|
||||
blocklen = value_from_longest (builtin_type_int, (LONGEST) objectID);
|
||||
val = call_function_by_hand (val, 1, &blocklen);
|
||||
if (value_logical_not (val))
|
||||
{
|
||||
error ("Could not get base pointer to object.");
|
||||
}
|
||||
return value_as_pointer(val);
|
||||
}
|
||||
|
||||
static void
|
||||
dump_extra_data(CORE_ADDR addr, ulong length)
|
||||
{
|
||||
ulong buf[5], chunk, i;
|
||||
char *p;
|
||||
|
||||
while (length > 3) {
|
||||
chunk = (length > 16) ? 16 : length;
|
||||
|
||||
memset(buf, 0, 5*sizeof(long));
|
||||
read_memory(addr, &buf, chunk);
|
||||
fprintf(gdb_stdout, "%08lx %08lx %08lx %08lx | ", buf[0],
|
||||
buf[1], buf[2], buf[3]);
|
||||
for (i = 0, p = (char*)buf; i < chunk; i++, p++) {
|
||||
if (!isprint(*p))
|
||||
*p = '.';
|
||||
}
|
||||
fprintf(gdb_stdout, "%s |\n", buf);
|
||||
addr += chunk;
|
||||
length -= chunk;
|
||||
}
|
||||
}
|
||||
|
||||
struct type *type_of_object(CORE_ADDR object)
|
||||
{
|
||||
char className[32], classAllFieldsName[128];
|
||||
struct type *type = NULL;
|
||||
GetClassName(object, className);
|
||||
sprintf(classAllFieldsName, "%s_AllFields", className);
|
||||
|
||||
type = lookup_typename(classAllFieldsName, (struct block *)NULL, 0);
|
||||
return lookup_pointer_type(type);
|
||||
}
|
||||
|
||||
CORE_ADDR baseptr_of_object(ulong object)
|
||||
{
|
||||
return GetBasePtr(object) + 12;
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
print_object (arg, dump)
|
||||
char *arg;
|
||||
int dump;
|
||||
{
|
||||
CORE_ADDR addr;
|
||||
ulong object, objectLength, typeLength = 0;
|
||||
char className[32], classAllFieldsName[128];
|
||||
struct type* type = NULL;
|
||||
|
||||
object = parse_and_eval_address(arg);
|
||||
|
||||
GetClassName(object, className);
|
||||
sprintf(classAllFieldsName, "%s_AllFields", className);
|
||||
|
||||
type = lookup_typename(classAllFieldsName, (struct block *)NULL, 0);
|
||||
typeLength = TYPE_LENGTH(type);
|
||||
addr = GetBasePtr(object);
|
||||
read_memory(addr, &objectLength, 4);
|
||||
objectLength -= 12;
|
||||
addr += 12;
|
||||
if (TYPE_CODE(type) != TYPE_CODE_UNDEF && !(TYPE_FLAGS(type)&TYPE_FLAG_STUB)) {
|
||||
if (dump) {
|
||||
value_ptr valptr = value_at_lazy(type, addr);
|
||||
int histindex = record_latest_value(valptr);
|
||||
printf_filtered("Object 0x%08lx at address 0x%08lx of class %s\n",
|
||||
object, addr, className);
|
||||
if (histindex >= 0) printf_filtered ("$%d = ", histindex);
|
||||
value_print(valptr, gdb_stdout, 0, Val_prettyprint);
|
||||
objectLength -= typeLength;
|
||||
addr += typeLength;
|
||||
printf_filtered("\n");
|
||||
dump_extra_data(addr, objectLength);
|
||||
printf_filtered("\n");
|
||||
} else {
|
||||
value_ptr valptr = value_from_longest(lookup_pointer_type(type), addr);
|
||||
int histindex = record_latest_value(valptr);
|
||||
if (histindex >= 0) printf_filtered ("$%d = ", histindex);
|
||||
value_print(valptr, gdb_stdout, 0, Val_prettyprint);
|
||||
printf_filtered("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
dobj_command (arg, from_tty)
|
||||
char *arg;
|
||||
int from_tty;
|
||||
{
|
||||
print_object(arg, 1);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
pobj_command (arg, from_tty)
|
||||
char *arg;
|
||||
int from_tty;
|
||||
{
|
||||
print_object(arg, 0);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
getint_command (arg, from_tty)
|
||||
char *arg;
|
||||
int from_tty;
|
||||
{
|
||||
char shellCommand[128];
|
||||
|
||||
sprintf(shellCommand, "getint %s", arg);
|
||||
local_shell_escape(shellCommand);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
getindexical_command (arg, from_tty)
|
||||
char *arg;
|
||||
int from_tty;
|
||||
{
|
||||
char shellCommand[128];
|
||||
|
||||
sprintf(shellCommand, "getindexical %s", arg);
|
||||
local_shell_escape(shellCommand);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
exc_command (arg, from_tty)
|
||||
char *arg;
|
||||
int from_tty;
|
||||
{
|
||||
char shellCommand[128];
|
||||
ulong exception;
|
||||
|
||||
sprintf(shellCommand, "getexc %s", arg);
|
||||
local_shell_escape(shellCommand);
|
||||
}
|
||||
|
||||
static CORE_ADDR dispatch_method_addr = -1, dispatch_inherited_addr = -1, dispatch_delegated_addr = -1, dispatch_intrinsic_addr = -1;
|
||||
CORE_ADDR do_dispatch_method_addr = -1, do_dispatch_intrinsic_addr = -1;
|
||||
|
||||
static CORE_ADDR
|
||||
lookup_address(const char *name)
|
||||
{
|
||||
struct symbol *sym = lookup_symbol(name, NULL, VAR_NAMESPACE, NULL, NULL);
|
||||
if (sym)
|
||||
return BLOCK_START(SYMBOL_BLOCK_VALUE(sym));
|
||||
else
|
||||
{
|
||||
/* printf("Couldn't find %s!\n", name); */
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
init_magic()
|
||||
{
|
||||
dispatch_method_addr = lookup_address("__DispatchMethod");
|
||||
dispatch_inherited_addr = lookup_address("__DispatchInherited");
|
||||
dispatch_delegated_addr = lookup_address("__DispatchDelegated");
|
||||
dispatch_intrinsic_addr = lookup_address("__DispatchIntrinsic");
|
||||
do_dispatch_method_addr = lookup_address("__DoTheDispatch");
|
||||
do_dispatch_intrinsic_addr = lookup_address("__DoDispatchIntrinsic");
|
||||
}
|
||||
|
||||
int
|
||||
is_dispatch(CORE_ADDR pc)
|
||||
{
|
||||
return (pc == dispatch_method_addr) || (pc == dispatch_inherited_addr) || (pc == dispatch_delegated_addr);
|
||||
}
|
||||
|
||||
int
|
||||
is_dispatch_intrinsic(CORE_ADDR pc)
|
||||
{
|
||||
return pc == dispatch_intrinsic_addr;
|
||||
}
|
||||
|
||||
/* If we are stopped at one of the entry points to the dispatcher, we want to continue until just
|
||||
before we jump to the implementation. If we are at that point, we want to continue until we
|
||||
actually get to the implementation. Likewise for the intrinsic dispatcher
|
||||
*/
|
||||
CORE_ADDR
|
||||
deal_with_dispatch(CORE_ADDR stop_pc)
|
||||
{
|
||||
if (is_dispatch(stop_pc))
|
||||
return do_dispatch_method_addr;
|
||||
else if (is_dispatch_intrinsic(stop_pc))
|
||||
return do_dispatch_intrinsic_addr;
|
||||
else if (stop_pc == do_dispatch_method_addr)
|
||||
/* This assumes that we branch through t6 */
|
||||
return read_register(14);
|
||||
else if (stop_pc == do_dispatch_intrinsic_addr)
|
||||
/* This assumes that we branch through t0 */
|
||||
return read_register(8);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
magic_create_inferior_hook()
|
||||
{
|
||||
struct symbol *sym = lookup_symbol("gHandleError", NULL, VAR_NAMESPACE, NULL, NULL);
|
||||
if (sym)
|
||||
{
|
||||
CORE_ADDR addr = SYMBOL_VALUE(sym);
|
||||
unsigned long errorDebugger = 2;
|
||||
target_write_memory(addr, &errorDebugger, 4);
|
||||
}
|
||||
|
||||
init_magic ();
|
||||
}
|
||||
|
||||
|
||||
_initialize_magic ()
|
||||
{
|
||||
add_com ("dobj", class_support, dobj_command, "Display Object Contents");
|
||||
add_com ("pobj", class_support, pobj_command, "Print object base pointer");
|
||||
add_com ("getint", class_support, getint_command, "Convert intrinsic name to number or vice versa.");
|
||||
add_com ("getindexical", class_support, getindexical_command, "Convert indexical name to number or vice versa.");
|
||||
add_com ("exc", class_support, exc_command, "Convert exception name to number or vice versa.");
|
||||
|
||||
#ifdef DYNAMIC_COMMAND_SUPPORT
|
||||
add_com ("dlopen", class_support, dlopen_command,
|
||||
"Load the dynamic library specified and execute the specified symbol");
|
||||
#endif
|
||||
}
|
6
gdb/magic.h
Normal file
6
gdb/magic.h
Normal file
|
@ -0,0 +1,6 @@
|
|||
/* magic.h - Interface to the General Magic debugger extras */
|
||||
|
||||
extern void init_magic();
|
||||
extern CORE_ADDR deal_with_dispatch(CORE_ADDR pc);
|
||||
extern struct type *type_of_object(CORE_ADDR object);
|
||||
extern CORE_ADDR baseptr_of_object(CORE_ADDR object);
|
|
@ -599,6 +599,11 @@ length_of_subexp (expr, endpos)
|
|||
case OP_LABELED:
|
||||
case STRUCTOP_STRUCT:
|
||||
case STRUCTOP_PTR:
|
||||
/* start-sanitize-gm */
|
||||
#ifdef GENERAL_MAGIC_HACKS
|
||||
case STRUCTOP_FIELD:
|
||||
#endif /* GENERAL_MAGIC_HACKS */
|
||||
/* end-sanitize-gm */
|
||||
args = 1;
|
||||
/* fall through */
|
||||
case OP_M2_STRING:
|
||||
|
|
|
@ -61,8 +61,9 @@ static void mips_send_packet PARAMS ((const char *s, int get_ack));
|
|||
static int mips_receive_packet PARAMS ((char *buff, int throw_error,
|
||||
int timeout));
|
||||
|
||||
static int mips_request PARAMS ((char cmd, unsigned int addr,
|
||||
unsigned int data, int *perr, int timeout));
|
||||
static int mips_request PARAMS ((int cmd, unsigned int addr,
|
||||
unsigned int data, int *perr, int timeout,
|
||||
char *buff));
|
||||
|
||||
static void mips_initialize PARAMS ((void));
|
||||
|
||||
|
@ -102,9 +103,11 @@ static void mips_mourn_inferior PARAMS ((void));
|
|||
|
||||
static void mips_load PARAMS ((char *file, int from_tty));
|
||||
|
||||
static int mips_make_srec PARAMS ((char *buffer, char type, CORE_ADDR memaddr,
|
||||
static int mips_make_srec PARAMS ((char *buffer, int type, CORE_ADDR memaddr,
|
||||
unsigned char *myaddr, int len));
|
||||
|
||||
static int common_breakpoint PARAMS ((int cmd, CORE_ADDR addr, CORE_ADDR mask,
|
||||
char *flags));
|
||||
/* A forward declaration. */
|
||||
extern struct target_ops mips_ops;
|
||||
|
||||
|
@ -274,6 +277,23 @@ static int mips_need_reply = 0;
|
|||
/* Handle used to access serial I/O stream. */
|
||||
static serial_t mips_desc;
|
||||
|
||||
/* Counts the number of times the user tried to interrupt the target (usually
|
||||
via ^C. */
|
||||
static int interrupt_count;
|
||||
|
||||
/* If non-zero, means that the target is running. */
|
||||
static int mips_wait_flag = 0;
|
||||
|
||||
/* If non-zero, monitor supports breakpoint commands. */
|
||||
static monitor_supports_breakpoints = 0;
|
||||
|
||||
/* Data cache header. */
|
||||
|
||||
static DCACHE *mips_dcache;
|
||||
|
||||
/* Non-zero means that we've just hit a read or write watchpoint */
|
||||
static int hit_watchpoint;
|
||||
|
||||
/* Handle low-level error that we can't recover from. Note that just
|
||||
error()ing out from target_wait or some such low-level place will cause
|
||||
all hell to break loose--the rest of GDB will tend to get left in an
|
||||
|
@ -305,6 +325,7 @@ mips_error (va_alist)
|
|||
vfprintf_filtered (gdb_stderr, string, args);
|
||||
fprintf_filtered (gdb_stderr, "\n");
|
||||
va_end (args);
|
||||
gdb_flush (gdb_stderr);
|
||||
|
||||
/* Clean up in such a way that mips_close won't try to talk to the
|
||||
board (it almost surely won't work since we weren't able to talk to
|
||||
|
@ -318,6 +339,9 @@ mips_error (va_alist)
|
|||
return_to_top_level (RETURN_ERROR);
|
||||
}
|
||||
|
||||
/* Wait until STRING shows up in mips_desc. Returns 1 if successful, else 0 if
|
||||
timed out. */
|
||||
|
||||
int
|
||||
mips_expect (string)
|
||||
char *string;
|
||||
|
@ -398,7 +422,7 @@ mips_readchar (timeout)
|
|||
mips_error ("End of file from remote");
|
||||
if (ch == SERIAL_ERROR)
|
||||
mips_error ("Error reading from remote: %s", safe_strerror (errno));
|
||||
if (sr_get_debug () > 1)
|
||||
if (remote_debug > 1)
|
||||
{
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
target_wait, and I think this might be called from there. */
|
||||
|
@ -417,12 +441,10 @@ mips_readchar (timeout)
|
|||
&& state == (sizeof(nextstate) / sizeof(char))
|
||||
&& ! mips_initializing)
|
||||
{
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
target_wait, and I think this might be called from there. */
|
||||
printf_unfiltered ("Reinitializing MIPS debugging mode\n");
|
||||
SERIAL_WRITE (mips_desc, "\015db tty0\015", sizeof "\015db tty0\015" - 1);
|
||||
sleep (1);
|
||||
|
||||
mips_need_reply = 0;
|
||||
mips_initialize ();
|
||||
|
@ -474,7 +496,7 @@ mips_receive_header (hdr, pgarbage, ch, timeout)
|
|||
what the program is outputting, if the debugging is
|
||||
being done on the console port. Don't use _filtered;
|
||||
we can't deal with a QUIT out of target_wait. */
|
||||
if (! mips_initializing || sr_get_debug () > 0)
|
||||
if (! mips_initializing || remote_debug > 0)
|
||||
{
|
||||
if (ch < 0x20 && ch != '\n')
|
||||
{
|
||||
|
@ -488,7 +510,8 @@ mips_receive_header (hdr, pgarbage, ch, timeout)
|
|||
|
||||
++*pgarbage;
|
||||
if (*pgarbage > mips_syn_garbage)
|
||||
mips_error ("Remote debugging protocol failure");
|
||||
mips_error ("Debug protocol failure: more than %d characters before a sync.",
|
||||
mips_syn_garbage);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -612,7 +635,7 @@ mips_send_packet (s, get_ack)
|
|||
int garbage;
|
||||
int ch;
|
||||
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
{
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
target_wait, and I think this might be called from there. */
|
||||
|
@ -673,7 +696,7 @@ mips_send_packet (s, get_ack)
|
|||
!= TRLR_GET_CKSUM (trlr))
|
||||
continue;
|
||||
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
{
|
||||
hdr[HDR_LENGTH] = '\0';
|
||||
trlr[TRLR_LENGTH] = '\0';
|
||||
|
@ -746,7 +769,7 @@ mips_receive_packet (buff, throw_error, timeout)
|
|||
{
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
target_wait, and I think this might be called from there. */
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
printf_unfiltered ("Ignoring unexpected ACK\n");
|
||||
continue;
|
||||
}
|
||||
|
@ -756,7 +779,7 @@ mips_receive_packet (buff, throw_error, timeout)
|
|||
{
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
target_wait, and I think this might be called from there. */
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
printf_unfiltered ("Ignoring sequence number %d (want %d)\n",
|
||||
HDR_GET_SEQ (hdr), mips_receive_seq);
|
||||
continue;
|
||||
|
@ -788,7 +811,7 @@ mips_receive_packet (buff, throw_error, timeout)
|
|||
{
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
target_wait, and I think this might be called from there. */
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
printf_unfiltered ("Got new SYN after %d chars (wanted %d)\n",
|
||||
i, len);
|
||||
continue;
|
||||
|
@ -806,7 +829,7 @@ mips_receive_packet (buff, throw_error, timeout)
|
|||
{
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
target_wait, and I think this might be called from there. */
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
printf_unfiltered ("Got SYN when wanted trailer\n");
|
||||
continue;
|
||||
}
|
||||
|
@ -814,7 +837,7 @@ mips_receive_packet (buff, throw_error, timeout)
|
|||
if (mips_cksum (hdr, buff, len) == TRLR_GET_CKSUM (trlr))
|
||||
break;
|
||||
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
target_wait, and I think this might be called from there. */
|
||||
printf_unfiltered ("Bad checksum; data %d, trailer %d\n",
|
||||
|
@ -834,7 +857,7 @@ mips_receive_packet (buff, throw_error, timeout)
|
|||
ack[HDR_LENGTH + TRLR_INDX_CSUM2] = TRLR_SET_CSUM2 (cksum);
|
||||
ack[HDR_LENGTH + TRLR_INDX_CSUM3] = TRLR_SET_CSUM3 (cksum);
|
||||
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
{
|
||||
ack[HDR_LENGTH + TRLR_LENGTH] = '\0';
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
|
@ -852,7 +875,7 @@ mips_receive_packet (buff, throw_error, timeout)
|
|||
}
|
||||
}
|
||||
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
{
|
||||
buff[len] = '\0';
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
|
@ -874,7 +897,7 @@ mips_receive_packet (buff, throw_error, timeout)
|
|||
ack[HDR_LENGTH + TRLR_INDX_CSUM2] = TRLR_SET_CSUM2 (cksum);
|
||||
ack[HDR_LENGTH + TRLR_INDX_CSUM3] = TRLR_SET_CSUM3 (cksum);
|
||||
|
||||
if (sr_get_debug () > 0)
|
||||
if (remote_debug > 0)
|
||||
{
|
||||
ack[HDR_LENGTH + TRLR_LENGTH] = '\0';
|
||||
/* Don't use _filtered; we can't deal with a QUIT out of
|
||||
|
@ -920,20 +943,24 @@ mips_receive_packet (buff, throw_error, timeout)
|
|||
target board reports. */
|
||||
|
||||
static int
|
||||
mips_request (cmd, addr, data, perr, timeout)
|
||||
char cmd;
|
||||
mips_request (cmd, addr, data, perr, timeout, buff)
|
||||
int cmd;
|
||||
unsigned int addr;
|
||||
unsigned int data;
|
||||
int *perr;
|
||||
int timeout;
|
||||
char *buff;
|
||||
{
|
||||
char buff[DATA_MAXLEN + 1];
|
||||
char myBuff[DATA_MAXLEN + 1];
|
||||
int len;
|
||||
int rpid;
|
||||
char rcmd;
|
||||
int rerrflg;
|
||||
int rresponse;
|
||||
|
||||
if (buff == (char *) NULL)
|
||||
buff = myBuff;
|
||||
|
||||
if (cmd != '\0')
|
||||
{
|
||||
if (mips_need_reply)
|
||||
|
@ -989,7 +1016,7 @@ mips_initialize_cleanups (arg)
|
|||
static void
|
||||
mips_initialize ()
|
||||
{
|
||||
char cr;
|
||||
char cr, cc;
|
||||
char buff[DATA_MAXLEN + 1];
|
||||
int err;
|
||||
struct cleanup *old_cleanups = make_cleanup (mips_initialize_cleanups, NULL);
|
||||
|
@ -1003,6 +1030,7 @@ mips_initialize ()
|
|||
return;
|
||||
}
|
||||
|
||||
mips_wait_flag = 0;
|
||||
mips_initializing = 1;
|
||||
|
||||
mips_send_seq = 0;
|
||||
|
@ -1011,47 +1039,72 @@ mips_initialize ()
|
|||
if (mips_receive_packet (buff, 0, 3) < 0)
|
||||
{
|
||||
char cc;
|
||||
int i;
|
||||
int i, j;
|
||||
char srec[10];
|
||||
|
||||
/* We did not receive the packet we expected; try resetting the
|
||||
board and trying again. */
|
||||
|
||||
/* We are possibly in binary download mode, having aborted in the middle
|
||||
of an S-record. ^C won't work because of binary mode. The only
|
||||
reliable way out is to send enough termination packets (8 bytes) to
|
||||
fill up and then overflow the largest size S-record (255 bytes in this
|
||||
case). This amounts to 256/8 + 1. */
|
||||
/* Force the system into the IDT monitor. After this we *should* be at
|
||||
the <IDT> prompt. */
|
||||
|
||||
mips_make_srec (srec, '7', 0, NULL, 0);
|
||||
|
||||
for (i = 1; i <= 33; i++)
|
||||
for (j = 1; j <= 4; j++)
|
||||
{
|
||||
SERIAL_WRITE (mips_desc, srec, 8);
|
||||
switch (j)
|
||||
{
|
||||
case 1: /* First, try sending a break */
|
||||
SERIAL_SEND_BREAK (mips_desc);
|
||||
break;
|
||||
case 2: /* Then, try a ^C */
|
||||
SERIAL_WRITE (mips_desc, "\003", 1); /* Send a ^C to wake up the monitor */
|
||||
break;
|
||||
case 3: /* Then, try escaping from download */
|
||||
/* We are possibly in binary download mode, having aborted in the middle
|
||||
of an S-record. ^C won't work because of binary mode. The only
|
||||
reliable way out is to send enough termination packets (8 bytes) to
|
||||
fill up and then overflow the largest size S-record (255 bytes in this
|
||||
case). This amounts to 256/8 + 1 packets. */
|
||||
|
||||
if (SERIAL_READCHAR (mips_desc, 0) >= 0)
|
||||
break; /* Break immediatly if we get something from
|
||||
mips_make_srec (srec, '7', 0, NULL, 0);
|
||||
|
||||
for (i = 1; i <= 33; i++)
|
||||
{
|
||||
SERIAL_WRITE (mips_desc, srec, 8);
|
||||
|
||||
if (SERIAL_READCHAR (mips_desc, 0) >= 0)
|
||||
break; /* Break immediatly if we get something from
|
||||
the board. */
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
mips_error ("Failed to initialize.");
|
||||
}
|
||||
if (mips_expect ("\015\012<IDT>"))
|
||||
break;
|
||||
}
|
||||
|
||||
printf_filtered ("Failed to initialize; trying to reset board\n");
|
||||
cc = '\003';
|
||||
SERIAL_WRITE (mips_desc, &cc, 1);
|
||||
sleep (2);
|
||||
SERIAL_WRITE (mips_desc, "\015db tty0\015", sizeof "\015db tty0\015" - 1);
|
||||
sleep (1);
|
||||
cr = '\015';
|
||||
SERIAL_WRITE (mips_desc, &cr, 1);
|
||||
SERIAL_WRITE (mips_desc, "db tty0\015", sizeof "db tty0\015" - 1);
|
||||
mips_expect ("db tty0\015\012"); /* Eat the echo */
|
||||
|
||||
mips_receive_packet (buff, 1, 3);
|
||||
SERIAL_WRITE (mips_desc, "\015", sizeof "\015" - 1);
|
||||
|
||||
if (mips_receive_packet (buff, 1, 3) < 0)
|
||||
mips_error ("Failed to initialize (didn't receive packet).");
|
||||
}
|
||||
|
||||
if (common_breakpoint ('b', -1, 0, NULL)) /* Clear all breakpoints */
|
||||
monitor_supports_breakpoints = 0; /* Failed, don't use it anymore */
|
||||
else
|
||||
monitor_supports_breakpoints = 1;
|
||||
|
||||
do_cleanups (old_cleanups);
|
||||
|
||||
/* If this doesn't call error, we have connected; we don't care if
|
||||
the request itself succeeds or fails. */
|
||||
mips_request ('r', (unsigned int) 0, (unsigned int) 0, &err,
|
||||
mips_receive_wait);
|
||||
mips_receive_wait, NULL);
|
||||
set_current_frame (create_new_frame (read_fp (), read_pc ()));
|
||||
select_frame (get_current_frame (), 0);
|
||||
}
|
||||
|
||||
/* Open a connection to the remote board. */
|
||||
|
@ -1132,7 +1185,7 @@ mips_close (quitting)
|
|||
|
||||
/* Get the board out of remote debugging mode. */
|
||||
mips_request ('x', (unsigned int) 0, (unsigned int) 0, &err,
|
||||
mips_receive_wait);
|
||||
mips_receive_wait, NULL);
|
||||
|
||||
SERIAL_CLOSE (mips_desc);
|
||||
}
|
||||
|
@ -1149,6 +1202,9 @@ mips_detach (args, from_tty)
|
|||
error ("Argument given to \"detach\" when remotely debugging.");
|
||||
|
||||
pop_target ();
|
||||
|
||||
mips_close (1);
|
||||
|
||||
if (from_tty)
|
||||
printf_unfiltered ("Ending remote MIPS debugging.\n");
|
||||
}
|
||||
|
@ -1161,16 +1217,21 @@ mips_resume (pid, step, siggnal)
|
|||
int pid, step;
|
||||
enum target_signal siggnal;
|
||||
{
|
||||
|
||||
/* start-sanitize-gm */
|
||||
#ifndef GENERAL_MAGIC_HACKS
|
||||
if (siggnal != TARGET_SIGNAL_0)
|
||||
warning
|
||||
("Can't send signals to a remote system. Try `handle %s ignore'.",
|
||||
target_signal_to_name (siggnal));
|
||||
#endif /* GENERAL_MAGIC_HACKS */
|
||||
/* end-sanitize-gm */
|
||||
|
||||
mips_request (step ? 's' : 'c',
|
||||
(unsigned int) 1,
|
||||
(unsigned int) 0,
|
||||
(unsigned int) siggnal,
|
||||
(int *) NULL,
|
||||
mips_receive_wait);
|
||||
mips_receive_wait, NULL);
|
||||
}
|
||||
|
||||
/* Return the signal corresponding to SIG, where SIG is the number which
|
||||
|
@ -1202,6 +1263,13 @@ mips_wait (pid, status)
|
|||
{
|
||||
int rstatus;
|
||||
int err;
|
||||
char buff[DATA_MAXLEN];
|
||||
int rpc, rfp, rsp;
|
||||
char flags[20];
|
||||
int nfields;
|
||||
|
||||
interrupt_count = 0;
|
||||
hit_watchpoint = 0;
|
||||
|
||||
/* If we have not sent a single step or continue command, then the
|
||||
board is waiting for us to do something. Return a status
|
||||
|
@ -1214,10 +1282,46 @@ mips_wait (pid, status)
|
|||
}
|
||||
|
||||
/* No timeout; we sit here as long as the program continues to execute. */
|
||||
rstatus = mips_request ('\0', (unsigned int) 0, (unsigned int) 0, &err, -1);
|
||||
mips_wait_flag = 1;
|
||||
rstatus = mips_request ('\000', (unsigned int) 0, (unsigned int) 0, &err, -1,
|
||||
buff);
|
||||
mips_wait_flag = 0;
|
||||
if (err)
|
||||
mips_error ("Remote failure: %s", safe_strerror (errno));
|
||||
|
||||
nfields = sscanf (buff, "0x%*x %*c 0x%*x 0x%*x 0x%x 0x%x 0x%x 0x%*x %s",
|
||||
&rpc, &rfp, &rsp, flags);
|
||||
|
||||
/* See if we got back extended status. If so, pick out the pc, fp, sp, etc... */
|
||||
|
||||
if (nfields == 7 || nfields == 9)
|
||||
{
|
||||
char buf[MAX_REGISTER_RAW_SIZE];
|
||||
|
||||
store_unsigned_integer (buf, REGISTER_RAW_SIZE (PC_REGNUM), rpc);
|
||||
supply_register (PC_REGNUM, buf);
|
||||
|
||||
store_unsigned_integer (buf, REGISTER_RAW_SIZE (PC_REGNUM), rfp);
|
||||
supply_register (30, buf); /* This register they are avoiding and so it is unnamed */
|
||||
|
||||
store_unsigned_integer (buf, REGISTER_RAW_SIZE (SP_REGNUM), rsp);
|
||||
supply_register (SP_REGNUM, buf);
|
||||
|
||||
store_unsigned_integer (buf, REGISTER_RAW_SIZE (FP_REGNUM), 0);
|
||||
supply_register (FP_REGNUM, buf);
|
||||
|
||||
if (nfields == 9)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i <= 2; i++)
|
||||
if (flags[i] == 'r' || flags[i] == 'w')
|
||||
hit_watchpoint = 1;
|
||||
else if (flags[i] == '\000')
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Translate a MIPS waitstatus. We use constants here rather than WTERMSIG
|
||||
and so on, because the constants we want here are determined by the
|
||||
MIPS protocol and have nothing to do with what host we are running on. */
|
||||
|
@ -1297,7 +1401,7 @@ mips_fetch_registers (regno)
|
|||
else
|
||||
{
|
||||
val = mips_request ('r', (unsigned int) mips_map_regno (regno),
|
||||
(unsigned int) 0, &err, mips_receive_wait);
|
||||
(unsigned int) 0, &err, mips_receive_wait, NULL);
|
||||
if (err)
|
||||
mips_error ("Can't read register %d: %s", regno,
|
||||
safe_strerror (errno));
|
||||
|
@ -1338,7 +1442,7 @@ mips_store_registers (regno)
|
|||
|
||||
mips_request ('R', (unsigned int) mips_map_regno (regno),
|
||||
(unsigned int) read_register (regno),
|
||||
&err, mips_receive_wait);
|
||||
&err, mips_receive_wait, NULL);
|
||||
if (err)
|
||||
mips_error ("Can't write register %d: %s", regno, safe_strerror (errno));
|
||||
}
|
||||
|
@ -1353,12 +1457,12 @@ mips_fetch_word (addr)
|
|||
int err;
|
||||
|
||||
val = mips_request ('d', (unsigned int) addr, (unsigned int) 0, &err,
|
||||
mips_receive_wait);
|
||||
mips_receive_wait, NULL);
|
||||
if (err)
|
||||
{
|
||||
/* Data space failed; try instruction space. */
|
||||
val = mips_request ('i', (unsigned int) addr, (unsigned int) 0, &err,
|
||||
mips_receive_wait);
|
||||
mips_receive_wait, NULL);
|
||||
if (err)
|
||||
mips_error ("Can't read address 0x%x: %s", addr, safe_strerror (errno));
|
||||
}
|
||||
|
@ -1380,13 +1484,13 @@ mips_store_word (addr, val, old_contents)
|
|||
|
||||
oldcontents = mips_request ('D', (unsigned int) addr, (unsigned int) val,
|
||||
&err,
|
||||
mips_receive_wait);
|
||||
mips_receive_wait, NULL);
|
||||
if (err)
|
||||
{
|
||||
/* Data space failed; try instruction space. */
|
||||
oldcontents = mips_request ('I', (unsigned int) addr,
|
||||
(unsigned int) val, &err,
|
||||
mips_receive_wait);
|
||||
mips_receive_wait, NULL);
|
||||
if (err)
|
||||
return errno;
|
||||
}
|
||||
|
@ -1496,6 +1600,41 @@ mips_files_info (ignore)
|
|||
static void
|
||||
mips_kill ()
|
||||
{
|
||||
if (!mips_wait_flag)
|
||||
return;
|
||||
|
||||
interrupt_count++;
|
||||
|
||||
if (interrupt_count >= 2)
|
||||
{
|
||||
interrupt_count = 0;
|
||||
|
||||
target_terminal_ours ();
|
||||
|
||||
if (query ("Interrupted while waiting for the program.\n\
|
||||
Give up (and stop debugging it)? "))
|
||||
{
|
||||
/* Clean up in such a way that mips_close won't try to talk to the
|
||||
board (it almost surely won't work since we weren't able to talk to
|
||||
it). */
|
||||
mips_wait_flag = 0;
|
||||
mips_is_open = 0;
|
||||
SERIAL_CLOSE (mips_desc);
|
||||
|
||||
printf_unfiltered ("Ending remote MIPS debugging.\n");
|
||||
target_mourn_inferior ();
|
||||
|
||||
return_to_top_level (RETURN_QUIT);
|
||||
}
|
||||
|
||||
target_terminal_inferior ();
|
||||
}
|
||||
|
||||
if (remote_debug > 0)
|
||||
printf_unfiltered ("Sending break\n");
|
||||
|
||||
SERIAL_SEND_BREAK (mips_desc);
|
||||
|
||||
#if 0
|
||||
if (mips_is_open)
|
||||
{
|
||||
|
@ -1537,7 +1676,16 @@ Can't pass arguments to remote MIPS board; arguments ignored.");
|
|||
|
||||
/* FIXME: Should we set inferior_pid here? */
|
||||
|
||||
/* start-sanitize-gm */
|
||||
#ifdef GENERAL_MAGIC_HACKS
|
||||
magic_create_inferior_hook ();
|
||||
proceed (entry_pt, TARGET_SIGNAL_PWR, 0);
|
||||
#else
|
||||
/* end-sanitize-gm */
|
||||
proceed (entry_pt, TARGET_SIGNAL_DEFAULT, 0);
|
||||
/* start-sanitize-gm */
|
||||
#endif
|
||||
/* end-sanitize-gm */
|
||||
}
|
||||
|
||||
/* Clean up after a process. Actually nothing to do. */
|
||||
|
@ -1573,6 +1721,9 @@ mips_insert_breakpoint (addr, contents_cache)
|
|||
{
|
||||
int status;
|
||||
|
||||
if (monitor_supports_breakpoints)
|
||||
return common_breakpoint ('B', addr, 0x3, "f");
|
||||
|
||||
return mips_store_word (addr, BREAK_INSN, contents_cache);
|
||||
}
|
||||
|
||||
|
@ -1581,9 +1732,146 @@ mips_remove_breakpoint (addr, contents_cache)
|
|||
CORE_ADDR addr;
|
||||
char *contents_cache;
|
||||
{
|
||||
if (monitor_supports_breakpoints)
|
||||
return common_breakpoint ('b', addr, 0, NULL);
|
||||
|
||||
return target_write_memory (addr, contents_cache, BREAK_INSN_SIZE);
|
||||
}
|
||||
|
||||
/* Compute a don't care mask for the region bounding ADDR and ADDR + LEN - 1.
|
||||
This is used for memory ref breakpoints. */
|
||||
|
||||
static unsigned long
|
||||
calculate_mask (addr, len)
|
||||
CORE_ADDR addr;
|
||||
int len;
|
||||
{
|
||||
unsigned long mask;
|
||||
int i;
|
||||
|
||||
mask = addr ^ (addr + len - 1);
|
||||
|
||||
for (i = 32; i >= 0; i--)
|
||||
if (mask == 0)
|
||||
break;
|
||||
else
|
||||
mask >>= 1;
|
||||
|
||||
mask = (unsigned long) 0xffffffff >> i;
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
/* Set a data watchpoint. ADDR and LEN should be obvious. TYPE is either 1
|
||||
for a read watchpoint, or 2 for a read/write watchpoint. */
|
||||
|
||||
int
|
||||
remote_mips_set_watchpoint (addr, len, type)
|
||||
CORE_ADDR addr;
|
||||
int len;
|
||||
int type;
|
||||
{
|
||||
CORE_ADDR first_addr;
|
||||
unsigned long mask;
|
||||
char *flags;
|
||||
|
||||
mask = calculate_mask (addr, len);
|
||||
|
||||
first_addr = addr & ~mask;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case 0: /* write */
|
||||
flags = "w";
|
||||
break;
|
||||
case 1: /* read */
|
||||
flags = "r";
|
||||
break;
|
||||
case 2: /* read/write */
|
||||
flags = "rw";
|
||||
break;
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
|
||||
if (common_breakpoint ('B', first_addr, mask, flags))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
remote_mips_remove_watchpoint (addr, len, type)
|
||||
CORE_ADDR addr;
|
||||
int len;
|
||||
int type;
|
||||
{
|
||||
CORE_ADDR first_addr;
|
||||
unsigned long mask;
|
||||
|
||||
mask = calculate_mask (addr, len);
|
||||
|
||||
first_addr = addr & ~mask;
|
||||
|
||||
if (common_breakpoint ('b', first_addr, 0, NULL))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
remote_mips_stopped_by_watchpoint ()
|
||||
{
|
||||
return hit_watchpoint;
|
||||
}
|
||||
|
||||
/* This routine generates the a breakpoint command of the form:
|
||||
|
||||
0x0 <CMD> <ADDR> <MASK> <FLAGS>
|
||||
|
||||
Where <CMD> is one of: `B' to set, or `b' to clear a breakpoint. <ADDR> is
|
||||
the address of the breakpoint. <MASK> is a don't care mask for addresses.
|
||||
<FLAGS> is any combination of `r', `w', or `f' for read/write/or fetch. */
|
||||
|
||||
static int
|
||||
common_breakpoint (cmd, addr, mask, flags)
|
||||
int cmd;
|
||||
CORE_ADDR addr;
|
||||
CORE_ADDR mask;
|
||||
char *flags;
|
||||
{
|
||||
int len;
|
||||
char buf[DATA_MAXLEN + 1];
|
||||
char rcmd;
|
||||
int rpid, rerrflg, rresponse;
|
||||
int nfields;
|
||||
|
||||
if (flags)
|
||||
sprintf (buf, "0x0 %c 0x%x 0x%x %s", cmd, addr, mask, flags);
|
||||
else
|
||||
sprintf (buf, "0x0 %c 0x%x", cmd, addr);
|
||||
|
||||
mips_send_packet (buf, 1);
|
||||
|
||||
len = mips_receive_packet (buf, 1, mips_receive_wait);
|
||||
|
||||
nfields = sscanf (buf, "0x%x %c 0x%x 0x%x", &rpid, &rcmd, &rerrflg, &rresponse);
|
||||
|
||||
if (nfields != 4
|
||||
|| rcmd != cmd)
|
||||
mips_error ("common_breakpoint: Bad response from remote board: %s", buf);
|
||||
|
||||
if (rerrflg != 0)
|
||||
{
|
||||
if (rerrflg != EINVAL)
|
||||
fprintf_unfiltered (stderr, "common_breakpoint (0x%x): Got error: 0x%x\n",
|
||||
addr, rresponse);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
send_srec (srec, len, addr)
|
||||
char *srec;
|
||||
|
@ -1740,7 +2028,7 @@ mips_load_srec (args)
|
|||
static int
|
||||
mips_make_srec (buf, type, memaddr, myaddr, len)
|
||||
char *buf;
|
||||
char type;
|
||||
int type;
|
||||
CORE_ADDR memaddr;
|
||||
unsigned char *myaddr;
|
||||
int len;
|
||||
|
@ -1782,14 +2070,13 @@ mips_load (file, from_tty)
|
|||
int from_tty;
|
||||
{
|
||||
int err;
|
||||
static char prompt[] = TARGET_MONITOR_PROMPT;
|
||||
|
||||
/* Get the board out of remote debugging mode. */
|
||||
|
||||
mips_request ('x', (unsigned int) 0, (unsigned int) 0, &err,
|
||||
mips_receive_wait);
|
||||
mips_receive_wait, NULL);
|
||||
|
||||
if (!mips_expect ("\015\012") || !mips_expect (prompt))
|
||||
if (!mips_expect ("\015\012") || !mips_expect (TARGET_MONITOR_PROMPT))
|
||||
error ("mips_load: Couldn't get into monitor mode.");
|
||||
|
||||
mips_load_srec (file);
|
||||
|
|
12
gdb/top.c
12
gdb/top.c
|
@ -3033,6 +3033,15 @@ echo_command (text, from_tty)
|
|||
gdb_flush (gdb_stdout);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
dont_repeat_command (ignored, from_tty)
|
||||
char *ignored;
|
||||
int from_tty;
|
||||
{
|
||||
*line = 0; /* Can't call dont_repeat here because we're not
|
||||
necessarily reading from stdin. */
|
||||
}
|
||||
|
||||
#ifdef TARGET_BYTE_ORDER_SELECTABLE
|
||||
|
||||
|
@ -3467,6 +3476,9 @@ when gdb is started.", &cmdlist);
|
|||
add_com_alias ("q", "quit", class_support, 1);
|
||||
add_com_alias ("h", "help", class_support, 1);
|
||||
|
||||
add_com ("dont-repeat", class_support, dont_repeat_command, "Don't repeat this command.\n\
|
||||
Primarily used inside of user-defined commands that should not be repeated when\n\
|
||||
hitting return.");
|
||||
|
||||
c = add_set_cmd ("verbose", class_support, var_boolean, (char *)&info_verbose,
|
||||
"Set ",
|
||||
|
|
30
gdb/utils.c
30
gdb/utils.c
|
@ -602,6 +602,12 @@ request_quit (signo)
|
|||
about USG defines and stuff like that. */
|
||||
signal (signo, request_quit);
|
||||
|
||||
/* start-sanitize-gm */
|
||||
#ifdef GENERAL_MAGIC_HACKS
|
||||
target_kill ();
|
||||
#endif /* GENERAL_MAGIC_HACKS */
|
||||
/* end-sanitize-gm */
|
||||
|
||||
#ifdef REQUEST_QUIT
|
||||
REQUEST_QUIT;
|
||||
#else
|
||||
|
@ -1508,7 +1514,7 @@ vfprintf_maybe_filtered (stream, format, args, filter)
|
|||
void
|
||||
vfprintf_filtered (stream, format, args)
|
||||
FILE *stream;
|
||||
char *format;
|
||||
const char *format;
|
||||
va_list args;
|
||||
{
|
||||
vfprintf_maybe_filtered (stream, format, args, 1);
|
||||
|
@ -1517,7 +1523,7 @@ vfprintf_filtered (stream, format, args)
|
|||
void
|
||||
vfprintf_unfiltered (stream, format, args)
|
||||
FILE *stream;
|
||||
char *format;
|
||||
const char *format;
|
||||
va_list args;
|
||||
{
|
||||
char *linebuffer;
|
||||
|
@ -1536,7 +1542,7 @@ vfprintf_unfiltered (stream, format, args)
|
|||
|
||||
void
|
||||
vprintf_filtered (format, args)
|
||||
char *format;
|
||||
const char *format;
|
||||
va_list args;
|
||||
{
|
||||
vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
|
||||
|
@ -1544,7 +1550,7 @@ vprintf_filtered (format, args)
|
|||
|
||||
void
|
||||
vprintf_unfiltered (format, args)
|
||||
char *format;
|
||||
const char *format;
|
||||
va_list args;
|
||||
{
|
||||
vfprintf_unfiltered (gdb_stdout, format, args);
|
||||
|
@ -1553,7 +1559,7 @@ vprintf_unfiltered (format, args)
|
|||
/* VARARGS */
|
||||
void
|
||||
#ifdef ANSI_PROTOTYPES
|
||||
fprintf_filtered (FILE *stream, char *format, ...)
|
||||
fprintf_filtered (FILE *stream, const char *format, ...)
|
||||
#else
|
||||
fprintf_filtered (va_alist)
|
||||
va_dcl
|
||||
|
@ -1577,7 +1583,7 @@ fprintf_filtered (va_alist)
|
|||
/* VARARGS */
|
||||
void
|
||||
#ifdef ANSI_PROTOTYPES
|
||||
fprintf_unfiltered (FILE *stream, char *format, ...)
|
||||
fprintf_unfiltered (FILE *stream, const char *format, ...)
|
||||
#else
|
||||
fprintf_unfiltered (va_alist)
|
||||
va_dcl
|
||||
|
@ -1604,7 +1610,7 @@ fprintf_unfiltered (va_alist)
|
|||
/* VARARGS */
|
||||
void
|
||||
#ifdef ANSI_PROTOTYPES
|
||||
fprintfi_filtered (int spaces, FILE *stream, char *format, ...)
|
||||
fprintfi_filtered (int spaces, FILE *stream, const char *format, ...)
|
||||
#else
|
||||
fprintfi_filtered (va_alist)
|
||||
va_dcl
|
||||
|
@ -1633,7 +1639,7 @@ fprintfi_filtered (va_alist)
|
|||
/* VARARGS */
|
||||
void
|
||||
#ifdef ANSI_PROTOTYPES
|
||||
printf_filtered (char *format, ...)
|
||||
printf_filtered (const char *format, ...)
|
||||
#else
|
||||
printf_filtered (va_alist)
|
||||
va_dcl
|
||||
|
@ -1656,7 +1662,7 @@ printf_filtered (va_alist)
|
|||
/* VARARGS */
|
||||
void
|
||||
#ifdef ANSI_PROTOTYPES
|
||||
printf_unfiltered (char *format, ...)
|
||||
printf_unfiltered (const char *format, ...)
|
||||
#else
|
||||
printf_unfiltered (va_alist)
|
||||
va_dcl
|
||||
|
@ -1681,7 +1687,7 @@ printf_unfiltered (va_alist)
|
|||
/* VARARGS */
|
||||
void
|
||||
#ifdef ANSI_PROTOTYPES
|
||||
printfi_filtered (int spaces, char *format, ...)
|
||||
printfi_filtered (int spaces, const char *format, ...)
|
||||
#else
|
||||
printfi_filtered (va_alist)
|
||||
va_dcl
|
||||
|
@ -1710,14 +1716,14 @@ printfi_filtered (va_alist)
|
|||
|
||||
void
|
||||
puts_filtered (string)
|
||||
char *string;
|
||||
const char *string;
|
||||
{
|
||||
fputs_filtered (string, gdb_stdout);
|
||||
}
|
||||
|
||||
void
|
||||
puts_unfiltered (string)
|
||||
char *string;
|
||||
const char *string;
|
||||
{
|
||||
fputs_unfiltered (string, gdb_stdout);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue