diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2018-02-02 17:17:39 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2018-02-02 17:17:39 +0000 |
commit | bfe30614ffaf5e094974474c76afdc8baebcb02f (patch) | |
tree | 82f8f656dc014d96db3d48e2653f3ad167a475c0 /test/CodeGen/dso-local-executable.c | |
parent | b1dff4f2e3e7fee4c31322bf652fd583a775796b (diff) | |
download | clang-bfe30614ffaf5e094974474c76afdc8baebcb02f.tar.gz |
Start setting dso_local in clang.
This starts adding dso_local to clang.
The hope is to eventually have TargetMachine::shouldAssumeDsoLocal go
away. My objective for now is to move enough of it to clang to remove
the need for the TargetMachine one to handle PIE copy relocations and
-fno-plt. With that it should then be easy to implement a
-fno-copy-reloc in clang.
This patch just adds the cases where we assume a symbol to be local
based on the file being compiled for an executable or a shared
library.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@324107 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/dso-local-executable.c')
-rw-r--r-- | test/CodeGen/dso-local-executable.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test/CodeGen/dso-local-executable.c b/test/CodeGen/dso-local-executable.c new file mode 100644 index 0000000000..2fbdb0773d --- /dev/null +++ b/test/CodeGen/dso-local-executable.c @@ -0,0 +1,59 @@ +// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -mrelocation-model static %s -o - | FileCheck --check-prefix=STATIC %s +// STATIC-DAG: @bar = external dso_local global i32 +// STATIC-DAG: @weak_bar = extern_weak dso_local global i32 +// STATIC-DAG: declare dso_local void @foo() +// STATIC-DAG: @baz = dso_local global i32 42 +// STATIC-DAG: define dso_local i32* @zed() + +// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie -mpie-copy-relocations %s -o - | FileCheck --check-prefix=PIE-COPY %s +// PIE-COPY-DAG: @bar = external dso_local global i32 +// PIE-COPY-DAG: @weak_bar = extern_weak global i32 +// PIE-COPY-DAG: declare dso_local void @foo() +// PIE-COPY-DAG: @baz = dso_local global i32 42 +// PIE-COPY-DAG: define dso_local i32* @zed() + +// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie %s -o - | FileCheck --check-prefix=PIE %s +// PIE-DAG: @bar = external global i32 +// PIE-DAG: @weak_bar = extern_weak global i32 +// PIE-DAG: declare dso_local void @foo() +// PIE-DAG: @baz = dso_local global i32 42 +// PIE-DAG: define dso_local i32* @zed() + +// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -mrelocation-model static -fno-plt %s -o - | FileCheck --check-prefix=NOPLT %s +// NOPLT-DAG: @bar = external dso_local global i32 +// NOPLT-DAG: @weak_bar = extern_weak dso_local global i32 +// NOPLT-DAG: declare void @foo() +// NOPLT-DAG: @baz = dso_local global i32 42 +// NOPLT-DAG: define dso_local i32* @zed() + +// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -fno-plt -pic-is-pie -mpie-copy-relocations %s -o - | FileCheck --check-prefix=PIE-COPY-NOPLT %s +// PIE-COPY-NOPLT-DAG: @bar = external dso_local global i32 +// PIE-COPY-NOPLT-DAG: @weak_bar = extern_weak global i32 +// PIE-COPY-NOPLT-DAG: declare void @foo() +// PIE-COPY-NOPLT-DAG: @baz = dso_local global i32 42 +// PIE-COPY-NOPLT-DAG: define dso_local i32* @zed() + +// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie -fno-plt %s -o - | FileCheck --check-prefix=PIE-NO-PLT %s +// RUN: %clang_cc1 -triple powerpc64le-pc-linux -emit-llvm -mrelocation-model static %s -o - | FileCheck --check-prefix=PIE-NO-PLT %s +// PIE-NO-PLT-DAG: @bar = external global i32 +// PIE-NO-PLT-DAG: @weak_bar = extern_weak global i32 +// PIE-NO-PLT-DAG: declare void @foo() +// PIE-NO-PLT-DAG: @baz = dso_local global i32 42 +// PIE-NO-PLT-DAG: define dso_local i32* @zed() + +// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm %s -o - | FileCheck --check-prefix=SHARED %s +// SHARED-DAG: @bar = external global i32 +// SHARED-DAG: @weak_bar = extern_weak global i32 +// SHARED-DAG: declare void @foo() +// SHARED-DAG: @baz = global i32 42 +// SHARED-DAG: define i32* @zed() + +extern int bar; +__attribute__((weak)) extern int weak_bar; +void foo(void); + +int baz = 42; +int *zed() { + foo(); + return baz ? &weak_bar : &bar; +} |