Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ELF][MC] Set types of aliases of IFunc to STT_GNU_IFUNC
``` .type foo,@gnu_indirect_function .set foo,foo_resolver .set foo2,foo .set foo3,foo2 ``` The types of foo2 and foo3 should be STT_GNU_IFUNC, but we currently resolve them to the type of foo_resolver. This patch fixes it. Differential Revision: https://reviews.llvm.org/D67206 Patch by Senran Zhang llvm-svn: 371312
- Loading branch information
Showing
2 changed files
with
47 additions
and
0 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 |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readelf -s | FileCheck %s | ||
.text | ||
|
||
.type foo_impl,@function | ||
foo_impl: | ||
ret | ||
|
||
.type foo_resolver,@function | ||
foo_resolver: | ||
mov $foo_impl, %rax | ||
ret | ||
|
||
.type foo,@gnu_indirect_function | ||
.set foo,foo_resolver | ||
|
||
// All things below should be IFunc identical to 'foo' | ||
.set foo2,foo | ||
.set foo3,foo2 | ||
.type foo4,@function | ||
.set foo4,foo3 | ||
|
||
// But tls_object should not be IFunc | ||
.set tls,foo | ||
.type tls,@tls_object | ||
|
||
// CHECK: IFUNC LOCAL DEFAULT 2 foo | ||
// CHECK: IFUNC LOCAL DEFAULT 2 foo2 | ||
// CHECK: IFUNC LOCAL DEFAULT 2 foo3 | ||
// CHECK: IFUNC LOCAL DEFAULT 2 foo4 | ||
// CHECK: FUNC LOCAL DEFAULT 2 foo_impl | ||
// CHECK: FUNC LOCAL DEFAULT 2 foo_resolver | ||
// CHECK: TLS LOCAL DEFAULT 2 tls |