RFC: [PATCH] ELF: Don't require section header on ELF objects
H.J. Lu
hjl.tools@gmail.com
Tue Mar 10 00:14:18 GMT 2020
On Mon, Mar 9, 2020 at 3:43 PM Alan Modra <amodra@gmail.com> wrote:
>
> On Tue, Mar 10, 2020 at 12:24:51AM +1030, Kaylee Blake wrote:
> > On 10/3/20 12:14 am, Alan Modra wrote:
> > > On Mon, Mar 09, 2020 at 11:24:44PM +1030, Kaylee Blake wrote:
> > >> On 9/3/20 6:43 pm, Florian Weimer wrote:
> > >>> In my opinion, it should NOT be possible to link against objects
> > >>> without section headers. Lack of section headers clearly marks the
> > >>> object as a run-time only object. This is useful if you want to
> > >>> prevent developers to create DT_NEEDED dependencies on internal
> > >>> libraries, for example.
> > >
> > > I agree.
> > >
> > >> For shared objects without debug symbols, the section header table is
> > >> ~2kB on average of redundant data. I'm also not a fan of the
> > >> inconsistency of having shared libraries that the dynamic linker is
> > >> perfectly happy to load, but ld can't link against, especially since
> > >> this seems like an oversight rather than an intended design decision.
> > >
> > > The ELF spec designed things that way. See figure 4.1 which I'll try
> > > to represent in text.
> > >
> > > Figure 4-1: Object File Format
> > >
> > > |----------------------| |----------------------|
> > > | ELF Header | | ELF Header |
> > > |----------------------| |----------------------|
> > > | Program header table | | Program header table |
> > > | optional | | required |
> > > |----------------------| |----------------------|
> > > | Section 1 | | Segment 1 |
> > > |----------------------| |----------------------|
> > > | ... | | Segment 2 |
> > > |----------------------| |----------------------|
> > > | Section n | | Segment 3 |
> > > |----------------------| |----------------------|
> > > | ... | | ... |
> > > |----------------------| |----------------------|
> > > | Section header table | | Section header table |
> > > | required | | optional |
> > > |----------------------| |----------------------|
> > > Linking View Execution View
> > >
> >
> > I had interpreted that table in combination to various other references
> > to which things are required vs optional in shared objects as meaning
> > that the "execution view" applied to executables and shared objects, and
> > the "linking view" applied to relocatable objects. You're saying that
> > that table should be interpreted as saying that if a shared object is to
> > be linkable, the spec is requiring it to have both sets of headers?
>
> Yes. Just below the table: "Files used during linking must have a
> section header table".
>
I posted a new set of patches without linker support for PT_DYNAMIC:
https://sourceware.org/pipermail/binutils/2020-March/110157.html
--
H.J.
More information about the Binutils
mailing list