tech-toolchain archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Help needed with binutils solving [PR 54159]
Hello Martin,
Thank you! But it seemed that I was taking it from the wrong side
(reading targets.c with mentions of the macro BFD_SEND and this seems
obsolete) and that following in the source the functions with the
suffixes (bed->s->swap_symbol_in is calling "*swap_symbol_in" in
the target file) was sufficient.
It ends in elf32-arm.c:elf32_arm_swap_symbol_in calling
bfd_elf_sym_name() with incorrect arguments.
It calls to resolv with elf_symtab_hdr(abfd) that
returns .symtab while in case of dshared it should use dynstrtab_hdr
(to be verified).
I will continue to look tomorrow.
Best regards,
T. Laronde
On Wed, Aug 14, 2019 at 01:14:22PM +0200, Martin Husemann wrote:
> On Wed, Aug 14, 2019 at 12:45:15PM +0200, tlaronde%polynum.com@localhost wrote:
> > The bug reported via PR 54159 with spurious warnings from GNU lib about
> > strings offsets past the size of the .strtab section are in fact due
> > to the fact that in the case of dynamic linking, the code takes the
> > .dynsym symbol table (and not the .symtab) and tries to match the offset
> > against .strtab while they are relative to .dynstr.
> >
> > The warnings come from bfd_link_add_symbols(). But this is a generic
> > name and a backend version is called through the BFD xvec vector.
>
> I just did:
>
> gdb ld
> break bfd_close
> run ....
>
> and get to this:
>
> Breakpoint 2, bfd_close (abfd=0x76a6c000)
> at /work/src/external/gpl3/binutils/lib/libbfd/../../dist/bfd/opncls.c:729
> 729 /work/src/external/gpl3/binutils/lib/libbfd/../../dist/bfd/opncls.c: No such file or directory.
> #0 bfd_close (abfd=0x76a6c000)
> at /work/src/external/gpl3/binutils/lib/libbfd/../../dist/bfd/opncls.c:729
> #1 0x01438d04 in main (argc=<optimized out>, argv=<optimized out>)
> at /work/src/external/gpl3/binutils/usr.bin/ld/../../dist/ld/ldmain.c:489
> (gdb) p *abfd
> $1 = {filename = 0x76e4a3f8 "a.out", xvec = 0x76e3ac24 <arm_elf32_be_vec>,
> iostream = 0x76d10e60, iovec = 0x76e38e88, lru_prev = 0x76a6c480,
> lru_next = 0x76a6ca80, where = 3038, mtime = 0, id = 0, format = bfd_object,
> direction = write_direction, flags = 386, cacheable = 1,
> ...
> (gdb) p *abfd->xvec
> $2 = {name = 0x76e07224 "elf32-bigarm", flavour = bfd_target_elf_flavour,
> byteorder = BFD_ENDIAN_BIG, header_byteorder = BFD_ENDIAN_BIG,
> object_flags = 967167, section_flags = 63021375,
> symbol_leading_char = 0 '\000', ar_pad_char = 47 '/',
> ar_max_namelen = 15 '\017', match_priority = 1 '\001',
> bfd_getx64 = 0x76dfc530 <bfd_getb64>,
> bfd_getx_signed_64 = 0x76dfc62c <bfd_getb_signed_64>,
> bfd_putx64 = 0x76dfc7b0 <bfd_putb64>, bfd_getx32 = 0x76dfc508 <bfd_getb32>,
> bfd_getx_signed_32 = 0x76dfc51c <bfd_getb_signed_32>,
> bfd_putx32 = 0x76dfc728 <bfd_putb32>, bfd_getx16 = 0x76dfc48c <bfd_getb16>,
> bfd_getx_signed_16 = 0x76dfc4a4 <bfd_getb_signed_16>,
> bfd_putx16 = 0x76dfc4b8 <bfd_putb16>,
> bfd_h_getx64 = 0x76dfc530 <bfd_getb64>,
> bfd_h_getx_signed_64 = 0x76dfc62c <bfd_getb_signed_64>,
> bfd_h_putx64 = 0x76dfc7b0 <bfd_putb64>,
> bfd_h_getx32 = 0x76dfc508 <bfd_getb32>,
> bfd_h_getx_signed_32 = 0x76dfc51c <bfd_getb_signed_32>,
> bfd_h_putx32 = 0x76dfc728 <bfd_putb32>,
> bfd_h_getx16 = 0x76dfc48c <bfd_getb16>,
> bfd_h_getx_signed_16 = 0x76dfc4a4 <bfd_getb_signed_16>,
> bfd_h_putx16 = 0x76dfc4b8 <bfd_putb16>, _bfd_check_format = {
> 0x76dfc240 <_bfd_dummy_target>, 0x76dce8cc <bfd_elf32_object_p>,
> 0x76df1d2c <bfd_generic_archive_p>, 0x76dcf734 <bfd_elf32_core_file_p>},
> _bfd_set_format = {0x76dfc0e8 <_bfd_bool_bfd_false_error>,
> 0x76dd3460 <elf32_arm_mkobject>, 0x76df13f4 <_bfd_generic_mkarchive>,
> 0x76dba99c <bfd_elf_mkcorefile>}, _bfd_write_contents = {
> 0x76dfc0e8 <_bfd_bool_bfd_false_error>,
> 0x76dc2760 <_bfd_elf_write_object_contents>,
> 0x76df3368 <_bfd_write_archive_contents>,
> 0x76dc2b5c <_bfd_elf_write_corefile_contents>},
> _close_and_cleanup = 0x76dc7284 <_bfd_elf_close_and_cleanup>,
> _bfd_free_cached_info = 0x76df8fcc <_bfd_free_cached_info>,
> _new_section_hook = 0x76dd3414 <elf32_arm_new_section_hook>,
> _bfd_get_section_contents = 0x76dfc948 <_bfd_generic_get_section_contents>,
> _bfd_get_section_contents_in_window = 0x76dfcac4 <_bfd_generic_get_section_contents_in_window>,
> _bfd_copy_private_bfd_data = 0x76ddb1e0 <elf32_arm_copy_private_bfd_data>,
> _bfd_merge_private_bfd_data = 0x76dd2198 <elf32_arm_merge_private_bfd_data>,
> _bfd_init_private_section_data = 0x76dc2c30 <_bfd_elf_init_private_section_data>,
> _bfd_copy_private_section_data = 0x76dc2ddc <_bfd_elf_copy_private_section_data>,
> _bfd_copy_private_symbol_data = 0x76dc4c28 <_bfd_elf_copy_private_symbol_data>,
> _bfd_copy_private_header_data = 0x76dc2fc8 <_bfd_elf_copy_private_header_data>, _bfd_set_private_flags = 0x76dd43a4 <elf32_arm_set_private_flags>,
> ...
>
> and especially:
>
> (gdb) p *abfd->xvec->_bfd_link_add_symbols
> $3 = {bfd_boolean (bfd *,
> struct bfd_link_info *)} 0x76dac764 <bfd_elf_link_add_symbols>
> (gdb) list bfd_elf_link_add_symbols
> 5718 /work/src/external/gpl3/binutils/lib/libbfd/../../dist/bfd/elflink.c: No such file or directory.
>
>
> (and with a source tree mounted on the proper directory it would have been
> even better, sorry...)
>
> Martin
--
Thierry Laronde <tlaronde +AT+ polynum +dot+ com>
http://www.kergis.com/
http://www.sbfa.fr/
Key fingerprint = 0FF7 E906 FBAF FE95 FD89 250D 52B1 AE95 6006 F40C
Home |
Main Index |
Thread Index |
Old Index