diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-01-25 18:29:16 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-01-25 18:29:16 +0000 |
commit | b17bc536d3e53a62aeea3dbd62c0a160e536891f (patch) | |
tree | 49c920721014f4af06c85d148aa9c3be4bac0cd6 | |
parent | 0aa1ccb0d91967ea77f83d210609e632234cc8ef (diff) | |
download | bcm5719-llvm-b17bc536d3e53a62aeea3dbd62c0a160e536891f.tar.gz bcm5719-llvm-b17bc536d3e53a62aeea3dbd62c0a160e536891f.zip |
Pass --wrap=pthread_create to linker for -fsplit-stack.
From
https://gcc.gnu.org/ml/gcc-patches/2010-09/msg01807.html
-fsplit-stack should pass --wrap=pthread_create to linker for -fsplit-stack
It is needed to initialize the stack guard. This fixes PR 20148.
Patch by H.J Lu!
llvm-svn: 258698
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 3 | ||||
-rw-r--r-- | clang/test/Driver/split-stack-ld.c | 17 |
2 files changed, 20 insertions, 0 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 6a1517f1807..574bf5cd77d 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -9001,6 +9001,9 @@ void gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (WantPthread && !isAndroid) CmdArgs.push_back("-lpthread"); + if (Args.hasArg(options::OPT_fsplit_stack)) + CmdArgs.push_back("--wrap=pthread_create"); + CmdArgs.push_back("-lc"); if (Args.hasArg(options::OPT_static)) diff --git a/clang/test/Driver/split-stack-ld.c b/clang/test/Driver/split-stack-ld.c new file mode 100644 index 00000000000..3441d542cb8 --- /dev/null +++ b/clang/test/Driver/split-stack-ld.c @@ -0,0 +1,17 @@ +// Test split stack ld flags. +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -target i386-unknown-linux -fsplit-stack \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: --sysroot=%S/Inputs/basic_linux_tree \ +// RUN: | FileCheck --check-prefix=CHECK-LINUX-I386 %s +// +// CHECK-LINUX-I386: "--wrap=pthread_create" +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -target x86_64-unknown-linux -fsplit-stack \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: --sysroot=%S/Inputs/basic_linux_tree \ +// RUN: | FileCheck --check-prefix=CHECK-LINUX-X86-64 %s +// +// CHECK-LINUX-X86-64: "--wrap=pthread_create" |