PR21167, relocation sections not included in groups

H.J. Lu hjl.tools@gmail.com
Thu Oct 5 01:04:00 GMT 2017


On 10/4/17, Alan Modra <amodra@gmail.com> wrote:
> This fixes a wart I've known about for years, but haven't done
> anything about because BFD treats relocation sections as an adjunct to
> the section they relocate.  SHF_GROUP on the section thus implicitly
> applies to its relocation section(s), but it is an error that the
> reloc sections aren't explicitly part of the group.
>
> Like many patches to gas, this wasn't as straightforward as it could
> be due to a number of backends, i386, cr16 and others, removing relocs
> in tc_get_reloc rather than marking them as "done" earlier in
> md_apply_reloc.  So it isn't possible for the group support to
> reliably detect the presence of relocs by looking at fixups earlier
> than write_relocs.  However the group support needs to create
> signature symbols, and that must be done before the symbol table is
> frozen, before write_relocs.  So split off the group sizing from
> elf_adjust_symtab and put it in elf_frob_file_after_relocs.
>
> The patch does cause a whole lot of regressions for nds32.
> nds32le-elf  +FAIL: copy removing group member
> nds32le-elf  +FAIL: strip with section group 2
> nds32le-elf  +FAIL: strip with section group 5
> nds32le-elf  +FAIL: strip with section group 7
> nds32le-elf  +FAIL: strip with section group 9
> nds32le-elf  +FAIL: group section
> nds32le-elf  +FAIL: group section with multiple sections of same name
> nds32le-elf  +FAIL: automatic section group b
> nds32le-elf  +FAIL: mbind sections
> nds32le-elf  +FAIL: ld-elf/group10
> nds32le-elf  +FAIL: ld-elf/group2
> nds32le-elf  +FAIL: ld-elf/group4
> nds32le-elf  +FAIL: ld-elf/group5
> nds32le-elf  +FAIL: ld-elf/group6
> nds32le-elf  +FAIL: ld-elf/group7
> nds32le-elf  +FAIL: ld-elf/group8a
> nds32le-elf  +FAIL: ld-elf/group8b
> nds32le-elf  +FAIL: ld-elf/group9a
> nds32le-elf  +FAIL: ld-elf/group9b
>
> They are all due to nds32 adding R_NDS32_RELAX_ENTRY relocs, so all
> the groups include extra sections.  I'm loathe to relax the pattern
> matching to allow random extra sections since some of the tests are
> testing that sections are properly removed from groups.  And xfailing
> them all for nds32 isn't ideal for the port.  If nds32 gas had a
> --no-relax option (matching the no_relax directive) then you could
> arrange to pass --no-relax for nds32 on these tests.  That's more than
> just a little bit of work so I'm punting this to the port maintainers.
>
> bfd/
> 	PR 21167
> 	* elf.c (_bfd_elf_setup_sections): Don't trim reloc sections from
> 	groups.
> 	(_bfd_elf_init_reloc_shdr): Pass sec_hdr, use it to copy SHF_GROUP
> 	flag from section.
> 	(elf_fake_sections): Adjust calls.  Exit immediately on failure.
> 	(bfd_elf_set_group_contents): Add associated reloc section indices
> 	to group contents
> gas/
> 	PR 21167
> 	* config/obj-elf.c (struct group_list): Delete elt_count.
> 	(groups): New static.
> 	(build_group_lists): Don't count elements.
> 	(elf_adjust_symtab): Use groups rather than auto list.  Set up
> 	pointer from group member to SHT_GROUP section.  Don't size
> 	SHT_GROUP section or clean up here..
> 	(elf_frob_file_after_relocs): ..do so here instead.
> 	* testsuite/gas/arc/jli-1.d,
> 	* testsuite/gas/elf/groupautob.d,
> 	* testsuite/gas/mips/compact-eh-eb-2.d,
> 	* testsuite/gas/mips/compact-eh-eb-5.d,
> 	* testsuite/gas/mips/compact-eh-el-2.d,
> 	* testsuite/gas/mips/compact-eh-el-5.d: Adjust.
> ld/
> 	PR 21167
> 	* testsuite/ld-elf/group9b.d: Adjust for relocs included in group.
>

I am checking in this patch to add an assembler test.

-- 
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Add-an-assembler-test-for-PR-gas-21167.patch
Type: text/x-patch
Size: 2206 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20171005/25ec8fb5/attachment.bin>


More information about the Binutils mailing list