-
Notifications
You must be signed in to change notification settings - Fork 11k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ELF] -r: don't parse @ (symbol versioning) for .symver inline asm in…
… bitcode Fixes PR46420 Similar to 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. Reviewed By: grimar, psmith Differential Revision: https://reviews.llvm.org/D82433
- Loading branch information
Showing
2 changed files
with
22 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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: {{[1-9]}} foo@@VER1 | ||
|
||
;; For relocatable output, @ should be retained in the symbol name. | ||
;; Don't parse and drop `@VER1`. Also check that --version-script is ignored. | ||
; 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: {{[1-9]}} foo@@VER1 | ||
; RELOCATABLE-NEXT: UND bar@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" |