From: Rafael Espindola Date: Thu, 8 Dec 2016 16:20:29 +0000 (+0000) Subject: Handle C++ names in anon scripts. X-Git-Tag: llvmorg-4.0.0-rc1~2637 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=361da4cef7df3cbcd2b4ada8e1cd489a1181b5f8;p=platform%2Fupstream%2Fllvm.git Handle C++ names in anon scripts. llvm-svn: 289066 --- diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index 3e6a3bc..e25bf33 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -622,11 +622,11 @@ std::vector SymbolTable::findAll(SymbolVersion Ver) { template void SymbolTable::handleAnonymousVersion() { for (SymbolVersion &Ver : Config->VersionScriptGlobals) { if (Ver.HasWildcard) { - for (SymbolBody *B : findAll(Ver.Name)) + for (SymbolBody *B : findAll(Ver)) B->symbol()->VersionId = VER_NDX_GLOBAL; continue; } - if (SymbolBody *B = find(Ver.Name)) + for (SymbolBody *B : find(Ver)) B->symbol()->VersionId = VER_NDX_GLOBAL; } } diff --git a/lld/test/ELF/version-script-extern-wildcards-anon.s b/lld/test/ELF/version-script-extern-wildcards-anon.s new file mode 100644 index 0000000..790d985e --- /dev/null +++ b/lld/test/ELF/version-script-extern-wildcards-anon.s @@ -0,0 +1,62 @@ +# REQUIRES: x86 + +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o +# RUN: echo '{ \ +# RUN: global: \ +# RUN: _Z3bari; \ +# RUN: extern "C++" { \ +# RUN: "foo(int)"; \ +# RUN: z*; \ +# RUN: }; \ +# RUN: local: *; \ +# RUN: }; ' > %t.script +# RUN: ld.lld --version-script %t.script -shared %t.o -o %t.so +# RUN: llvm-readobj -dyn-symbols %t.so | FileCheck %s + +# CHECK: DynamicSymbols [ +# CHECK-NEXT: Symbol { +# CHECK-NEXT: Name: +# CHECK-NEXT: Value: +# CHECK-NEXT: Size: +# CHECK-NEXT: Binding: Local +# CHECK-NEXT: Type: +# CHECK-NEXT: Other: +# CHECK-NEXT: Section: +# CHECK-NEXT: } +# CHECK-NEXT: Symbol { +# CHECK-NEXT: Name: _Z3bari +# CHECK-NEXT: Value: +# CHECK-NEXT: Size: +# CHECK-NEXT: Binding: Global +# CHECK-NEXT: Type: +# CHECK-NEXT: Other: +# CHECK-NEXT: Section: +# CHECK-NEXT: } +# CHECK-NEXT: Symbol { +# CHECK-NEXT: Name: _Z3fooi +# CHECK-NEXT: Value: +# CHECK-NEXT: Size: +# CHECK-NEXT: Binding: Global +# CHECK-NEXT: Type: +# CHECK-NEXT: Other: +# CHECK-NEXT: Section: +# CHECK-NEXT: } +# CHECK-NEXT: Symbol { +# CHECK-NEXT: Name: _Z3zedi +# CHECK-NEXT: Value: +# CHECK-NEXT: Size: +# CHECK-NEXT: Binding: Global +# CHECK-NEXT: Type: +# CHECK-NEXT: Other: +# CHECK-NEXT: Section: +# CHECK-NEXT: } +# CHECK-NEXT: ] + +.global _Z3fooi +_Z3fooi: +.global _Z3bari +_Z3bari: +.global _Z3zedi +_Z3zedi: +.global _Z3bazi +_Z3bazi: