Index: ELF/Driver.cpp =================================================================== --- ELF/Driver.cpp +++ ELF/Driver.cpp @@ -434,6 +434,13 @@ return DiscardPolicy::None; } +static StringRef getDynamicLinkerOption(opt::InputArgList &Args) { + auto *Arg = Args.getLastArg(OPT_dynamic_linker, OPT_no_dynamic_linker); + if (!Arg || Arg->getOption().getID() == OPT_no_dynamic_linker) + return ""; + return Arg->getValue(); +} + static StripPolicy getStripOption(opt::InputArgList &Args) { if (auto *Arg = Args.getLastArg(OPT_strip_all, OPT_strip_debug)) { if (Arg->getOption().getID() == OPT_strip_all) @@ -548,8 +555,7 @@ Config->Trace = Args.hasArg(OPT_trace); Config->Verbose = Args.hasArg(OPT_verbose); Config->WarnCommon = Args.hasArg(OPT_warn_common); - - Config->DynamicLinker = getString(Args, OPT_dynamic_linker); + Config->DynamicLinker = getDynamicLinkerOption(Args); Config->Entry = getString(Args, OPT_entry); Config->Fini = getString(Args, OPT_fini, "_fini"); Config->Init = getString(Args, OPT_init, "_init"); Index: ELF/Options.td =================================================================== --- ELF/Options.td +++ ELF/Options.td @@ -148,6 +148,8 @@ def no_demangle: F<"no-demangle">, HelpText<"Do not demangle symbol names">; +def no_dynamic_linker: F<"no-dynamic-linker">; + def no_export_dynamic: F<"no-export-dynamic">; def no_fatal_warnings: F<"no-fatal-warnings">; @@ -357,7 +359,6 @@ def no_allow_shlib_undefined: F<"no-allow-shlib-undefined">; def no_copy_dt_needed_entries: F<"no-copy-dt-needed-entries">, Alias; -def no_dynamic_linker: F<"no-dynamic-linker">; def no_mmap_output_file: F<"no-mmap-output-file">; def no_warn_common: F<"no-warn-common">; def no_warn_mismatch: F<"no-warn-mismatch">; Index: test/ELF/no-dynamic-linker.s =================================================================== --- test/ELF/no-dynamic-linker.s +++ test/ELF/no-dynamic-linker.s @@ -0,0 +1,12 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/shared.s -o %tso.o +# RUN: ld.lld -shared %tso.o -o %t.so +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o + +# RUN: ld.lld -dynamic-linker foo --no-dynamic-linker %t.o %t.so -o %t +# RUN: llvm-readobj --program-headers %t | FileCheck %s --check-prefix=NODL +# NODL-NOT: PT_INTERP + +# RUN: ld.lld --no-dynamic-linker -dynamic-linker foo %t.o %t.so -o %t +# RUN: llvm-readobj --program-headers %t | FileCheck %s --check-prefix=WITHDL +# WITHDL: PT_INTERP