Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Kevin Buettner via Gdb-patches <gdb-patches@sourceware.org>
To: Tom de Vries via Gdb-patches <gdb-patches@sourceware.org>
Cc: Tom de Vries <tdevries@suse.de>
Subject: Re: [PATCH][gdb/testsuite] Use prototype to call libc functions
Date: Wed, 7 Sep 2022 10:41:06 -0700	[thread overview]
Message-ID: <20220907104106.099b2c4d@f35-zws-1> (raw)
In-Reply-To: <20220905122706.GA23594@delia.home>

On Mon, 5 Sep 2022 14:27:07 +0200
Tom de Vries via Gdb-patches <gdb-patches@sourceware.org> wrote:

> Hi,
> 
> On openSUSE Tumbleweed (using glibc 2.36), I run into:
> ...
> (gdb) print /d (int) munmap (4198400, 4096)^M
> Invalid cast.^M
> (gdb) FAIL: gdb.base/break-main-file-remove-fail.exp: cmdline: \
>   get integer valueof "(int) munmap (4198400, 4096)"
> ...
> 
> The problem is that after starting the executable, the symbol has type
> "void (*) (void)":
> ...
> (gdb) p munmap
> $1 = {<text variable, no debug info>} 0x401030 <munmap@plt>
> (gdb) start
>   ...
> (gdb) p munmap
> $2 = {void (void)} 0x7ffff7feb9a0 <__GI_munmap>
> ...
> which causes the "Invalid cast" error.
> 
> Looking at the debug info for glibc for symbol __GI_munmap:
> ...
>  <0><189683>: Abbrev Number: 1 (DW_TAG_compile_unit)
>     <189691>   DW_AT_name        : ../sysdeps/unix/syscall-template.S
>     <189699>   DW_AT_producer    : GNU AS 2.39.0
> <1><1896ae>: Abbrev Number: 2 (DW_TAG_subprogram)
>     <1896af>   DW_AT_name        : __GI___munmap
>     <1896b3>   DW_AT_external    : 1
>     <1896b4>   DW_AT_low_pc      : 0x10cad0
>     <1896bc>   DW_AT_high_pc     : 37
> ...
> that's probably caused by this bit (or similar bits for other munmap aliases).
> 
> This is fixed in gas on trunk by commit 5578fbf672e ("GAS: Add a return type
> tag to DWARF DIEs generated for function symbols").
> 
> Work around this (for say gas 2.39) by explicitly specifying the prototype for
> munmap.
> 
> Likewise for getpid in a couple of other test-cases.
> 
> Tested on x86_64-linux.
> 
> Any comments?

I have mixed feelings about patches like this.

One the one hand, it's nice to have the test "fixed" so that it doesn't
fail.

But, on the other hand, this failure found a problem with the debug info
in glibc, so fixing it as you did here will remove that test.

Perhaps you could add a new test which will still fail when the debug info
incorrectly specifies that munmap has a void return type?

Kevin


  parent reply	other threads:[~2022-09-07 17:41 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-05 12:27 Tom de Vries via Gdb-patches
2022-09-07  8:01 ` Tom de Vries via Gdb-patches
2022-09-07 17:41 ` Kevin Buettner via Gdb-patches [this message]
2022-09-08  9:26   ` Tom de Vries via Gdb-patches
2022-09-08 10:15   ` Luis Machado via Gdb-patches

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=20220907104106.099b2c4d@f35-zws-1 \
    --to=gdb-patches@sourceware.org \
    --cc=kevinb@redhat.com \
    --cc=tdevries@suse.de \
    /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