Skip to content

Commit abc8f2b

Browse files
committed
[Driver] Don't passs --dynamic-linker in -r mode
No behavior change as GNU ld/gold/ld.lld ignore --dynamic-linker in -r mode. This change makes the intention clearer as we already suppress --dynamic-linker for -shared, -static, and -static-pie. Reviewed by: MaskRay, phosek Differential Revision: https://reviews.llvm.org/D129714
1 parent 0fbafb5 commit abc8f2b

File tree

12 files changed

+18
-10
lines changed

12 files changed

+18
-10
lines changed

clang/lib/Driver/ToolChains/Ananas.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ void ananas::Linker::ConstructJob(Compilation &C, const JobAction &JA,
7171
CmdArgs.push_back("-export-dynamic");
7272
if (Args.hasArg(options::OPT_shared)) {
7373
CmdArgs.push_back("-Bshareable");
74-
} else {
74+
} else if (!Args.hasArg(options::OPT_r)) {
7575
Args.AddAllArgs(CmdArgs, options::OPT_pie);
7676
CmdArgs.push_back("-dynamic-linker");
7777
CmdArgs.push_back("/lib/ld-ananas.so");

clang/lib/Driver/ToolChains/DragonFly.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ void dragonfly::Linker::ConstructJob(Compilation &C, const JobAction &JA,
6969
CmdArgs.push_back("-export-dynamic");
7070
if (Args.hasArg(options::OPT_shared))
7171
CmdArgs.push_back("-Bshareable");
72-
else {
72+
else if (!Args.hasArg(options::OPT_r)) {
7373
CmdArgs.push_back("-dynamic-linker");
7474
CmdArgs.push_back("/usr/libexec/ld-elf.so.2");
7575
}

clang/lib/Driver/ToolChains/FreeBSD.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
170170
CmdArgs.push_back("-export-dynamic");
171171
if (Args.hasArg(options::OPT_shared)) {
172172
CmdArgs.push_back("-Bshareable");
173-
} else {
173+
} else if (!Args.hasArg(options::OPT_r)) {
174174
CmdArgs.push_back("-dynamic-linker");
175175
CmdArgs.push_back("/libexec/ld-elf.so.1");
176176
}

clang/lib/Driver/ToolChains/Fuchsia.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ void fuchsia::Linker::ConstructJob(Compilation &C, const JobAction &JA,
101101

102102
const SanitizerArgs &SanArgs = ToolChain.getSanitizerArgs(Args);
103103

104-
if (!Args.hasArg(options::OPT_shared)) {
104+
if (!Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_r)) {
105105
std::string Dyld = D.DyldPrefix;
106106
if (SanArgs.needsAsanRt() && SanArgs.needsSharedRt())
107107
Dyld += "asan/";

clang/lib/Driver/ToolChains/NetBSD.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
139139
CmdArgs.push_back("-export-dynamic");
140140
if (Args.hasArg(options::OPT_shared)) {
141141
CmdArgs.push_back("-Bshareable");
142-
} else {
142+
} else if (!Args.hasArg(options::OPT_r)) {
143143
Args.AddAllArgs(CmdArgs, options::OPT_pie);
144144
CmdArgs.push_back("-dynamic-linker");
145145
CmdArgs.push_back("/libexec/ld.elf_so");

clang/lib/Driver/ToolChains/OpenBSD.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ void openbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
147147
CmdArgs.push_back("-Bdynamic");
148148
if (Args.hasArg(options::OPT_shared)) {
149149
CmdArgs.push_back("-shared");
150-
} else {
150+
} else if (!Args.hasArg(options::OPT_r)) {
151151
CmdArgs.push_back("-dynamic-linker");
152152
CmdArgs.push_back("/usr/libexec/ld.so");
153153
}

clang/test/Driver/ananas.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
// CHECK-SHARED: crtendS.o
1717
// CHECK-SHARED: crtn.o
1818

19-
// -r suppresses default -l and crt*.o like -nostdlib.
19+
// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib.
2020
// RUN: %clang %s -### -o %t.o --target=x86_64-unknown-ananas -r 2>&1 \
2121
// RUN: | FileCheck %s --check-prefix=CHECK-RELOCATABLE
2222
// CHECK-RELOCATABLE: "-r"
23+
// CHECK-RELOCATABLE-NOT: "-pie"
24+
// CHECK-RELOCATABLE-NOT: "-dynamic-linker"
2325
// CHECK-RELOCATABLE-NOT: "-l
2426
// CHECK-RELOCATABLE-NOT: /crt{{[^.]+}}.o

clang/test/Driver/dragonfly.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
// CHECK: "-cc1" "-triple" "x86_64-pc-dragonfly"
55
// CHECK: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/usr/libexec/ld-elf.so.{{.*}}" "--hash-style=gnu" "--enable-new-dtags" "-o" "a.out" "{{.*}}crt1.o" "{{.*}}crti.o" "{{.*}}crtbegin.o" "{{.*}}.o" "-L{{.*}}gcc{{.*}}" "-rpath" "{{.*}}gcc{{.*}}" "-lc" "-lgcc" "{{.*}}crtend.o" "{{.*}}crtn.o"
66

7-
// -r suppresses default -l and crt*.o like -nostdlib.
7+
// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib.
88
// RUN: %clang -### %s --target=x86_64-pc-dragonfly -r \
99
// RUN: 2>&1 | FileCheck %s --check-prefix=RELOCATABLE
1010
// RELOCATABLE: "-r"
11+
// RELOCATABLE-NOT: "-dynamic-linker"
1112
// RELOCATABLE-NOT: "-l
1213
// RELOCATABLE-NOT: {{.*}}crt{{[^./]+}}.o

clang/test/Driver/freebsd.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,10 @@
206206
// RUN: FileCheck -check-prefix=PPC64-MUNWIND %s
207207
// PPC64-MUNWIND: "-funwind-tables=2"
208208

209-
/// -r suppresses default -l and crt*.o like -nostdlib.
209+
/// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib.
210210
// RUN: %clang -### %s --target=aarch64-pc-freebsd11 -r \
211211
// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree 2>&1 | FileCheck %s --check-prefix=RELOCATABLE
212212
// RELOCATABLE: "-r"
213+
// RELOCATABLE-NOT: "-dynamic-linker"
213214
// RELOCATABLE-NOT: "-l
214215
// RELOCATABLE-NOT: crt{{[^./]+}}.o

clang/test/Driver/fuchsia.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
// RUN: | FileCheck %s -check-prefix=CHECK-RELOCATABLE
8787
// CHECK-RELOCATABLE-NOT: "-pie"
8888
// CHECK-RELOCATABLE-NOT: "--build-id"
89+
// CHECK-RELOCATABLE-NOT "-dynamic-linker"
8990
// CHECK-RELOCATABLE: "-r"
9091
// CHECK-RELOCATABLE-NOT: "-l
9192
// CHECK-RELOCATABLE-NOT: crt{{[^./]+}}.o

clang/test/Driver/netbsd.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,10 +468,12 @@
468468
// RUN: | FileCheck -check-prefix=POWERPC-SECUREPLT %s
469469
// POWERPC-SECUREPLT: "-target-feature" "+secure-plt"
470470

471-
// -r suppresses default -l and crt*.o like -nostdlib.
471+
// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib.
472472
// RUN: %clang --target=x86_64-unknown-netbsd -r \
473473
// RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
474474
// RUN: | FileCheck -check-prefix=RELOCATABLE %s
475475
// RELOCATABLE: "-r"
476+
// RELOCATABLE-NOT: "-pie"
477+
// RELOCATABLE-NOT: "-dynamic-linker"
476478
// RELOCATABLE-NOT: "-l
477479
// RELOCATABLE-NOT: crt{{[^./]+}}.o

clang/test/Driver/openbsd.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
// RUN: %clang --target=mips64el-unknown-openbsd -### %s 2>&1 \
3838
// RUN: | FileCheck --check-prefix=CHECK-MIPS64EL-LD %s
3939
// CHECK-LD-R: "-r"
40+
// CHECK-LD-R-NOT: "-dynamic-linker"
4041
// CHECK-LD-R-NOT: "-l
4142
// CHECK-LD-R-NOT: crt{{[^./]+}}.o
4243
// CHECK-LD-S: "-cc1" "-triple" "i686-pc-openbsd"

0 commit comments

Comments
 (0)