RFC: [PATCH] ELF: Don't require section header on ELF objects

Alan Modra amodra@gmail.com
Mon Mar 9 02:23:09 GMT 2020
On Mon, Mar 09, 2020 at 12:29:48PM +1030, Kaylee Blake wrote:
> On 9/3/20 12:06 pm, H.J. Lu wrote:
> > On Sun, Mar 8, 2020 at 5:05 PM Alan Modra <amodra@gmail.com> wrote:
> >> Well we certainly don't do such sorting.  For example, from a freshly
> >> build ld/ld-new --enable-targets=all
> >>
> >>    148: 0000000000f08380     4 OBJECT  GLOBAL DEFAULT   25 opterr@GLIBC_2.2.5 (3)
> >>    149: 0000000000402f80     0 FUNC    GLOBAL DEFAULT  UND calloc@GLIBC_2.2.5 (3)
> >>    150: 0000000000881536    35 FUNC    GLOBAL DEFAULT   13 _obstack_allocated_p
> >>
> > 
> > I will make 2 changes:
> > 
> > 1.  Update -z nosectionheader to guarantee that the last entry in
> > dynamic symbol table
> > is defined.
> > 2.  Update --remove-section-header to issue an error if the last entry
> > in dynamic symbol
> > table is undefined.
> > 
> 
> With some testing, it seems like ld will emit an ordered symbol table
> iff it's using the DT_GNU_HASH hash table style

It doesn't.  The snippet of .dynsym I posted was from a binary with
DT_GNU_HASH.  elflink.c:_bfd_elf_link_renumber_dynsyms should convince
you that any ordering seen is by chance.

>, and my understanding is
> that DT_GNU_HASH in fact requires this behaviour.

Apparently not.  ;-)

> So in that case, we
> don't need to do an additional check, because we only need the ordering
> if we are looking up through DT_GNU_HASH instead of DT_HASH.
> 
> -- 
> Kaylee Blake <klkblake@gmail.com>
> C is the worst language, except for all the others.

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list