[lld] r315658 - Slightly simplify code and add comment.
Ed Maste via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 18 09:53:54 PST 2017
On 18 December 2017 at 12:19, Rafael Avila de Espindola
<rafael.espindola at gmail.com> wrote:
> I have a testcase and it is trivial
>
> ------------------------------------
> movl bar at GOT(%eax), %eax
>
> .data
> .globl bar
> bar:
> .long 42
> ------------------------------------
>
> I will add it to lld, but I am trying to understand why writing the
> symbol value of a preemptible symbol is required.
>
> Since the value is preemptible, the dynamic linker has to lookup the
> symbol to implement R_386_GLOB_DAT, no?
Sigh, this looks like an equivalent issue to the one that affected
amd64, fixed by https://reviews.freebsd.org/rS312288 based on your
suggestion. That is, the failure comes from rtld before the dynamic
linker had an opportunity to populate the got.
So as a side effect of Rui's change i386 lld behaves as ld.bfd and
ld.gold do, even though nothing requires this as far as I know. That
said, other consumers might expect this and thus I suspect it's worth
keeping it and adding the test, but I should also change FreeBSD's
i386 rtld to avoid relying on underspecified behaviour.
More information about the llvm-commits
mailing list