diff --git a/clang/lib/Driver/ToolChains/Ananas.cpp b/clang/lib/Driver/ToolChains/Ananas.cpp --- a/clang/lib/Driver/ToolChains/Ananas.cpp +++ b/clang/lib/Driver/ToolChains/Ananas.cpp @@ -71,7 +71,7 @@ CmdArgs.push_back("-export-dynamic"); if (Args.hasArg(options::OPT_shared)) { CmdArgs.push_back("-Bshareable"); - } else { + } else if (!Args.hasArg(options::OPT_r)) { Args.AddAllArgs(CmdArgs, options::OPT_pie); CmdArgs.push_back("-dynamic-linker"); CmdArgs.push_back("/lib/ld-ananas.so"); diff --git a/clang/lib/Driver/ToolChains/DragonFly.cpp b/clang/lib/Driver/ToolChains/DragonFly.cpp --- a/clang/lib/Driver/ToolChains/DragonFly.cpp +++ b/clang/lib/Driver/ToolChains/DragonFly.cpp @@ -69,7 +69,7 @@ CmdArgs.push_back("-export-dynamic"); if (Args.hasArg(options::OPT_shared)) CmdArgs.push_back("-Bshareable"); - else { + else if (!Args.hasArg(options::OPT_r)) { CmdArgs.push_back("-dynamic-linker"); CmdArgs.push_back("/usr/libexec/ld-elf.so.2"); } diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp b/clang/lib/Driver/ToolChains/FreeBSD.cpp --- a/clang/lib/Driver/ToolChains/FreeBSD.cpp +++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -170,7 +170,7 @@ CmdArgs.push_back("-export-dynamic"); if (Args.hasArg(options::OPT_shared)) { CmdArgs.push_back("-Bshareable"); - } else { + } else if (!Args.hasArg(options::OPT_r)) { CmdArgs.push_back("-dynamic-linker"); CmdArgs.push_back("/libexec/ld-elf.so.1"); } diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp b/clang/lib/Driver/ToolChains/Fuchsia.cpp --- a/clang/lib/Driver/ToolChains/Fuchsia.cpp +++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp @@ -101,7 +101,7 @@ const SanitizerArgs &SanArgs = ToolChain.getSanitizerArgs(Args); - if (!Args.hasArg(options::OPT_shared)) { + if (!Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_r)) { std::string Dyld = D.DyldPrefix; if (SanArgs.needsAsanRt() && SanArgs.needsSharedRt()) Dyld += "asan/"; diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp b/clang/lib/Driver/ToolChains/NetBSD.cpp --- a/clang/lib/Driver/ToolChains/NetBSD.cpp +++ b/clang/lib/Driver/ToolChains/NetBSD.cpp @@ -139,7 +139,7 @@ CmdArgs.push_back("-export-dynamic"); if (Args.hasArg(options::OPT_shared)) { CmdArgs.push_back("-Bshareable"); - } else { + } else if (!Args.hasArg(options::OPT_r)) { Args.AddAllArgs(CmdArgs, options::OPT_pie); CmdArgs.push_back("-dynamic-linker"); CmdArgs.push_back("/libexec/ld.elf_so"); diff --git a/clang/lib/Driver/ToolChains/OpenBSD.cpp b/clang/lib/Driver/ToolChains/OpenBSD.cpp --- a/clang/lib/Driver/ToolChains/OpenBSD.cpp +++ b/clang/lib/Driver/ToolChains/OpenBSD.cpp @@ -147,7 +147,7 @@ CmdArgs.push_back("-Bdynamic"); if (Args.hasArg(options::OPT_shared)) { CmdArgs.push_back("-shared"); - } else { + } else if (!Args.hasArg(options::OPT_r)) { CmdArgs.push_back("-dynamic-linker"); CmdArgs.push_back("/usr/libexec/ld.so"); } diff --git a/clang/test/Driver/ananas.c b/clang/test/Driver/ananas.c --- a/clang/test/Driver/ananas.c +++ b/clang/test/Driver/ananas.c @@ -16,9 +16,11 @@ // CHECK-SHARED: crtendS.o // CHECK-SHARED: crtn.o -// -r suppresses default -l and crt*.o like -nostdlib. +// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib. // RUN: %clang %s -### -o %t.o --target=x86_64-unknown-ananas -r 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-RELOCATABLE // CHECK-RELOCATABLE: "-r" +// CHECK-RELOCATABLE-NOT: "-pie" +// CHECK-RELOCATABLE-NOT: "-dynamic-linker" // CHECK-RELOCATABLE-NOT: "-l // CHECK-RELOCATABLE-NOT: /crt{{[^.]+}}.o diff --git a/clang/test/Driver/dragonfly.c b/clang/test/Driver/dragonfly.c --- a/clang/test/Driver/dragonfly.c +++ b/clang/test/Driver/dragonfly.c @@ -4,9 +4,10 @@ // CHECK: "-cc1" "-triple" "x86_64-pc-dragonfly" // 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" -// -r suppresses default -l and crt*.o like -nostdlib. +// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib. // RUN: %clang -### %s --target=x86_64-pc-dragonfly -r \ // RUN: 2>&1 | FileCheck %s --check-prefix=RELOCATABLE // RELOCATABLE: "-r" +// RELOCATABLE-NOT: "-dynamic-linker" // RELOCATABLE-NOT: "-l // RELOCATABLE-NOT: {{.*}}crt{{[^./]+}}.o diff --git a/clang/test/Driver/freebsd.c b/clang/test/Driver/freebsd.c --- a/clang/test/Driver/freebsd.c +++ b/clang/test/Driver/freebsd.c @@ -206,9 +206,10 @@ // RUN: FileCheck -check-prefix=PPC64-MUNWIND %s // PPC64-MUNWIND: "-funwind-tables=2" -/// -r suppresses default -l and crt*.o like -nostdlib. +/// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib. // RUN: %clang -### %s --target=aarch64-pc-freebsd11 -r \ // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree 2>&1 | FileCheck %s --check-prefix=RELOCATABLE // RELOCATABLE: "-r" +// RELOCATABLE-NOT: "-dynamic-linker" // RELOCATABLE-NOT: "-l // RELOCATABLE-NOT: crt{{[^./]+}}.o diff --git a/clang/test/Driver/fuchsia.c b/clang/test/Driver/fuchsia.c --- a/clang/test/Driver/fuchsia.c +++ b/clang/test/Driver/fuchsia.c @@ -86,6 +86,7 @@ // RUN: | FileCheck %s -check-prefix=CHECK-RELOCATABLE // CHECK-RELOCATABLE-NOT: "-pie" // CHECK-RELOCATABLE-NOT: "--build-id" +// CHECK-RELOCATABLE-NOT "-dynamic-linker" // CHECK-RELOCATABLE: "-r" // CHECK-RELOCATABLE-NOT: "-l // CHECK-RELOCATABLE-NOT: crt{{[^./]+}}.o diff --git a/clang/test/Driver/netbsd.c b/clang/test/Driver/netbsd.c --- a/clang/test/Driver/netbsd.c +++ b/clang/test/Driver/netbsd.c @@ -468,10 +468,12 @@ // RUN: | FileCheck -check-prefix=POWERPC-SECUREPLT %s // POWERPC-SECUREPLT: "-target-feature" "+secure-plt" -// -r suppresses default -l and crt*.o like -nostdlib. +// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib. // RUN: %clang --target=x86_64-unknown-netbsd -r \ // RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=RELOCATABLE %s // RELOCATABLE: "-r" +// RELOCATABLE-NOT: "-pie" +// RELOCATABLE-NOT: "-dynamic-linker" // RELOCATABLE-NOT: "-l // RELOCATABLE-NOT: crt{{[^./]+}}.o diff --git a/clang/test/Driver/openbsd.c b/clang/test/Driver/openbsd.c --- a/clang/test/Driver/openbsd.c +++ b/clang/test/Driver/openbsd.c @@ -37,6 +37,7 @@ // RUN: %clang --target=mips64el-unknown-openbsd -### %s 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-MIPS64EL-LD %s // CHECK-LD-R: "-r" +// CHECK-LD-R-NOT: "-dynamic-linker" // CHECK-LD-R-NOT: "-l // CHECK-LD-R-NOT: crt{{[^./]+}}.o // CHECK-LD-S: "-cc1" "-triple" "i686-pc-openbsd"