[RFA]: arm changes to run gdb.asm/asm-source.exp successfully
Corinna Vinschen
vinschen@redhat.com
Tue Dec 4 10:34:00 GMT 2001
Hi,
the following patch allows ARM targets to run the gdb.asm test
successfully. The change consists basically of a change to
asm-tdep.c, function arm_skip_prologue() to scan the prologue
the hard way when the source is assembler code and of adding the
appropriate arm.inc file plus some additional lines in asm-source.exp
and configure.in to support the new target.
Corinna
ChangeLog:
2001-12-04 Corinna Vinschen <vinschen@redhat.com>
* arm-tdep.c (arm_skip_prologue): Skip prologue by scanning
the prologue if source is assembler.
testsuite/ChangeLog:
* gdb.asm/arm.inc: New file.
* gdb.asm/asm-source.exp: Add arm targets.
* gdb.asm/configure.in: Ditto.
* gdb.asm/configure: Recreated from configure.in.
The new gdb.asm/arm.inc file:
comment "subroutine prologue"
.macro gdbasm_enter
mov ip, sp
stmdb sp!, {fp, ip, lr, pc}
sub fp, ip, #4
.endm
comment "subroutine epilogue"
.macro gdbasm_leave
ldmea fp, {fp, sp, pc}
.endm
.macro gdbasm_call subr
bl \subr
.endm
.macro gdbasm_several_nops
nop
nop
nop
nop
.endm
comment "exit (0)"
.macro gdbasm_exit0
mov r0, #0
swi 0x00123456
.endm
comment "crt0 startup"
.macro gdbasm_startup
mov sp, #0
.endm
Index: arm-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-tdep.c,v
retrieving revision 1.18
diff -u -p -r1.18 arm-tdep.c
--- arm-tdep.c 2001/11/30 20:27:08 1.18
+++ arm-tdep.c 2001/12/04 18:18:25
@@ -402,15 +402,24 @@ arm_skip_prologue (CORE_ADDR pc)
unsigned long inst;
CORE_ADDR skip_pc;
CORE_ADDR func_addr, func_end;
+ char *func_name;
struct symtab_and_line sal;
/* See what the symbol table says. */
- if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
+ if (find_pc_partial_function (pc, &func_name, &func_addr, &func_end))
{
- sal = find_pc_line (func_addr, 0);
- if ((sal.line != 0) && (sal.end < func_end))
- return sal.end;
+ struct symbol *sym;
+
+ /* Found a function. */
+ sym = lookup_symbol (func_name, NULL, VAR_NAMESPACE, NULL, NULL);
+ if (sym && SYMBOL_LANGUAGE (sym) != language_asm)
+ {
+ /* Don't use this trick for assembly source files. */
+ sal = find_pc_line (func_addr, 0);
+ if ((sal.line != 0) && (sal.end < func_end))
+ return sal.end;
+ }
}
/* Check if this is Thumb code. */
Index: testsuite/gdb.asm/asm-source.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/asm-source.exp,v
retrieving revision 1.10
diff -u -p -r1.10 asm-source.exp
--- asm-source.exp 2001/12/01 01:13:27 1.10
+++ asm-source.exp 2001/12/04 18:18:27
@@ -35,6 +35,12 @@ set asm-arch ""
set asm-flags ""
set link-flags ""
+if [istarget "*arm-*-*"] then {
+ set asm-arch arm
+}
+if [istarget "xscale-*-*"] then {
+ set asm-arch arm
+}
if [istarget "d10v-*-*"] then {
set asm-arch d10v
}
Index: testsuite/gdb.asm/configure
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/configure,v
retrieving revision 1.6
diff -u -p -r1.6 configure
--- configure 2001/12/01 01:13:27 1.6
+++ configure 2001/12/04 18:18:28
@@ -28,7 +28,6 @@ program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
-sitefile=
srcdir=
target=NONE
verbose=
@@ -143,7 +142,6 @@ Configuration:
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
- --site-file=FILE use FILE as the site file
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
@@ -314,11 +312,6 @@ EOF
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
- -site-file | --site-file | --site-fil | --site-fi | --site-f)
- ac_prev=sitefile ;;
- -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
- sitefile="$ac_optarg" ;;
-
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@@ -484,16 +477,12 @@ fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
-if test -z "$sitefile"; then
- if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
-else
- CONFIG_SITE="$sitefile"
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
@@ -582,7 +571,7 @@ else { echo "configure: error: can not r
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:586: checking host system type" >&5
+echo "configure:575: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -603,7 +592,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:607: checking target system type" >&5
+echo "configure:596: checking target system type" >&5
target_alias=$target
case "$target_alias" in
@@ -621,7 +610,7 @@ target_os=`echo $target | sed 's/^\([^-]
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:625: checking build system type" >&5
+echo "configure:614: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -646,6 +635,8 @@ test "$host_alias" != "$target_alias" &&
archinc=common.inc
case ${target} in
+*arm-*-*) archinc=arm.inc ;;
+xscale-*-*) archinc=arm.inc ;;
d10v-*-*) archinc=d10v.inc ;;
s390-*-*) archinc=s390.inc ;;
i[3456]86*) archinc=i386.inc ;;
Index: testsuite/gdb.asm/configure.in
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/configure.in,v
retrieving revision 1.6
diff -u -p -r1.6 configure.in
--- configure.in 2001/12/01 01:13:27 1.6
+++ configure.in 2001/12/04 18:18:28
@@ -15,6 +15,8 @@ AC_CANONICAL_SYSTEM
dnl In default case we need to link with some file so use common.inc.
archinc=common.inc
case ${target} in
+*arm-*-*) archinc=arm.inc ;;
+xscale-*-*) archinc=arm.inc ;;
d10v-*-*) archinc=d10v.inc ;;
s390-*-*) archinc=s390.inc ;;
i[[3456]]86*) archinc=i386.inc ;;
--
Corinna Vinschen
Cygwin Developer
Red Hat, Inc.
mailto:vinschen@redhat.com
More information about the Gdb-patches
mailing list