This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
RFA/testsuite: Add MIPS to gdb.asm
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: gdb-patches at sources dot redhat dot com
- Cc: fnasser at redhat dot com
- Date: Sat, 12 Oct 2002 15:37:26 -0400
- Subject: RFA/testsuite: Add MIPS to gdb.asm
I was squashing MIPS GNU/Linux failures this morning and the 24 fails from
gdb.asm finally annoyed me... so I squashed them. The ChangeLog is pretty
explanatory; the only subtle part was a change from "selected stack frame"
to "(foo2|selected stack frame)". Because of the .ent information, GDB
knows which function the frame belongs to. The .ent information is
necessary to write PIC code on MIPS, and all user code is PIC.
Is this OK?
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
2002-10-12 Daniel Jacobowitz <drow@mvista.com>
* gdb.asm/asm-source.exp: Add "mips*-*" pattern. Update line
numbers. Allow "foo2|selected stack frame".
* gdb.asm/asmsrc1.s: Use gdbasm_declare and gdbasm_end.
* gdb.asm/asmsrc2.s: Likewise.
* gdb.asm/common.inc: Define gdbasm_declare and gdbasm_end. Update
comments.
* gdb.asm/mips.inc: New file.
Index: testsuite/gdb.asm/asm-source.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/asm-source.exp,v
retrieving revision 1.25
diff -u -p -r1.25 asm-source.exp
--- testsuite/gdb.asm/asm-source.exp 6 Jun 2002 15:19:17 -0000 1.25
+++ testsuite/gdb.asm/asm-source.exp 12 Oct 2002 19:32:06 -0000
@@ -57,6 +57,9 @@ if [istarget "i\[3456\]86-*-*"] then {
if [istarget "m32r*-*"] then {
set asm-arch m32r
}
+if [istarget "mips*-*"] then {
+ set asm-arch mips
+}
if [istarget "powerpc*-*"] then {
set asm-arch powerpc
}
@@ -138,10 +141,10 @@ if ![runto_main] then {
}
# Execute the `f' command and see if the result includes source info.
-gdb_test "f" "asmsrc1\[.\]s:29.*several_nops" "f at main"
+gdb_test "f" "asmsrc1\[.\]s:30.*several_nops" "f at main"
# See if we properly `next' over a macro with several insns.
-gdb_test "n" "33\[ \]*.*foo2" "next over macro"
+gdb_test "n" "34\[ \]*.*foo2" "next over macro"
# See if we can properly `step' into a subroutine call.
gdb_test "s" "8\[ \]*.*" "step into foo2"
@@ -194,7 +197,7 @@ gdb_test "list $entry_symbol" ".*gdbasm_
# Now try a source file search
gdb_test "search A routine for foo2 to call" \
- "39\[ \t\]+comment \"A routine for foo2 to call.\"" "search"
+ "41\[ \t\]+comment \"A routine for foo2 to call.\"" "search"
# See if `f' prints the right source file.
gdb_test "f" ".*asmsrc2\[.\]s:8.*" "f in foo2"
@@ -206,11 +209,11 @@ gdb_test "n" "12\[ \]*.*foo3" "n in foo
# doesn't fall off the stack.
gdb_test "bt 10" \
- "\#0.*foo2.*asmsrc2\[.\]s:12.*\#1.*main.*asmsrc1\[.\]s:33(.*\#2.*start\[^\r\n\]*)?" \
+ "\#0.*foo2.*asmsrc2\[.\]s:12.*\#1.*main.*asmsrc1\[.\]s:34(.*\#2.*start\[^\r\n\]*)?" \
"bt ALL in foo2"
# See if a capped `bt' prints the right source files.
-gdb_test "bt 2" "\#0.*foo2.*asmsrc2\[.\]s:12.*\#1.*main.*asmsrc1\[.\]s:33.*" "bt 2 in foo2"
+gdb_test "bt 2" "\#0.*foo2.*asmsrc2\[.\]s:12.*\#1.*main.*asmsrc1\[.\]s:34.*" "bt 2 in foo2"
# Step into another subroutine which lives back in the first source file.
gdb_test "s" "" "s 2"
@@ -219,7 +222,7 @@ gdb_test "s" "" "s 2"
gdb_test "n" "" "n 2"
# Now see if a capped `bt' is correct.
-gdb_test "bt 3" "\#0.*foo3.*asmsrc1\[.\]s:44.*\#1.*foo2.*asmsrc2\[.\]s:12.*\#2.*main.*asmsrc1\[.\]s:33.*" "bt 3 in foo3"
+gdb_test "bt 3" "\#0.*foo3.*asmsrc1\[.\]s:46.*\#1.*foo2.*asmsrc2\[.\]s:12.*\#2.*main.*asmsrc1\[.\]s:34.*" "bt 3 in foo3"
# Try 'info source' from asmsrc1.s
gdb_test "info source" \
@@ -276,8 +279,8 @@ gdb_test "info line" \
gdb_test "next" "17\[ \t\]+gdbasm_leave" "next over foo3"
# Try 'return' from foo2
-gdb_test "return" "\#0 main .*37\[ \t\]+gdbasm_exit0" "return from foo2" \
- "Make selected stack frame return now\?.*" "y"
+gdb_test "return" "\#0 main .*38\[ \t\]+gdbasm_exit0" "return from foo2" \
+ "Make (foo2|selected stack frame) return now\?.*" "y"
# See if we can look at a global variable
gdb_test "print globalvar" ".* = 11" "look at global variable"
Index: testsuite/gdb.asm/asmsrc1.s
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/asmsrc1.s,v
retrieving revision 1.4
diff -u -p -r1.4 asmsrc1.s
--- testsuite/gdb.asm/asmsrc1.s 4 Dec 2001 19:45:57 -0000 1.4
+++ testsuite/gdb.asm/asmsrc1.s 12 Oct 2002 19:32:06 -0000
@@ -9,19 +9,20 @@ comment "asm-source.exp."
comment "This file is not linked with crt0."
comment "Provide very simplistic equivalent."
+
.global _start
-_start:
+gdbasm_declare _start
gdbasm_startup
gdbasm_call main
gdbasm_exit0
-
+ gdbasm_end _start
comment "main routine for assembly source debugging test"
comment "This particular testcase uses macros in <arch>.inc to achieve"
comment "machine independence."
.global main
-main:
+gdbasm_declare main
gdbasm_enter
comment "Call a macro that consists of several lines of assembler code."
@@ -35,23 +36,27 @@ comment "Call a subroutine in another fi
comment "All done."
gdbasm_exit0
+ gdbasm_end main
comment "A routine for foo2 to call."
.global foo3
-foo3:
+gdbasm_declare foo3
gdbasm_enter
gdbasm_leave
+ gdbasm_end foo3
.global exit
-exit:
+gdbasm_declare exit
gdbasm_exit0
+ gdbasm_end exit
comment "A static function"
-foostatic:
+gdbasm_declare foostatic
gdbasm_enter
gdbasm_leave
+ gdbasm_end foostatic
comment "A global variable"
Index: testsuite/gdb.asm/asmsrc2.s
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/asmsrc2.s,v
retrieving revision 1.3
diff -u -p -r1.3 asmsrc2.s
--- testsuite/gdb.asm/asmsrc2.s 4 Dec 2001 19:45:57 -0000 1.3
+++ testsuite/gdb.asm/asmsrc2.s 12 Oct 2002 19:32:06 -0000
@@ -4,7 +4,7 @@
comment "Second file in assembly source debugging testcase."
.global foo2
-foo2:
+gdbasm_declare foo2
gdbasm_enter
comment "Call someplace else (several times)."
@@ -15,3 +15,4 @@ comment "Call someplace else (several ti
comment "All done, return."
gdbasm_leave
+ gdbasm_end foo2
Index: testsuite/gdb.asm/common.inc
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/common.inc,v
retrieving revision 1.2
diff -u -p -r1.2 common.inc
--- testsuite/gdb.asm/common.inc 4 Dec 2001 19:45:57 -0000 1.2
+++ testsuite/gdb.asm/common.inc 12 Oct 2002 19:32:06 -0000
@@ -14,6 +14,15 @@
.word \value
.endm
+ comment "Declare a subroutine"
+ .macro gdbasm_declare name
+\name:
+ .endm
+
+ comment "End a subroutine"
+ .macro gdbasm_end name
+ .endm
+
comment "arch.inc is responsible for defining the following macros:"
comment "enter - subroutine prologue"
comment "leave - subroutine epilogue"
@@ -23,6 +32,5 @@ comment "exit0 - exit (0)"
comment "arch.inc may also override the default definitions of:"
comment "datavar - define a data variable"
-
-comment "macros to label a subroutine may also eventually be needed"
-comment "i.e. .global foo\nfoo:\n"
+comment "declare - declare the start of a subroutine"
+comment "end - end a subroutine"
Index: testsuite/gdb.asm/mips.inc
===================================================================
RCS file: testsuite/gdb.asm/mips.inc
diff -N testsuite/gdb.asm/mips.inc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.asm/mips.inc 12 Oct 2002 19:32:06 -0000
@@ -0,0 +1,64 @@
+ comment "subroutine declare"
+ .macro gdbasm_declare name
+ .align 2
+ .ent \name
+ .type \name,@function
+\name:
+ .endm
+
+ comment "subroutine prologue"
+ .macro gdbasm_enter
+ .frame $fp, 32, $31
+ .mask 0xd0000000,-4
+ .set noreorder
+ .cpload $25
+ .set reorder
+ subu $sp, $sp, 32
+ .cprestore 16
+ sw $31, 28($sp)
+ sw $fp, 24($sp)
+ sw $28, 20($sp)
+ move $fp, $sp
+ .endm
+
+ comment "subroutine epilogue"
+ .macro gdbasm_leave
+ lw $31, 28($sp)
+ lw $fp, 24($sp)
+ .set noreorder
+ .set nomacro
+ j $31
+ addu $sp, $sp, 32
+ .set macro
+ .set reorder
+ .endm
+
+ comment "subroutine end"
+ .macro gdbasm_end name
+ .end \name
+ .endm
+
+ .macro gdbasm_call subr
+ la $25, \subr
+ jal $31, $25
+ .endm
+
+ .macro gdbasm_several_nops
+ nop
+ nop
+ nop
+ nop
+ .endm
+
+ comment "exit (0)"
+ .macro gdbasm_exit0
+ comment "Don't know how to exit, but this will certainly halt..."
+ lw $2, 0($0)
+ .endm
+
+ comment "crt0 startup"
+ .macro gdbasm_startup
+ .global __start
+__start:
+ move $fp, $sp
+ .endm