diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h --- a/lld/ELF/Config.h +++ b/lld/ELF/Config.h @@ -70,6 +70,9 @@ // For -z *stack enum class GnuStackKind { None, Exec, NoExec }; +// For --power10-stub +enum class P10Stub { Default, No }; + struct SymbolVersion { llvm::StringRef name; bool isExternCpp; @@ -250,6 +253,7 @@ UnresolvedPolicy unresolvedSymbols; UnresolvedPolicy unresolvedSymbolsInShlib; Target2Policy target2; + P10Stub Power10Stub; ARMVFPArgKind armVFPArgs = ARMVFPArgKind::Default; BuildIdKind buildId = BuildIdKind::None; SeparateSegmentKind zSeparate; diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -760,6 +760,23 @@ return OrphanHandlingPolicy::Place; } +static P10Stub getP10StubOpt(opt::InputArgList &args) { + + bool NoP10 = args.hasArg(OPT_no_power10_stubs); + + StringRef SelectedOpt = args.getLastArgValue(OPT_power10_stubs_eq); + + if (SelectedOpt == "no") + return P10Stub::No; + + if (!args.hasArg(OPT_power10_stubs_eq)) { + if (NoP10) + return P10Stub::No; + } + + return P10Stub::Default; +} + // Parse --build-id or --build-id=