Index: lib/ReaderWriter/ELF/OutputELFWriter.h =================================================================== --- lib/ReaderWriter/ELF/OutputELFWriter.h +++ lib/ReaderWriter/ELF/OutputELFWriter.h @@ -19,6 +19,7 @@ #include "lld/ReaderWriter/Writer.h" #include "llvm/ADT/StringSet.h" +#include "llvm/Support/Path.h" namespace lld { namespace elf { @@ -193,7 +194,11 @@ if (isNeededTagRequired(sla)) _soNeeded.insert(sla->loadName()); } + StringRef interpreterLib = sys::path::filename(_context.getInterpreter()); for (const auto &loadName : _soNeeded) { + // Never mark the dynamic linker as DT_NEEDED + if (loadName.getKey() == interpreterLib) + continue; Elf_Dyn dyn; dyn.d_tag = DT_NEEDED; dyn.d_un.d_val = _dynamicStringTable->addString(loadName.getKey());