[PATCH][gdb] Fix missing symtab includes

Simon Marchi simark@simark.ca
Sat Mar 28 16:32:47 GMT 2020


On 2020-03-27 4:49 p.m., Tom de Vries wrote:
> Hi,
> 
> Consider hello.h:
> ...
>  inline static const char*
>  foo (void)
>  {
>    return "foo";
>  }
> ...
> and hello.c:
> ...
>  #include <stdio.h>
>  #include "hello.h"
> 
>  int
>  main (void)
>  {
>    printf ("hello: %s\n", foo ());
>    return 0;
>  }
> ...
> compiled with -g, and dwz-compressed:
> ...
> $ gcc -g hello.c
> $ dwz a.out
> ...
> 
> When breaking on foo and printing the symbol tables, we have two includes for
> the hello.c compunit_symtab, representing two imported partial units:
> ...
> $ gdb -iex "set language c" -batch a.out -ex "b foo" -ex "maint info symtabs"
> Breakpoint 1 at 0x40050b: file hello.h, line 4.
>   ...
>   { ((struct compunit_symtab *) 0x38fa890)
>     debugformat DWARF 2
>     producer GNU C11 7.5.0 -mtune=generic -march=x86-64 -g
>     dirname /data/gdb_versions/devel
>     blockvector ((struct blockvector *) 0x39af9f0)
>     user ((struct compunit_symtab *) (null))
>     ( includes
>       ((struct compunit_symtab *) 0x39afb10)
>       ((struct compunit_symtab *) 0x39b00c0)
>     )
>         { symtab hello.c ((struct symtab *) 0x38fa940)
>           fullname (null)
>           linetable ((struct linetable *) 0x39afa80)
>         }
> ...

I am not able to reproduce this.  In both cases, I don't get the `includes`.

What transformation is dwz expected to do on the binary?  Here, it looks like
it just compressed the debug info a little bit, changing the addresses, but the
general structure was untouched.

I'm using the latest git version of dwz (commit b7111689a2ccec2f57343f1051ec8f1df5e89e5c).

Simon


More information about the Gdb-patches mailing list