From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17316 invoked by alias); 10 Nov 2010 07:45:37 -0000 Received: (qmail 17232 invoked by uid 22791); 10 Nov 2010 07:45:33 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,TW_LW,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from sibelius.xs4all.nl (HELO glazunov.sibelius.xs4all.nl) (83.163.83.176) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 10 Nov 2010 07:45:27 +0000 Received: from glazunov.sibelius.xs4all.nl (kettenis@localhost [127.0.0.1]) by glazunov.sibelius.xs4all.nl (8.14.3/8.14.3) with ESMTP id oAA7jHQp024650; Wed, 10 Nov 2010 08:45:17 +0100 (CET) Received: (from kettenis@localhost) by glazunov.sibelius.xs4all.nl (8.14.3/8.14.3/Submit) id oAA7jFsJ019214; Wed, 10 Nov 2010 08:45:15 +0100 (CET) Date: Wed, 10 Nov 2010 07:45:00 -0000 Message-Id: <201011100745.oAA7jFsJ019214@glazunov.sibelius.xs4all.nl> From: Mark Kettenis To: emachado@linux.vnet.ibm.com CC: gdb-patches@sourceware.org In-reply-to: <1289374182-14133-1-git-send-email-emachado@linux.vnet.ibm.com> (message from Edjunior Barbosa Machado on Wed, 10 Nov 2010 05:29:42 -0200) Subject: Re: [PATCH] testsuite: asm-source.exp: add powerpc64 support References: <1289374182-14133-1-git-send-email-emachado@linux.vnet.ibm.com> Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-11/txt/msg00145.txt.bz2 > From: Edjunior Barbosa Machado > Date: Wed, 10 Nov 2010 05:29:42 -0200 > > Hi, > > this patch intents to add powerpc64 support to the asm-source.exp > testcase. It contains a new include file (powerpc64.inc) which > defines macros for ppc64 asm. As some architectures (like ppc64) > can have one or more instructions after the subroutine call, the > testcase was modified in order to expect the caller line again as > well as the next line when issuing "finish" or "return" (as > mentioned at http://sourceware.org/ml/gdb/2010-11/msg00032.html). > It also has other minor changes, such as expect '.' prefixing > ppc64's symbols and call 'sys_exit' sequence on gdbasm_exit0 macro > for ppc32. > > Tested on x86, ppc32 and ppc64. > > Is that ok? Why are you making the distinction based on is_lp64_target and not on the target tuple (powerpc64*-*-* vs. powerpc*-*-*)? > gdb/testsuite/ > 2010-11-10 Edjunior Machado > > * 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. > * powerpc64.inc: New file > * powerpc.inc: Use 'sys_exit' > > --- > gdb/testsuite/gdb.asm/asm-source.exp | 44 ++++++++++++++++++++++--- > gdb/testsuite/gdb.asm/powerpc.inc | 6 ++-- > gdb/testsuite/gdb.asm/powerpc64.inc | 57 ++++++++++++++++++++++++++++++++++ > 3 files changed, 98 insertions(+), 9 deletions(-) > create mode 100644 gdb/testsuite/gdb.asm/powerpc64.inc > > diff --git a/gdb/testsuite/gdb.asm/asm-source.exp b/gdb/testsuite/gdb.asm/asm-source.exp > index ca342bd..9053711 100644 > --- a/gdb/testsuite/gdb.asm/asm-source.exp > +++ b/gdb/testsuite/gdb.asm/asm-source.exp > @@ -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.* and ends at.*." \ > + "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 } { > diff --git a/gdb/testsuite/gdb.asm/powerpc.inc b/gdb/testsuite/gdb.asm/powerpc.inc > index a0797bf..ab700c2 100644 > --- a/gdb/testsuite/gdb.asm/powerpc.inc > +++ b/gdb/testsuite/gdb.asm/powerpc.inc > @@ -29,9 +29,9 @@ > > comment "exit (0)" > .macro gdbasm_exit0 > - comment "Don't know how to exit, but this will certainly halt..." > - li 0, 0 > - lwz 0, 0(0) > + comment "sys_exit" > + li 0, 1 > + sc > .endm > > comment "crt0 startup" > diff --git a/gdb/testsuite/gdb.asm/powerpc64.inc b/gdb/testsuite/gdb.asm/powerpc64.inc > new file mode 100644 > index 0000000..7265c07 > --- /dev/null > +++ b/gdb/testsuite/gdb.asm/powerpc64.inc > @@ -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 > -- > 1.7.1 > >