[RFA] More testing for assembly language source debugging

Michael Snyder msnyder@cygnus.com
Sun Nov 25 09:04:00 GMT 2001


This is an enhancement to the existing test 'asm-source.exp'.  I have
added tests for list, search, finish, return, next, info line, info
source, info sources, static functions, and global and static
variables.

A new macro has been added to 'common.inc' for declaring a variable.
By default it uses ".word", but it can be overridden in the arch.inc
file if .word does not correspond to the default size of an integer, 
or if different syntax, different alignment etc. is required.

This was the case for i386, so i386.inc has an overriding definition
for this macro.

These tests exposed some failures in the D10V, so I had to whack on
d10v.inc to make it set up a more robust stack structure.


2001-11-30  Michael Snyder  <msnyder@redhat.com>

	* gdb.asm/asm-source.exp: Add tests for list, search, finish, return,
	next, info source, info sources, info line, global and static
	variables, and static functions.
	* gdb.asm/common.inc: New macro gdbasm_datavar (default definition).
	* gdb.asm/i386.inc: Override default definition of gdbasm_datavar.
	* gdb.asm/asmsrc1.s: Add a static function and some variables.
	* gdb.asm/asmsrc2.s: Make foo2 call foo3 twice (to test 'next').
	* gdb.asm/d10v.inc (gdbasm_enter): Set up frame pointer.
	(gdbasm_leave): Restore frame pointer.
	(gdbasm_startup): Copy stack set-up from crt0.S.

Index: i386.inc
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/i386.inc,v
retrieving revision 1.1
diff -c -3 -p -r1.1 i386.inc
*** i386.inc	2001/11/22 01:07:24	1.1
--- i386.inc	2001/12/01 00:55:16
***************
*** 30,32 ****
--- 30,39 ----
  	.macro gdbasm_startup
  	xor	%ebp, %ebp
  	.endm
+ 
+ 	comment "Declare a data variable"
+ 	.macro gdbasm_datavar name value
+ 	.data
+ \name:
+ 	.long	\value
+ 	.endm
Index: d10v.inc
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/d10v.inc,v
retrieving revision 1.3
diff -c -3 -p -r1.3 d10v.inc
*** d10v.inc	2001/11/10 17:55:48	1.3
--- d10v.inc	2001/12/01 00:55:16
***************
*** 1,12 ****
  	comment "subroutine prologue"
  	.macro gdbasm_enter
  	st r13,@-sp
  	.endm
  
  	comment "subroutine epilogue"
  	.macro gdbasm_leave
! 	ld r13,@sp+
! 	jmp r13
  	.endm
  
  	.macro gdbasm_call subr
--- 1,16 ----
  	comment "subroutine prologue"
  	.macro gdbasm_enter
+ 	st r11,@-sp
  	st r13,@-sp
+ 	mv r11,sp
  	.endm
  
  	comment "subroutine epilogue"
  	.macro gdbasm_leave
! 	add3 sp,r11,0
! 	ld   r13,@sp+
! 	ld   r11,@sp+
! 	jmp  r13
  	.endm
  
  	.macro gdbasm_call subr
***************
*** 29,32 ****
--- 33,55 ----
  
  	comment "crt0 startup"
  	.macro gdbasm_startup
+ ; R14 always contains memory base address (0)
+ 
+ 	ldi     r14,0
+ 
+ ; Set the USER and SYSTEM stack pointers.
+ 
+ 	ldi     r0, 0           ; zero arguments
+ 	ldi     r1, 0
+ 	mvtc    r0, psw         ; select SPI and set it
+ 	ldi     sp, _stack
+ 	ldi     r10, 0x8000     ; select SPU/FP and set it
+ 	mvtc	r10, psw || ldi	r11, 0;  clear stack frame
+ 	ldi     sp, _stack - 0x200
+ 	ldi     r13, 0
+ 
+ 	st	r11, @-sp
+ 	st	r13, @-sp
+ ;	mv	r11, sp
+ 
  	.endm
Index: common.inc
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/common.inc,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 common.inc
*** common.inc	1999/04/16 01:34:30	1.1.1.1
--- common.inc	2001/12/01 00:55:16
***************
*** 7,18 ****
--- 7,28 ----
  	.include "\arch\file"
  	.endm
  
