PING [PATCH] readelf: Consolidate --syms --use-dynamic with --dyn-syms table

H.J. Lu hjl.tools@gmail.com
Thu Apr 9 13:01:35 GMT 2020


On Sun, Mar 22, 2020 at 5:34 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Thu, Mar 19, 2020 at 5:51 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > On Thu, Mar 12, 2020 at 06:23:34AM -0700, H.J. Lu wrote:
> > > When reconstructing dynamic symbol table from the PT_DYNAMIC segment,
> > > compute dynamic symbol table size from hash table.  For DT_HASH, the
> > > number of dynamic symbol table entries equals the number of chains.
> > > For DT_GNU_HASH/DT_MIPS_XHASH, only defined symbols with non-STB_LOCAL
> > > indings are in hash table.  Since DT_GNU_HASH/DT_MIPS_XHASH place all
> > > symbols with STB_LOCAL binding before symbols with other bindings and
> > > all undefined symbols defined ones in dynamic symbol table, the highest
> > > symbol index in DT_GNU_HASH/DT_MIPS_XHASH is the highest dynamic symbol
> > > table index.
> > >
> > > Also iterate dynamic symbol table to print each entry so that output
> > > of "readelf -D -s" without section header is similar to "readelf -s"
> > > with section header.
> > > `
> >
> > Here is the updated patch to make --syms --use-dynamic output almost
> > identical with --dyn-syms.  On Linux/x86-64, I got
> >
> > [hjl@gnu-cfl-2 pr25617]$ ./readelf -D -s /lib64/libc.so.6 > 1
> > [hjl@gnu-cfl-2 pr25617]$ ./readelf --dyn-syms /lib64/libc.so.6 > 2
> > [hjl@gnu-cfl-2 pr25617]$ diff -up 1 2
> > --- 1   2020-03-19 05:50:11.367432099 -0700
> > +++ 2   2020-03-19 05:50:20.265739131 -0700
> > @@ -1,5 +1,5 @@
> >
> > -Symbol table for image contains 2369 entries:
> > +Symbol table '.dynsym' contains 2369 entries:
> >     Num:    Value          Size Type    Bind   Vis      Ndx Name
> >       0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
> >       1: 0000000000000000     0 OBJECT  WEAK   DEFAULT  UND _dl_starting_up@GLIBC_PRIVATE (33)
> > [hjl@gnu-cfl-2 pr25617]$
> >
> > Any comments, objections?
> >
> > Thanks.
> >
> > H.J.
> > ---
> > When reconstructing dynamic symbol table from the PT_DYNAMIC segment,
> > compute dynamic symbol table size from hash table.  For DT_HASH, the
> > number of dynamic symbol table entries equals the number of chains.
> > For DT_GNU_HASH/DT_MIPS_XHASH, only defined symbols with non-STB_LOCAL
> > indings are in hash table.  Since DT_GNU_HASH/DT_MIPS_XHASH place all
> > symbols with STB_LOCAL binding before symbols with other bindings and
> > all undefined symbols defined ones in dynamic symbol table, the highest
> > symbol index in DT_GNU_HASH/DT_MIPS_XHASH is the highest dynamic symbol
> > table index.
> >
> > Rewrite print_dynamic_symbol to dump dynamic symbol table for --dyn-syms
> > and --syms --use-dynamic.
> >
> > binutils/
> >
> >         * readelf.c (nbuckets): New.
> >         (nchains): Likewise.
> >         (buckets): Likewise.
> >         (chains): Likewise.
> >         (ngnubuckets): Likewise.
> >         (gnubuckets): Likewise.
> >         (gnuchains): Likewise.
> >         (mipsxlat): Likewise.
> >         (ngnuchains): Likewise.
> >         (gnusymidx): Likewise.
> >         (VALID_SYMBOL_NAME): Likewise.
> >         (VALID_DYNAMIC_NAME): Use it.
> >         (get_dynamic_data): Moved before process_dynamic_section.
> >         (get_num_dynamic_syms): New function.
> >         (process_dynamic_section): Use DT_SYMTAB, DT_SYMENT, DT_HASH,
> >         DT_GNU_HASH and DT_MIPS_XHASH to reconstruct dynamic symbol
> >         table.  Use DT_STRTAB and DT_STRSZ to reconstruct dynamic string
> >         table.
> >         (get_symbol_index_type): Don't print "bad section index" when
> >         there is no section header.
> >         (print_dynamic_symbol): Rewrite.
> >         (process_symbol_table): Call print_dynamic_symbol to dump dynamic
> >         symbol table.
> >
> > ld/
> >
> >         * testsuite/ld-elf/hash.d: Updated.
> >         * testsuite/ld-elf/pr13195.d: Likewise.
> >         * testsuite/ld-elfvsb/hidden2.d: Likewise.
> >         * testsuite/ld-mips-elf/hash2.d: Likewise.
>
> I opened:
>
> https://sourceware.org/bugzilla/show_bug.cgi?id=25707
>

Hi Nick, Alan,

Can you take a look at

https://sourceware.org/pipermail/binutils/2020-March/000234.html

Thanks.

-- 
H.J.


More information about the Binutils mailing list