[PATCH v2] ld: warn about PE base relocations to sections above .reloc
Jan Beulich
jbeulich@suse.com
Mon Mar 29 11:35:16 GMT 2021
On 29.03.2021 05:49, Alan Modra wrote:
> On Mon, Mar 22, 2021 at 05:49:10PM +0100, Jan Beulich via Binutils wrote:
>> Due to a bogus linker script, or perhaps because a section doesn't get
>> placed by a linker script while default placement puts it too high up,
>> sections can end up above .reloc. Since the process of determining its
>> contents (and hence its size) happens before final section placement,
>> relocations needed for such sections would no longer point at the
>> correct address in the final binary. Warn about this (down the road this
>> may want to become an error, unless size determination and content
>> creation for .reloc would get decoupled).
>>
>> Two of the testcases would actually trigger the warning, because .reloc
>> gets placed at 0 without mentioning it in their linker scripts. Extend
>> the two scripts accordingly.
>
> Both of those scripts discard .reloc. Yes, they get a vma of 0 but
> that's not really being "placed".
Oh, indeed, I'm sorry for not having paid attention.
> I think you should probably handle
> .reloc being discarded rather than, or perhaps in addition to, this
> patch.
In addition to, yes. This extra hunk would take care:
@@ -1516,7 +1516,7 @@ generate_reloc (bfd *abfd, struct bfd_li
bfd *b;
struct bfd_section *s;
- if (reloc_s == NULL)
+ if (reloc_s == NULL || reloc_s->output_section == bfd_abs_section_ptr)
return;
total_relocs = 0;
for (b = info->input_bfds; b; b = b->link.next)
But as it looks pretty unrelated to the purpose of the change and
since likely .edata would want some similar check (albeit there
I'm not sure whether, instead of bailing, we should issue a warning,
as there being exports but .edata getting discarded is unlikely to
be what is intended), I wonder whether this would better be a
separate change. Do you have any suggestion or preference here?
Jan
More information about the Binutils
mailing list