mirror of https://github.com/microsoft/clang.git
Don't enable PIE on i686-unknown-cloudabi.
We're only going to provide support for using PIE on architectures that provide PC-relative addressing. i686 is not one of those, so add the necessary bits for only passing in -pie -zrelro conditionally. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@278395 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0882cc1ad8
commit
e5174eea26
|
@ -3344,6 +3344,19 @@ Tool *CloudABI::buildLinker() const {
|
|||
return new tools::cloudabi::Linker(*this);
|
||||
}
|
||||
|
||||
bool CloudABI::isPIEDefault() const {
|
||||
// Only enable PIE on architectures that support PC-relative
|
||||
// addressing. PC-relative addressing is required, as the process
|
||||
// startup code must be able to relocate itself.
|
||||
switch (getTriple().getArch()) {
|
||||
case llvm::Triple::aarch64:
|
||||
case llvm::Triple::x86_64:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
SanitizerMask CloudABI::getSupportedSanitizers() const {
|
||||
SanitizerMask Res = ToolChain::getSupportedSanitizers();
|
||||
Res |= SanitizerKind::SafeStack;
|
||||
|
|
|
@ -632,8 +632,7 @@ public:
|
|||
void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
|
||||
llvm::opt::ArgStringList &CmdArgs) const override;
|
||||
|
||||
bool isPIEDefault() const override { return true; }
|
||||
|
||||
bool isPIEDefault() const override;
|
||||
SanitizerMask getSupportedSanitizers() const override;
|
||||
SanitizerMask getDefaultSanitizers() const override;
|
||||
|
||||
|
|
|
@ -7523,11 +7523,13 @@ void cloudabi::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
|
||||
// CloudABI only supports static linkage.
|
||||
CmdArgs.push_back("-Bstatic");
|
||||
|
||||
// CloudABI uses Position Independent Executables exclusively.
|
||||
CmdArgs.push_back("-pie");
|
||||
CmdArgs.push_back("--no-dynamic-linker");
|
||||
CmdArgs.push_back("-zrelro");
|
||||
|
||||
// Provide PIE linker flags in case PIE is default for the architecture.
|
||||
if (ToolChain.isPIEDefault()) {
|
||||
CmdArgs.push_back("-pie");
|
||||
CmdArgs.push_back("-zrelro");
|
||||
}
|
||||
|
||||
CmdArgs.push_back("--eh-frame-hdr");
|
||||
CmdArgs.push_back("--gc-sections");
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
// RUN: %clang %s -### -target x86_64-unknown-cloudabi 2>&1 | FileCheck %s -check-prefix=SAFESTACK
|
||||
// SAFESTACK: "-cc1" "-triple" "x86_64-unknown-cloudabi" {{.*}} "-ffunction-sections" "-fdata-sections" {{.*}} "-fsanitize=safe-stack"
|
||||
// SAFESTACK: "-Bstatic" "-pie" "--no-dynamic-linker" "-zrelro" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
// SAFESTACK: "-Bstatic" "--no-dynamic-linker" "-pie" "-zrelro" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
|
||||
// RUN: %clang %s -### -target x86_64-unknown-cloudabi -fno-sanitize=safe-stack 2>&1 | FileCheck %s -check-prefix=NOSAFESTACK
|
||||
// NOSAFESTACK: "-cc1" "-triple" "x86_64-unknown-cloudabi" {{.*}} "-ffunction-sections" "-fdata-sections"
|
||||
// NOSAFESTACK-NOT: "-fsanitize=safe-stack"
|
||||
// NOSAFESTACK: "-Bstatic" "-pie" "--no-dynamic-linker" "-zrelro" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
// NOSAFESTACK: "-Bstatic" "--no-dynamic-linker" "-pie" "-zrelro" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
|
||||
// PIE shouldn't be enabled on i686. Just on architectures that provide
|
||||
// PC-relative addressing.
|
||||
// RUN: %clang %s -### -target i686-unknown-cloudabi 2>&1 | FileCheck %s -check-prefix=NOPIE
|
||||
// NOPIE: "-cc1" "-triple" "i686-unknown-cloudabi" {{.*}} "-ffunction-sections" "-fdata-sections" {{.*}} "-fsanitize=safe-stack"
|
||||
// NOPIE: "-Bstatic" "--no-dynamic-linker" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
// RUN: %clangxx %s -### -target x86_64-unknown-cloudabi 2>&1 | FileCheck %s -check-prefix=SAFESTACK
|
||||
// SAFESTACK: "-cc1" "-triple" "x86_64-unknown-cloudabi" {{.*}} "-ffunction-sections" "-fdata-sections" {{.*}} "-fsanitize=safe-stack"
|
||||
// SAFESTACK: "-Bstatic" "-pie" "--no-dynamic-linker" "-zrelro" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc++" "-lc++abi" "-lunwind" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
// SAFESTACK: "-Bstatic" "--no-dynamic-linker" "-pie" "-zrelro" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc++" "-lc++abi" "-lunwind" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
|
||||
// RUN: %clangxx %s -### -target x86_64-unknown-cloudabi -fno-sanitize=safe-stack 2>&1 | FileCheck %s -check-prefix=NOSAFESTACk
|
||||
// RUN: %clangxx %s -### -target x86_64-unknown-cloudabi -fno-sanitize=safe-stack 2>&1 | FileCheck %s -check-prefix=NOSAFESTACK
|
||||
// NOSAFESTACK: "-cc1" "-triple" "x86_64-unknown-cloudabi" {{.*}} "-ffunction-sections" "-fdata-sections"
|
||||
// NOSAFESTACK-NOT: "-fsanitize=safe-stack"
|
||||
// NOSAFESTACk: "-Bstatic" "-pie" "--no-dynamic-linker" "-zrelro" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc++" "-lc++abi" "-lunwind" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
// NOSAFESTACK: "-Bstatic" "--no-dynamic-linker" "-pie" "-zrelro" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc++" "-lc++abi" "-lunwind" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
|
||||
// PIE shouldn't be enabled on i686. Just on architectures that provide
|
||||
// PC-relative addressing.
|
||||
// RUN: %clangxx %s -### -target i686-unknown-cloudabi 2>&1 | FileCheck %s -check-prefix=NOPIE
|
||||
// NOPIE: "-cc1" "-triple" "i686-unknown-cloudabi" {{.*}} "-ffunction-sections" "-fdata-sections" {{.*}} "-fsanitize=safe-stack"
|
||||
// NOPIE: "-Bstatic" "--no-dynamic-linker" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc++" "-lc++abi" "-lunwind" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
|
|
Loading…
Reference in New Issue