2010-11-24 Edjunior Machado <emachado@br.ibm.com>

* gdb.asm/asm-source.exp: Add new target "powerpc64"; expect leading `.'
	on ppc64's symbols; "finish" and "return" commands must accept to
	show the caller line again as well as the line after.
	* gdb.asm/powerpc64.inc: New file.
This commit is contained in:
Thiago Jung Bauermann 2010-11-24 17:57:34 +00:00
parent c50acd7bbb
commit f2b5a5cf6f
3 changed files with 103 additions and 7 deletions

View File

@ -1,3 +1,10 @@
2010-11-24 Edjunior Machado <emachado@br.ibm.com>
* gdb.asm/asm-source.exp: Add new target "powerpc64"; expect leading `.'
on ppc64's symbols; "finish" and "return" commands must accept to
show the caller line again as well as the line after.
* gdb.asm/powerpc64.inc: New file.
2010-11-23 Doug Evans <dje@google.com>
* lib/gdb.exp (gdb_test_sequence): New function.
@ -8,7 +15,7 @@
2010-11-23 Phil Muldoon <pmuldoon@redhat.com>
PR python/12212
PR python/12212
* gdb.python/python.exp: Check that selected_thread raises an
error when no inferior is loaded.

View File

@ -101,7 +101,15 @@ switch -glob -- [istarget] {
set asm-arch mips
}
"powerpc*-*" {
set asm-arch powerpc
if { [is_lp64_target] } {
set asm-arch powerpc64
set asm-flags "-a64 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
append link-flags " -m elf64ppc"
} else {
set asm-arch powerpc
set asm-flags "-a32 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
append link-flags " -m elf32ppc"
}
}
"sh*-*-*" {
set asm-arch sh
@ -362,8 +370,19 @@ gdb_test "info source" \
"info source asmsrc1.s"
# Try 'finishing' from foo3
gdb_test "finish" "Run till exit from.*\[\r\n\]$line_call_foo3_again\[ \t\]+gdbasm_call foo3" \
"finish from foo3"
# Some architectures will have one or more instructions after the
# call instruction which still is part of the call sequence, so we
# must be prepared for a "finish" to show us the caller line
# again as well as the statement after.
gdb_test_multiple "finish" "finish from foo3" {
-re "Run till exit from.*\[\r\n\]$line_call_foo3\[ \t\]+gdbasm_call foo3.*$gdb_prompt $" {
pass "finish from foo3"
gdb_test "s" ".*" "s after finish"
}
-re "Run till exit from.*\[\r\n\]$line_call_foo3_again\[ \t\]+gdbasm_call foo3.*$gdb_prompt $" {
pass "finish from foo3"
}
}
# Try 'info source' from asmsrc2.s
gdb_test "info source" \
@ -400,15 +419,28 @@ gdb_test_multiple "info sources" "info sources" {
# Try 'info line'
gdb_test "info line" \
"Line $line_call_foo3_again of.*asmsrc2.s.*starts at.*<foo2+.*> and ends at.*<foo2+.*>." \
"Line $line_call_foo3_again of.*asmsrc2.s.*starts at.*<\\.?foo2+.*> and ends at.*<\\.?foo2+.*>." \
"info line"
# Try 'nexting' over next call to foo3
gdb_test "next" "$line_foo2_leave\[ \t\]+gdbasm_leave" "next over foo3"
# Try 'return' from foo2
gdb_test "return" "\#0 main .*$line_main_exit\[ \t\]+gdbasm_exit0" "return from foo2" \
"Make (foo2|selected stack frame) return now\?.*" "y"
# Like "finish", "return" command also can return to the caller
# line again or the statement after, depending on the architecture.
gdb_test_multiple "return" "return from foo2" {
-re "Make (foo2|selected stack frame) return now\?.*" {
send_gdb "y\n"
exp_continue
}
-re "\#0.*main .*$line_call_foo2\[ \t\]+gdbasm_call foo2.*$gdb_prompt $" {
pass "return from foo2"
gdb_test "s" ".*" "s after return"
}
-re "\#0.*main .*$line_main_exit\[ \t\]+gdbasm_exit0.*$gdb_prompt $" {
pass "return from foo2"
}
}
# Disassemble something, check the output
proc test_dis { command var } {

View File

@ -0,0 +1,57 @@
comment "subroutine declare"
.purgem gdbasm_declare
.macro gdbasm_declare name
.section ".opd","aw"
\name:
.quad .\name, .TOC.@tocbase, 0
.section ".text"
.type \name, @function
.\name:
.endm
comment "subroutine prologue"
.macro gdbasm_enter
stdu 1, -112(1)
mflr 0
std 0, 128(1)
.endm
comment "subroutine epilogue"
.macro gdbasm_leave
ld 0, 128(1)
mtlr 0
ld 1, 0(1)
blr
.endm
.macro gdbasm_call subr
bl \subr
nop
.endm
.macro gdbasm_several_nops
nop
nop
nop
nop
.endm
comment "exit (0)"
.macro gdbasm_exit0
comment "sys_exit"
li 0, 1
sc
.endm
comment "crt0 startup"
.macro gdbasm_startup
.p2align 2
.endm
comment "Declare a data variable"
.purgem gdbasm_datavar
.macro gdbasm_datavar name value
.section ".data"
\name:
.long \value
.endm