HA: [lld] r249036 - [ELF2] Implement --allow-shlib-undefined as default behavior.

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 1 13:17:19 PDT 2015


Already did. http://reviews.llvm.org/D13355
________________________________________
От: Rafael Espíndola [rafael.espindola at gmail.com]
Отправлено: 1 октября 2015 г. 23:15
Кому: George Rimar
Копия: llvm-commits
Тема: Re: [lld] r249036 - [ELF2] Implement --allow-shlib-undefined as default behavior.

btw, if you want to "finish" this are you might want to consider
implementing --no-undefined.

On 1 October 2015 at 13:24, George Rimar via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: grimar
> Date: Thu Oct  1 12:24:24 2015
> New Revision: 249036
>
> URL: http://llvm.org/viewvc/llvm-project?rev=249036&view=rev
> Log:
> [ELF2] Implement --allow-shlib-undefined as default behavior.
>
> We ignore --{no,}allow-shlib-undefined options and always allow undefined
> symbols if we are building a DSO.
>
> Added:
>     lld/trunk/test/elf2/Inputs/allow-shlib-undefined.s
>     lld/trunk/test/elf2/allow-shlib-undefined.s
> Modified:
>     lld/trunk/ELF/Options.td
>     lld/trunk/ELF/Writer.cpp
>
> Modified: lld/trunk/ELF/Options.td
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Options.td?rev=249036&r1=249035&r2=249036&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Options.td (original)
> +++ lld/trunk/ELF/Options.td Thu Oct  1 12:24:24 2015
> @@ -48,6 +48,12 @@ def shared : Flag<["-"], "shared">,
>  def sysroot : Joined<["--"], "sysroot=">,
>    HelpText<"Set the system root">;
>
> +def no_allow_shlib_undefined
> +    : Flag<["--"], "no-allow-shlib-undefined">;
> +
> +def allow_shlib_undefined
> +    : Flag<["--"], "allow-shlib-undefined">;
> +
>  // Aliases
>  def alias_Bdynamic_call_shared: Flag<["-"], "call_shared">, Alias<Bdynamic>;
>  def alias_Bdynamic_dy: Flag<["-"], "dy">, Alias<Bdynamic>;
>
> Modified: lld/trunk/ELF/Writer.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=249036&r1=249035&r2=249036&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Writer.cpp (original)
> +++ lld/trunk/ELF/Writer.cpp Thu Oct  1 12:24:24 2015
> @@ -271,6 +271,9 @@ static void reportUndefined(const Symbol
>    typedef typename ELFFile<ELFT>::Elf_Sym Elf_Sym;
>    typedef typename ELFFile<ELFT>::Elf_Sym_Range Elf_Sym_Range;
>
> +  if (Config->Shared)
> +    return;
> +
>    const Elf_Sym &SymE = cast<ELFSymbolBody<ELFT>>(Sym).Sym;
>    ELFFileBase *SymFile = nullptr;
>
>
> Added: lld/trunk/test/elf2/Inputs/allow-shlib-undefined.s
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/Inputs/allow-shlib-undefined.s?rev=249036&view=auto
> ==============================================================================
> --- lld/trunk/test/elf2/Inputs/allow-shlib-undefined.s (added)
> +++ lld/trunk/test/elf2/Inputs/allow-shlib-undefined.s Thu Oct  1 12:24:24 2015
> @@ -0,0 +1,3 @@
> +.globl _shared
> +_shared:
> +  call _unresolved
>
> Added: lld/trunk/test/elf2/allow-shlib-undefined.s
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/allow-shlib-undefined.s?rev=249036&view=auto
> ==============================================================================
> --- lld/trunk/test/elf2/allow-shlib-undefined.s (added)
> +++ lld/trunk/test/elf2/allow-shlib-undefined.s Thu Oct  1 12:24:24 2015
> @@ -0,0 +1,25 @@
> +# --allow-shlib-undefined and --no-allow-shlib-undefined are fully
> +# ignored in linker implementation.
> +# --allow-shlib-undefined is set by default
> +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \
> +# RUN: %p/Inputs/allow-shlib-undefined.s -o %t
> +# RUN: lld -shared -flavor gnu2 %t -o %t.so
> +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1
> +
> +# Executable: should link with DSO containing undefined symbols in any case.
> +# RUN: lld -flavor gnu2 %t1 %t.so -o %t2
> +# RUN: lld -flavor gnu2 --no-allow-shlib-undefined %t1 %t.so -o %t2
> +# RUN: lld -flavor gnu2 --allow-shlib-undefined %t1 %t.so -o %t2
> +
> +# DSO with undefines:
> +# should link with or without any of these options.
> +# RUN: lld -shared -flavor gnu2 %t -o %t.so
> +# RUN: lld -shared --allow-shlib-undefined -flavor gnu2 %t -o %t.so
> +# RUN: lld -shared --no-allow-shlib-undefined -flavor gnu2 %t -o %t.so
> +
> +# Executable still should not link when have undefines inside.
> +# RUN: not lld -flavor gnu2 %t -o %t.so
> +
> +.globl _start
> +_start:
> +  call _shared
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list