[PATCH] D82433: [ELF] -r: don't parse @ (symbol versioning) for .symver inline asm in bitcode
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 23 23:11:41 PDT 2020
MaskRay created this revision.
MaskRay added reviewers: grimar, psmith, ruiu.
Herald added subscribers: llvm-commits, dmgreen, dexonsmith, steven_wu, hiraditya, arichardson, emaste.
Herald added a reviewer: espindola.
Herald added a project: LLVM.
MaskRay updated this revision to Diff 272917.
MaskRay added a comment.
Fix a comment and improve test
Fixes PR46420
Similar to D43307 <https://reviews.llvm.org/D43307> for non-LTO.
Module-level inline assembly can use .symver to create a symbol with `@` in the name.
For relocatable output, @ should be retained in the symbol name. `@ver` should
not be parsed and dropped.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D82433
Files:
lld/ELF/Driver.cpp
lld/test/ELF/lto/version-script2.ll
Index: lld/test/ELF/lto/version-script2.ll
===================================================================
--- lld/test/ELF/lto/version-script2.ll
+++ lld/test/ELF/lto/version-script2.ll
@@ -1,18 +1,30 @@
; REQUIRES: x86
-;; Test we parse symbol versions before LTO, otherwise we may get a symbol
-;; named "foo@@VER1", but not "foo" with the version VER1.
+;; For non-relocatable output, Test we parse symbol versions after LTO,
+;; otherwise we may get a symbol named "foo@@VER1", but not "foo" with the
+;; version VER1.
; RUN: llvm-as %s -o %t.o
; RUN: echo "VER1 {};" > %t.script
; RUN: ld.lld %t.o -o %t.so -shared --version-script %t.script
-; RUN: llvm-readobj --dyn-syms %t.so | FileCheck %s
+; RUN: llvm-readelf --dyn-syms %t.so | FileCheck %s
-; CHECK: Name: foo@@VER1 (
+;; For non-relocatable output, @ in symbol names has no effect on undefined symbols.
+; CHECK: UND bar{{$}}
+; CHECK-NEXT: [[#SHNDX:]] foo@@VER1
+
+;; For relocatable output, @ should be retained in the symbol name.
+;; Don't parse and drop `@VER1`.
+; RUN: ld.lld %t.o -o %t.ro -r --version-script %t.script
+; RUN: llvm-readelf -s %t.ro | FileCheck %s --check-prefix=RELOCATABLE
+
+; RELOCATABLE: [[#SHNDX:]] foo@@VER1
+; RELOCATABLE-NEXT: UND bar at VER1
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
module asm ".global foo"
-module asm "foo:"
+module asm "foo: call bar"
module asm ".symver foo,foo@@@VER1"
+module asm ".symver bar,bar@@@VER1"
Index: lld/ELF/Driver.cpp
===================================================================
--- lld/ELF/Driver.cpp
+++ lld/ELF/Driver.cpp
@@ -1717,8 +1717,11 @@
for (InputFile *file : lto->compile()) {
auto *obj = cast<ObjFile<ELFT>>(file);
obj->parse(/*ignoreComdats=*/true);
- for (Symbol *sym : obj->getGlobalSymbols())
- sym->parseSymbolVersion();
+
+ // Parse '@' in symbol names for non-relocatable output.
+ if (!config->relocatable)
+ for (Symbol *sym : obj->getGlobalSymbols())
+ sym->parseSymbolVersion();
objectFiles.push_back(file);
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82433.272917.patch
Type: text/x-patch
Size: 2166 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200624/8f836917/attachment-0001.bin>
More information about the llvm-commits
mailing list