| // 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 |