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

H.J. Lu hjl.tools@gmail.com
Sun Mar 22 12:34:16 GMT 2020


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

-- 
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-readelf-Consolidate-syms-use-dynamic-with-dyn-syms.patch
Type: text/x-patch
Size: 39559 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20200322/9b8abc3e/attachment.bin>


More information about the Binutils mailing list