+ 	comment "Declare a data variable"
+ 	.macro gdbasm_datavar name value
+ 	.data
+ \name:
+ 	.word \value
+ 	.endm
+ 
  comment "arch.inc is responsible for defining the following macros:"
  comment "enter - subroutine prologue"
  comment "leave - subroutine epilogue"
  comment "call - call a named subroutine"
  comment "several_nops - execute several (typically 4) nops"
  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"
Index: asmsrc1.s
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/asmsrc1.s,v
retrieving revision 1.3
diff -c -3 -p -r1.3 asmsrc1.s
*** asmsrc1.s	2001/11/10 17:55:48	1.3
--- asmsrc1.s	2001/12/01 00:55:16
*************** foo3:
*** 46,48 ****
--- 46,63 ----
  	.global exit
  exit:
  	gdbasm_exit0
+ 
+ comment "A static function"
+ 
+ foostatic:
+ 	gdbasm_enter
+ 	gdbasm_leave
+ 
+ comment "A global variable"
+ 
+ 	.global globalvar
+ gdbasm_datavar	globalvar	11
+ 
+ comment "A static variable"
+ 
+ gdbasm_datavar	staticvar	5
Index: asmsrc2.s
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/asmsrc2.s,v
retrieving revision 1.2
diff -c -3 -p -r1.2 asmsrc2.s
*** asmsrc2.s	2001/11/10 17:55:48	1.2
--- asmsrc2.s	2001/12/01 00:55:16
*************** comment "Second file in assembly source 
*** 7,14 ****
  foo2:
  	gdbasm_enter
  
! comment "Call someplace else."
  
  	gdbasm_call foo3
  
  comment "All done, return."
--- 7,15 ----
  foo2:
  	gdbasm_enter
  
! comment "Call someplace else (several times)."
  
+ 	gdbasm_call foo3
  	gdbasm_call foo3
  
  comment "All done, return."
Index: asm-source.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/asm-source.exp,v
retrieving revision 1.9
diff -c -3 -p -r1.9 asm-source.exp
*** asm-source.exp	2001/11/27 01:29:03	1.9
--- asm-source.exp	2001/12/01 00:55:16
*************** gdb_test "n" "33\[ 	\]*.*foo2" "next ove
*** 96,101 ****
--- 96,108 ----
  # See if we can properly `step' into a subroutine call.
  gdb_test "s" "8\[ 	\]*.*" "step into foo2"
  
+ # Now try a 'list' from the other source file.
+ gdb_test "list _start" ".*gdbasm_startup.*" "list"
+ 
+ # 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"
+ 
  # See if `f' prints the right source file.
  gdb_test "f" ".*asmsrc2\[.\]s:8.*" "f in foo2"
  
*************** gdb_test "n" "" "n 2"
*** 120,122 ****
--- 127,171 ----
  
  # 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"
+ 
+ # Try 'info source' from asmsrc1.s
+ gdb_test "info source" \
+ 	"Current source file is .*asmsrc1.s.*Source language is asm.*" \
+ 	"info source asmsrc1.s"
+ 
+ # Try 'finishing' from foo3
+ gdb_test "finish" "Run till exit from.*\[\r\n\]13\[ \t\]+gdbasm_call foo3" \
+ 	"finish from foo3"
+ 
+ # Try 'info source' from asmsrc2.s
+ gdb_test "info source" \
+ 	"Current source file is .*asmsrc2.s.*Source language is asm.*" \
+ 	"info source asmsrc2.s"
+ 
+ # Try 'info sources'
+ gdb_test "info sources" \
+ 	"Source files .*asmsrc\[12\].s.*asmsrc\[12\].s.*" \
+ 	"info sources"
+ 
+ # Try 'info line'
+ gdb_test "info line" \
+ 	"Line 13 of.*asmsrc2.s.*starts at.*<foo2+.*> and ends at.*<foo2+.*>." \
+ 	"info line"
+ 
+ # Try 'nexting' over next call to foo3
+ 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"
+ 
+ # See if we can look at a global variable
+ gdb_test "print globalvar" ".* = 11" "look at global variable"
+ 
+ # See if we can look at a static variable
+ gdb_test "print staticvar" ".* = 5" "look at static variable"
+ 
+ # See if we can look at a static function
+ gdb_test "disassem foostatic" ".*<foostatic>:.*End of assembler dump." \
+ 	"look at static function"
+ 



More information about the Gdb-patches mailing list