Index: Driver.cpp =================================================================== --- Driver.cpp +++ Driver.cpp @@ -166,7 +166,6 @@ Config->Shared = Args.hasArg(OPT_shared); Config->Verbose = Args.hasArg(OPT_verbose); - Config->DynamicLinker = getString(Args, OPT_dynamic_linker); Config->Entry = getString(Args, OPT_entry); Config->Fini = getString(Args, OPT_fini, "_fini"); Config->Init = getString(Args, OPT_init, "_init"); @@ -216,6 +215,9 @@ SymbolTable Symtab; Target.reset(createTarget()); + Config->DynamicLinker = + getString(Args, OPT_dynamic_linker, Target->getDefaultInterpreter()); + if (!Config->Shared) { // Add entry symbol. Config->EntrySym = Symtab.addUndefined( Index: Target.h =================================================================== --- Target.h +++ Target.h @@ -20,6 +20,7 @@ class TargetInfo { public: + llvm::StringRef getDefaultInterpreter() const { return DefaultEnterpreter; } llvm::StringRef getDefaultEntry() const { return DefaultEntry; } unsigned getPageSize() const { return PageSize; } uint64_t getVAStart() const { return VAStart; } @@ -47,6 +48,7 @@ unsigned GotReloc; unsigned RelativeReloc; unsigned PltEntrySize = 8; + llvm::StringRef DefaultEnterpreter; llvm::StringRef DefaultEntry = "_start"; }; Index: Target.cpp =================================================================== --- Target.cpp +++ Target.cpp @@ -34,6 +34,7 @@ bool TargetInfo::isRelRelative(uint32_t Type) const { return true; } X86TargetInfo::X86TargetInfo() { + DefaultEnterpreter = "/lib/ld-linux-x86-64.so.2"; PCRelReloc = R_386_PC32; GotReloc = R_386_GLOB_DAT; GotRefReloc = R_386_GOT32; @@ -88,6 +89,7 @@ } X86_64TargetInfo::X86_64TargetInfo() { + DefaultEnterpreter = "/lib64/ld-linux-x86-64.so.2"; PCRelReloc = R_X86_64_PC32; GotReloc = R_X86_64_GLOB_DAT; GotRefReloc = R_X86_64_PC32; @@ -199,6 +201,7 @@ } PPC64TargetInfo::PPC64TargetInfo() { + // DefaultEnterpreter = FIXME; // PCRelReloc = FIXME // GotReloc = FIXME PltEntrySize = 32; @@ -234,6 +237,7 @@ } PPCTargetInfo::PPCTargetInfo() { + DefaultEnterpreter = "/lib/ld.so.1"; // PCRelReloc = FIXME // GotReloc = FIXME PageSize = 65536; @@ -251,6 +255,7 @@ uint64_t BaseAddr, uint64_t SymVA) const {} ARMTargetInfo::ARMTargetInfo() { + // DefaultEnterpreter = FIXME // PCRelReloc = FIXME // GotReloc = FIXME VAStart = 0x8000; @@ -267,6 +272,7 @@ uint64_t BaseAddr, uint64_t SymVA) const {} AArch64TargetInfo::AArch64TargetInfo() { + DefaultEnterpreter = "/lib/ld-linux-aarch64.so.1"; // PCRelReloc = FIXME // GotReloc = FIXME VAStart = 0x400000; @@ -346,6 +352,7 @@ } MipsTargetInfo::MipsTargetInfo() { + // DefaultEnterpreter = FIXME // PCRelReloc = FIXME // GotReloc = FIXME DefaultEntry = "__start";