[PATCH] D43051: Symbols defined in linker scripts should not have dso_local flag set in LTO resolutions
Rafael Avila de Espindola via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 7 18:26:53 PST 2018
LGTM.
We can try to simplify the logic for deciding if the symbol is absolute
in a followup commit, but lets get the test passing first.
Thanks,
Rafael
Dmitry Mikulin via Phabricator <reviews at reviews.llvm.org> writes:
> dmikulin updated this revision to Diff 133350.
> dmikulin added a comment.
>
> Changed the test to create linker script with "echo" instead.
>
>
> https://reviews.llvm.org/D43051
>
> Files:
> lld/ELF/LTO.cpp
> lld/test/ELF/lto/abs-resol.ll
>
>
> Index: lld/test/ELF/lto/abs-resol.ll
> ===================================================================
> --- lld/test/ELF/lto/abs-resol.ll
> +++ lld/test/ELF/lto/abs-resol.ll
> @@ -2,7 +2,10 @@
>
> ; RUN: llvm-as %s -o %t.o
> ; RUN: llvm-mc -triple=x86_64-pc-linux %p/Inputs/absolute.s -o %t2.o -filetype=obj
> -; RUN: ld.lld %t.o %t2.o -o %t.out -pie
> +; RUN: ld.lld %t.o %t2.o -o %t3.out -pie
> +
> +; RUN: echo "blah = 0xdeadfeef;" > %t.script
> +; RUN: ld.lld %t.o -T%t.script -o %t4.out -pie
>
> target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
> target triple = "x86_64-unknown-linux-gnu"
> Index: lld/ELF/LTO.cpp
> ===================================================================
> --- lld/ELF/LTO.cpp
> +++ lld/ELF/LTO.cpp
> @@ -160,8 +160,9 @@
> // Skip absolute symbols from ELF objects, otherwise PC-rel relocations
> // will be generated by for them, triggering linker errors.
> // Symbol section is always null for bitcode symbols, hence the check
> - // for isElf().
> - !(Sym->File && Sym->File->isElf() && DR->Section == nullptr);
> + // for isElf(). Skip linker script defined symbols as well: they have
> + // no File defined.
> + !(DR->Section == nullptr && (!Sym->File || Sym->File->isElf()));
>
> if (R.Prevailing)
> undefine(Sym);
>
>
> Index: lld/test/ELF/lto/abs-resol.ll
> ===================================================================
> --- lld/test/ELF/lto/abs-resol.ll
> +++ lld/test/ELF/lto/abs-resol.ll
> @@ -2,7 +2,10 @@
>
> ; RUN: llvm-as %s -o %t.o
> ; RUN: llvm-mc -triple=x86_64-pc-linux %p/Inputs/absolute.s -o %t2.o -filetype=obj
> -; RUN: ld.lld %t.o %t2.o -o %t.out -pie
> +; RUN: ld.lld %t.o %t2.o -o %t3.out -pie
> +
> +; RUN: echo "blah = 0xdeadfeef;" > %t.script
> +; RUN: ld.lld %t.o -T%t.script -o %t4.out -pie
>
> target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
> target triple = "x86_64-unknown-linux-gnu"
> Index: lld/ELF/LTO.cpp
> ===================================================================
> --- lld/ELF/LTO.cpp
> +++ lld/ELF/LTO.cpp
> @@ -160,8 +160,9 @@
> // Skip absolute symbols from ELF objects, otherwise PC-rel relocations
> // will be generated by for them, triggering linker errors.
> // Symbol section is always null for bitcode symbols, hence the check
> - // for isElf().
> - !(Sym->File && Sym->File->isElf() && DR->Section == nullptr);
> + // for isElf(). Skip linker script defined symbols as well: they have
> + // no File defined.
> + !(DR->Section == nullptr && (!Sym->File || Sym->File->isElf()));
>
> if (R.Prevailing)
> undefine(Sym);
More information about the llvm-commits
mailing list