Author: Tobias Hieta Date: 2020-12-29T09:16:32+01:00 New Revision: bb798f2a85a50991ed05aa10d4146f5855d9b24f
URL: https://github.com/llvm/llvm-project/commit/bb798f2a85a50991ed05aa10d4146f5855d9b24f DIFF: https://github.com/llvm/llvm-project/commit/bb798f2a85a50991ed05aa10d4146f5855d9b24f.diff LOG: Add support for -delete_all_rpaths to llvm-install-name-tool Added: Modified: llvm/tools/llvm-objcopy/CopyConfig.cpp llvm/tools/llvm-objcopy/CopyConfig.h llvm/tools/llvm-objcopy/InstallNameToolOpts.td llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp Removed: ################################################################################ diff --git a/llvm/tools/llvm-objcopy/CopyConfig.cpp b/llvm/tools/llvm-objcopy/CopyConfig.cpp index 1fde54dd290a..f9a3b030dc64 100644 --- a/llvm/tools/llvm-objcopy/CopyConfig.cpp +++ b/llvm/tools/llvm-objcopy/CopyConfig.cpp @@ -909,6 +909,8 @@ parseInstallNameToolOptions(ArrayRef<const char *> ArgsArr) { Config.InstallNamesToUpdate.insert({Arg->getValue(0), Arg->getValue(1)}); } + Config.RemoveAllRpaths = InputArgs.hasArg(INSTALL_NAME_TOOL_delete_all_rpaths); + SmallVector<StringRef, 2> Positional; for (auto Arg : InputArgs.filtered(INSTALL_NAME_TOOL_UNKNOWN)) return createStringError(errc::invalid_argument, "unknown argument '%s'", diff --git a/llvm/tools/llvm-objcopy/CopyConfig.h b/llvm/tools/llvm-objcopy/CopyConfig.h index 1341dd674c7b..44acbb62d90b 100644 --- a/llvm/tools/llvm-objcopy/CopyConfig.h +++ b/llvm/tools/llvm-objcopy/CopyConfig.h @@ -230,6 +230,9 @@ struct CopyConfig { bool StripUnneeded = false; bool Weaken = false; bool DecompressDebugSections = false; + // install-name-tool's delete_all_rpaths + bool RemoveAllRpaths = false; + DebugCompressionType CompressionType = DebugCompressionType::None; // parseELFConfig performs ELF-specific command-line parsing. Fills `ELF` on diff --git a/llvm/tools/llvm-objcopy/InstallNameToolOpts.td b/llvm/tools/llvm-objcopy/InstallNameToolOpts.td index 04ffe62c42fc..97236cf623b7 100644 --- a/llvm/tools/llvm-objcopy/InstallNameToolOpts.td +++ b/llvm/tools/llvm-objcopy/InstallNameToolOpts.td @@ -21,6 +21,9 @@ def add_rpath : Option<["-", "--"], "add_rpath", KIND_SEPARATE>, def delete_rpath: Option<["-", "--"], "delete_rpath", KIND_SEPARATE>, HelpText<"Delete specified rpath">; +def delete_all_rpaths: Flag<["--"], "delete_all_rpaths">, + HelpText<"Delete all rpath directives">; + def rpath: MultiArg<["-", "--"], "rpath", 2>, HelpText<"Change rpath path name">; diff --git a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp index 5ca5b133572b..c0615e6b84ba 100644 --- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp +++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp @@ -133,9 +133,16 @@ static Error processLoadCommands(const CopyConfig &Config, Object &Obj) { DenseSet<StringRef> RPathsToRemove(Config.RPathsToRemove.begin(), Config.RPathsToRemove.end()); - LoadCommandPred RemovePred = [&RPathsToRemove](const LoadCommand &LC) { + LoadCommandPred RemovePred = [&RPathsToRemove, &Config](const LoadCommand &LC) { if (LC.MachOLoadCommand.load_command_data.cmd == MachO::LC_RPATH) { + // When removing all RPaths we don't need to care + // about what it contains + if (Config.RemoveAllRpaths) { + return true; + } + StringRef RPath = getPayloadString(LC); + if (RPathsToRemove.count(RPath)) { RPathsToRemove.erase(RPath); return true; _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits