[lld] r280947 - Handle globs in global symbol names.

Sean Silva via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 8 12:04:34 PDT 2016


The glob `*` can match zero, one, or many characters. Can you make sure
that the test covers those cases?

Currently this test only verifies that it matches a single character, and
the test would pass if we treated `foo*` as `foo?`.

-- Sean Silva

On Thu, Sep 8, 2016 at 7:50 AM, Rafael Espindola via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: rafael
> Date: Thu Sep  8 09:50:55 2016
> New Revision: 280947
>
> URL: http://llvm.org/viewvc/llvm-project?rev=280947&view=rev
> Log:
> Handle globs in global symbol names.
>
> Fixes pr28775.
>
> Added:
>     lld/trunk/test/ELF/version-script-glob.s
> Modified:
>     lld/trunk/ELF/SymbolTable.cpp
>
> Modified: lld/trunk/ELF/SymbolTable.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/
> SymbolTable.cpp?rev=280947&r1=280946&r2=280947&view=diff
> ============================================================
> ==================
> --- lld/trunk/ELF/SymbolTable.cpp (original)
> +++ lld/trunk/ELF/SymbolTable.cpp Thu Sep  8 09:50:55 2016
> @@ -640,9 +640,21 @@ template <class ELFT> void SymbolTable<E
>    // in the form of { global: foo; bar; local *; }. So, local is default.
>    // Here, we make specified symbols global.
>    if (!Config->VersionScriptGlobals.empty()) {
> -    for (SymbolVersion &Sym : Config->VersionScriptGlobals)
> +    std::vector<StringRef> Globs;
> +    for (SymbolVersion &Sym : Config->VersionScriptGlobals) {
> +      if (hasWildcard(Sym.Name)) {
> +        Globs.push_back(Sym.Name);
> +        continue;
> +      }
>        if (SymbolBody *B = find(Sym.Name))
>          B->symbol()->VersionId = VER_NDX_GLOBAL;
> +    }
> +    if (Globs.empty())
> +      return;
> +    Regex Re = compileGlobPatterns(Globs);
> +    std::vector<SymbolBody *> Syms = findAll(Re);
> +    for (SymbolBody *B : Syms)
> +      B->symbol()->VersionId = VER_NDX_GLOBAL;
>      return;
>    }
>
>
> Added: lld/trunk/test/ELF/version-script-glob.s
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/
> version-script-glob.s?rev=280947&view=auto
> ============================================================
> ==================
> --- lld/trunk/test/ELF/version-script-glob.s (added)
> +++ lld/trunk/test/ELF/version-script-glob.s Thu Sep  8 09:50:55 2016
> @@ -0,0 +1,45 @@
> +# REQUIRES: x86
> +
> +# RUN: echo "{ global: foo*; bar*; local: *; };" > %t.script
> +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
> +# RUN: ld.lld -shared --version-script %t.script %t.o -o %t.so
> +# RUN: llvm-readobj -dyn-symbols %t.so | FileCheck %s
> +
> +        .globl foo1
> +foo1:
> +
> +        .globl bar1
> +bar1:
> +
> +        .globl zed1
> +zed1:
> +
> +# CHECK:      DynamicSymbols [
> +# CHECK-NEXT:   Symbol {
> +# CHECK-NEXT:     Name:
> +# CHECK-NEXT:     Value: 0x0
> +# CHECK-NEXT:     Size: 0
> +# CHECK-NEXT:     Binding: Local
> +# CHECK-NEXT:     Type: None
> +# CHECK-NEXT:     Other: 0
> +# CHECK-NEXT:     Section: Undefined
> +# CHECK-NEXT:   }
> +# CHECK-NEXT:   Symbol {
> +# CHECK-NEXT:     Name: bar1
> +# CHECK-NEXT:     Value: 0x1000
> +# CHECK-NEXT:     Size: 0
> +# CHECK-NEXT:     Binding: Global
> +# CHECK-NEXT:     Type: None
> +# CHECK-NEXT:     Other: 0
> +# CHECK-NEXT:     Section: .text
> +# CHECK-NEXT:   }
> +# CHECK-NEXT:   Symbol {
> +# CHECK-NEXT:     Name: foo1
> +# CHECK-NEXT:     Value: 0x1000
> +# CHECK-NEXT:     Size: 0
> +# CHECK-NEXT:     Binding: Global
> +# CHECK-NEXT:     Type: None
> +# CHECK-NEXT:     Other: 0
> +# CHECK-NEXT:     Section: .text
> +# CHECK-NEXT:   }
> +# CHECK-NEXT: ]
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160908/0967b9d4/attachment.html>


More information about the llvm-commits mailing list