This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] ld: provide __ehdr_start magic symbol
On Tue, Jun 19, 2012 at 7:29 PM, Alan Modra <amodra@gmail.com> wrote:
> For other linker PROVIDEd symbols, we don't test for undefweak. ?ie. a
> weak reference stays undefined.
That's not what I see.
$ cat s.s
.section frobozz,"a",%progbits
.weak etext
.weak __start_frobozz
.weak __stop_frobozz
.dc.a __start_frobozz
.dc.a __stop_frobozz
.dc.a etext
$ ./gas/as-new -o s.o s.s
$ nm s.o
w __start_frobozz
w __stop_frobozz
w etext
$ ./ld/ld-new -o s s.o
./ld/ld-new: warning: cannot find entry symbol _start; defaulting to
0000000000400078
$ nm s
0000000000601000 R __bss_start
0000000000400078 A __start_frobozz
0000000000400090 R __stop_frobozz
0000000000601000 R _edata
0000000000601000 R _end
U _start
0000000000400078 R etext
$
> I've just recently changed a lot of places where the linker defines
> symbols that hold a virtual address to *not* use absolute symbols.
> Absolute syms shouldn't be relocated by ld.so. ?They are currently,
> but if this is ever fixed your __ehdr_start sym won't relocate when a
> shared lib or pie is loaded at some address other than the one it was
> linked at.
I guess I'd expect PIC code using this symbol to always use PC-relative or
GOT-relative relocs (i.e. __attribute__ ((visibility ("hidden"))) in C) and
thus get correct link-time resolution. Using a dynamic reloc for
__ehdr_start is liable to find one belonging to another object that has
sloppy exports.
> Maybe
> ? ? ? ? ?if (hdrs_segment->count != 0)
> ? ? ? ? ? ?{
> ? ? ? ? ? ? ?asection *s = hdrs_segment->sections[0];
> ? ? ? ? ? ? ?hash->root.u.def.value = filehdr_vaddr - s->vma;
> ? ? ? ? ? ? ?hash->root.u.def.section = s;
> ? ? ? ? ? ?}
> and look through other elf_segment_map entries for the lowest vma
> section if you happen to have ehdr in a segment by itself, falling
> back to bfd_abs_section_ptr if there are no sections.
The headers won't ever be inside a section, I don't think. (I don't know
how to write a linker script such that they would be.) Do you really mean
that it should use a section-relative symbol with a value outside the section?
I don't think that's really kosher ELF (elflint certainly doesn't like it).
Thanks,
Roland