RFC: Add SHT_GNU_PHDRS

H.J. Lu hjl.tools@gmail.com
Thu Sep 27 12:38:00 GMT 2018


On Thu, Sep 27, 2018 at 3:35 AM, Szabolcs Nagy <nsz@port70.net> wrote:
> * Florian Weimer <fweimer@redhat.com> [2018-09-27 10:21:40 +0200]:
>> * Jan Beulich:
>> >>>> On 27.09.18 at 07:01, <fweimer@redhat.com> wrote:
>> >> * H. J. Lu:
>> >>
>> >>> I am proposing
>> >>>
>> >>> #define SHT_GNU_PHDRS  0x6ffffff4  /* Dummy section for program header */
>> >>>
>> >>> This is a special read-only SHF_ALLOC zero-size data section.  It is the
>> >>> first output section, which will force a data PT_LOAD segment with program
>> >>> header before the code-only PT_LOAD segment,
>> >>
>> >> Is it actually a requirement in the ELF specification that all bits
>> >> loaded via segments are covered by sections as well?
>> >
>> > Hardly, because the presence of a section table isn't required
>> > in the first place in an executable (iirc).
>>
>> I think so too, and that is why I don't understand this section hack is
>> needed.
>
> if there is no read-only alloc section then the program
> headers are currently not part of a load segment.
> https://sourceware.org/bugzilla/show_bug.cgi?id=23428
>
> an alloc .phdr section covering the program headers solves
> this problem. if sections are not required for segments
> then simply the linker should ensure that there is always
> a load segment covering the program headers, possibly
> without containing any sections, however elf says
> "An object file segment contains one or more sections".
>
> i don't understand why a zero-size section is enough, what
> if phdr > pagesize? will that get covered by the load
> segment that is created for the zero-size section?

Linker must keep this zero-size section in output and
create a PT_LOAD segment to cover it even if it is
the only SHF_ALLOC section in the PT_LOAD segment.

-- 
H.J.



More information about the Binutils mailing list