public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: will schmidt <will_schmidt@vnet.ibm.com>
To: Carl Love <cel@us.ibm.com>, Pedro Alves <pedro@palves.net>,
	Kevin Buettner <kevinb@redhat.com>,
	gdb-patches@sourceware.org
Cc: Rogerio Alves <rogealve@br.ibm.com>
Subject: Re: [PATCH V2] PowerPC: fix for gdb.base/eh_return.exp
Date: Mon, 09 May 2022 15:57:54 -0500	[thread overview]
Message-ID: <37d2a4b6a57b62662f0417f123bda6ba48066554.camel@vnet.ibm.com> (raw)
In-Reply-To: <c13f1fbbcf5c775c59e678ebabdcbc4ca75b4472.camel@us.ibm.com>

On Mon, 2022-05-09 at 12:17 -0700, Carl Love wrote:
> Will, Pedro, Kevin, GDB maintainers:
> 
> Sorry, resend, the first attempt was missing the mailing list.
> 
> I have updated the patch per the comments from Will.  The new version
> of the patch uses a PowerPC specific gcc option to suppress the
> generation of the Traceback Table information.  The Traceback
> information is contained in the .long statements following the last
> instruction in the function.  Now the existing test to locate the last
> instruction in the function works without any changes.


In this cases the disassembly is presenting the traceback table
contents as .long values, but with an (un)lucky combination of bits, it
may also represent parts of that table as instructions.  Thats all
chance on which bits/fields are set.  That can show up readily with the
"-mtraceback=full" option, probably unlikely with the default trace
table contents.   (tldr; it won't always be represented as .long
0xfoo...).



> 
> Note, the use of the gcc mtraceback option is not valid on other
> architectures.
> 
> I have tested the patch on Power 10 and Intel.
> 
> Please let me know if this patch is acceptable.  Thanks for the input
> and help with the patch.
> 
>                           Carl Love
> -----------------------------------------------------------------
> 
> PowerPC: fix for gdb.base/eh_return.exp
> 


> Disable the Traceback Table generation on PowerPC.  The Traceback Table

  Disable ... for this test.

> consists of multiple .long statement following the final instruction in

The traceback table is being interpreted by the assembler as data and
is represented as .long by the disassembler that is looking for
instructions, but the table itself is a series of mostly bitfields.   


I'll suggest rephrasing, something like 


s/consists ... statements /is defined by the PowerPC ELF ABI and is
intended to support debuggers and exception handlers.  The Traceback
Table is located following the end of the code for every function. 

> the function.  Generation of the .long statements needs to be disabled with
> the PowerPC specific gcc compiler option -mtraceback=no so the test will
> correctly locate the address of the bclr instruction before the statement
> "End of assembler dump."



> ---
>  gdb/testsuite/gdb.base/eh_return.exp | 24 +++++++++++++++++++++++-
>  1 file changed, 23 insertions(+), 1 deletion(-)
> 
> diff --git a/gdb/testsuite/gdb.base/eh_return.exp b/gdb/testsuite/gdb.base/eh_return.exp
> index df55dbc72da..3a49464af63 100644
> --- a/gdb/testsuite/gdb.base/eh_return.exp
> +++ b/gdb/testsuite/gdb.base/eh_return.exp
> @@ -18,8 +18,30 @@
> 
>  standard_testfile
> 
> +if {[istarget "powerpc*"]} then {
> +    # PowerPC generates a Traceback Table following each function by default.


Consider adding "as defined by the PPC64 ABIs" betwen Table and
Following. 


> +    # The .long statements following the function contain the Traceback Table
> +    # information.  For example:
> +    #   Dump of assembler code for function eh2:
> +    #   0x00000000100009e0 <+0>:     lis     r2,4098
> +    #   ...
> +    #   0x0000000010000b04 <+292>:   add     r1,r1,r10
> +    #   0x0000000010000b08 <+296>:   blr
> +    #   0x0000000010000b0c <+300>:   .long 0x0
> +    #   0x0000000010000b10 <+304>:   .long 0x1000000
> +    #   0x0000000010000b14 <+308>:   .long 0x1000180
> +    #   End of assembler dump.
> +    #
> +    # Disable the Traceback Table generation, using the PowerPC specific
> +    # gcc option, so the test gdb_test_multiple "disassemble eh2" will match
> +    # the blr instruction not the .long statement.
> +    set compile_flags {debug nopie additional_flags=-mtraceback=no}
> +} else {
> +    set compile_flags {debug nopie}
> +}

This seems OK to me, assuming this test is exercising a simple
scenario, versus representative of function elsewhere in the GDB code
base.  If there is a deeper issue that the traceback tables are causing
elsewhere in the GDB code base, some deeper solution may need to be
investigated. 


> +
>  if {[prepare_for_testing "failed to prepare" $testfile $srcfile \
> -	 {debug nopie}]} {
> +	 $compile_flags]} {
>      return -1
>  }
> 


  reply	other threads:[~2022-05-09 20:57 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-05 20:07 [PATCH] " Carl Love
2022-05-06 18:08 ` Kevin Buettner
2022-05-06 21:16   ` Pedro Alves
2022-05-06 22:45     ` will schmidt
2022-05-09 19:17       ` [PATCH V2] " Carl Love
2022-05-09 20:57         ` will schmidt [this message]
2022-05-10 11:43           ` Pedro Alves
2022-05-11 21:52             ` Carl Love
2022-05-11 21:52           ` [PATCH V3] " Carl Love
2022-05-11 22:48             ` Kevin Buettner
2022-05-12 16:00               ` Carl Love
2022-06-02 16:52               ` Carl Love
2022-06-08 18:32                 ` Pedro Alves
2022-06-08 18:51                   ` Carl Love
2022-06-09 15:24                   ` Carl Love
2022-06-02 17:00             ` [PATCH V4] " Carl Love
2022-06-07 17:54               ` will schmidt
2022-06-08 15:33                 ` [PATCH V5] " Carl Love
2022-06-08 15:36                   ` Carl Love
2022-06-08 16:29                     ` will schmidt
2022-07-13 17:07                     ` [Ping] " Carl Love
2022-07-15 13:41                     ` Ulrich Weigand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=37d2a4b6a57b62662f0417f123bda6ba48066554.camel@vnet.ibm.com \
    --to=will_schmidt@vnet.ibm.com \
    --cc=cel@us.ibm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=kevinb@redhat.com \
    --cc=pedro@palves.net \
    --cc=rogealve@br.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).