RFC: Risc-V: Allow assembler to adjust relocs against symbols in mergeable sections
Nick Clifton
nickc@redhat.com
Mon Jan 19 16:27:06 GMT 2026
Hi Jan,
>>>> + /* PR33723 and 33789: Allow fixups that reference symbols in
>>>> + mergeable sections to be adjusted. Disallow all others. */
>>>> + if (fixP->fx_addsy != NULL
>>>> + && (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0)
>>>> + return true;
>>> Is this actually correct for RISC-V, though? I thought that RISC-V
>>> relocations can significantly alter section layout, which means that the
>>> offset from the section start that the assembler sees may not match
>>> reality after relaxation.
>>
>> Yes, in general for sections containing code that is true. But this is
>> for relocations to sections containing mergable (debug) string
>> tables.
>
> Except that above code has no constraint towards "debug sections only".
> In fact, text (i.e. executable) sections can in principle also be
> SHF_MERGE,
Well yes, theoretically. But in practice the code section would have
to consist of code sequences that were all of exactly the same length.
So apart from a PLT or jump table, I cannot imagine how this particular
scenario could come about.
> and I'd be curious how merging and relaxing would work
> together. (What might save us right now is that iirc sections with
> relocations aren't merged [yet].)
Which is fortunate indeed.
I suppose that I could extend the patch to check that the SEC_STRINGS
flag is also set (on sections where we allow the fixups to be adjusted).
Would that be better ?
Cheers
Nick
More information about the Binutils
mailing list