diff options
| author | Fangrui Song <maskray@google.com> | 2019-05-30 01:55:43 +0000 |
|---|---|---|
| committer | Fangrui Song <maskray@google.com> | 2019-05-30 01:55:43 +0000 |
| commit | 0666f9c4e44e0841e5f2f0913659505789604f1b (patch) | |
| tree | a2b5481c2d44b277c60c717c1660f4a66ec598fb | |
| parent | a05fda68bc5e6b42948a3e3ddf0df1e069c38c19 (diff) | |
| download | bcm5719-llvm-0666f9c4e44e0841e5f2f0913659505789604f1b.tar.gz bcm5719-llvm-0666f9c4e44e0841e5f2f0913659505789604f1b.zip | |
[Driver] -static-pie: add -z text
This matches gcc -static-pie. The intention is to prevent dynamic
relocations in read-only segments.
In ld.bfd and gold, -z notext is the default. If text relocations are needed:
* -z notext: allow and emit DF_TEXTREL.
DF_TEXTREL is not emitted if there is no text relocation.
* -z text: error
In lld, -z text is the default (this change is a no-op).
* -z text: error on text relocations
* -z notext: allow text relocations, and emit DF_TEXTREL no matter whether
text relocations exist.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D62606
llvm-svn: 362050
| -rw-r--r-- | clang/lib/Driver/ToolChains/Gnu.cpp | 2 | ||||
| -rw-r--r-- | clang/test/Driver/linux-ld.c | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 30a61d5ad12..c8520968e45 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -382,6 +382,8 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-static"); CmdArgs.push_back("-pie"); CmdArgs.push_back("--no-dynamic-linker"); + CmdArgs.push_back("-z"); + CmdArgs.push_back("text"); } if (ToolChain.isNoExecStackDefault()) { diff --git a/clang/test/Driver/linux-ld.c b/clang/test/Driver/linux-ld.c index e602c6c3237..70fc178c56b 100644 --- a/clang/test/Driver/linux-ld.c +++ b/clang/test/Driver/linux-ld.c @@ -190,6 +190,8 @@ // CHECK-CLANG-LD-STATIC-PIE: "-static" // CHECK-CLANG-LD-STATIC-PIE: "-pie" // CHECK-CLANG-LD-STATIC-PIE: "--no-dynamic-linker" +// CHECK-CLANG-LD-STATIC-PIE: "-z" +// CHECK-CLANG-LD-STATIC-PIE: "text" // CHECK-CLANG-LD-STATIC-PIE: "-m" "elf_x86_64" // CHECK-CLANG-LD-STATIC-PIE: "{{.*}}rcrt1.o" // CHECK-CLANG-LD-STATIC-PIE: "--start-group" "-lgcc" "-lgcc_eh" "-lc" "--end-group" @@ -203,6 +205,8 @@ // CHECK-CLANG-LD-STATIC-PIE-PIE: "-static" // CHECK-CLANG-LD-STATIC-PIE-PIE: "-pie" // CHECK-CLANG-LD-STATIC-PIE-PIE: "--no-dynamic-linker" +// CHECK-CLANG-LD-STATIC-PIE-PIE: "-z" +// CHECK-CLANG-LD-STATIC-PIE-PIE: "text" // CHECK-CLANG-LD-STATIC-PIE-PIE: "-m" "elf_x86_64" // CHECK-CLANG-LD-STATIC-PIE-PIE: "{{.*}}rcrt1.o" // CHECK-CLANG-LD-STATIC-PIE-PIE: "--start-group" "-lgcc" "-lgcc_eh" "-lc" "--end-group" @@ -216,6 +220,8 @@ // CHECK-CLANG-LD-STATIC-PIE-STATIC: "-static" // CHECK-CLANG-LD-STATIC-PIE-STATIC: "-pie" // CHECK-CLANG-LD-STATIC-PIE-STATIC: "--no-dynamic-linker" +// CHECK-CLANG-LD-STATIC-PIE-STATIC: "-z" +// CHECK-CLANG-LD-STATIC-PIE-STATIC: "text" // CHECK-CLANG-LD-STATIC-PIE-STATIC: "-m" "elf_x86_64" // CHECK-CLANG-LD-STATIC-PIE-STATIC: "{{.*}}rcrt1.o" // CHECK-CLANG-LD-STATIC-PIE-STATIC: "--start-group" "-lgcc" "-lgcc_eh" "-lc" "--end-group" |

