[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