[PATCH] elf: Support multiple PT_GNU_RELRO segments

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Tue Jul 7 19:52:22 GMT 2026



On 07/07/26 15:17, Justin Rivera wrote:
> On Mon, Jul 6, 2026 at 5:15 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>>
>> On Tue, Jul 7, 2026 at 5:11 AM Justin Rivera <jnrivera@google.com> wrote:
>>>
>>> Hello,
>>>
>>> While this patch appears to be working as intended, I had a question
>>> regarding any additions to the test suite for testing RELRO behavior.
>>>
>>> This patch modifies elf/tst-relro-symbols.py, which can statically check
>>> ELF headers. However, there don't seem to be any dynamic checks that would
>>> work for multiple RELRO segments. We were able to do some ad-hoc testing
>>> with some hand-written assembly, but getting something working within the
>>> test suite seemed to be a bit trickier. (Often ran into
>>> `/usr/bin/ld: foo.so: warning: unable to allocate any sections to PT_GNU_RELRO segment`
>>> without some additional patching hack, for example).
>>>
>>> Are there any suggestions on how to best test the behavior changed by this patch?
>>
>> We should add the linker support first.  Linker can have an option
>> to generate multiple PT_GNU_RELRO segments for small binaries.
>>
>>
>> H.J.
> 
> Hi,
> 
> Could you provide some more details regarding adding linker support?
> If you could point me toward
> the right place in binutils as well, that'd help tons.
> 
> Also, just for additional context, we were able to test this change
> locally via a hand-written
> assembly ELF binary. We bypassed the GNU linker to emit an ELF file
> with two `PT_GNU_RELRO`
> segments, and used it to dynamically verify that the loader calls
> protects both segments. We proved
> this via a shell script that checks for segfaults when the binary
> attempts to illegally write to either protected segment.
> 
> Is this something that can be useful for the glibc test suite if
> cleaned up? Or would you prefer to hold
> off on this glibc patch entirely until explicit linker support is landed?

We already have scripts/tst-elf-edit.py which creates synthetic DSO with
different alignments, so a platform agnostic testing framework could work.

Is these hand-written assembly arch-specific or can you make them generic
(so we can test onany supported ABI)? 

One possibility is to create the tests (ET_EXEC/ET_DYN) with some extra dummy
DT_NEEDED tags by linking with -Wl,--as-needed and some libraries, and then 
post-processing it and replace it with PT_GNU_RELRO tags.

The mold linker has --spare-dynamic-tags=N, but unfortunately we can not rely
on it for testing.



More information about the Libc-alpha mailing list