summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
diff options
context:
space:
mode:
authorSeiya Nuta <nuta@seiya.me>2019-10-28 15:40:37 +0900
committerSeiya Nuta <nuta@seiya.me>2019-10-28 16:00:20 +0900
commit7f19dd1ebff0456feaf18437bb231856b6e49b5c (patch)
treecd2df1153e4fec073471b5347977b359ba8bddec /llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
parentf4d7caf6df819d18b4d5b460d21f7f8fe1e1b705 (diff)
downloadbcm5719-llvm-7f19dd1ebff0456feaf18437bb231856b6e49b5c.tar.gz
bcm5719-llvm-7f19dd1ebff0456feaf18437bb231856b6e49b5c.zip
[llvm-objcopy][MachO] Implement --only-section
Reviewers: alexshap, rupprecht, jdoerfert, jhenderson Reviewed By: alexshap, rupprecht, jhenderson Subscribers: mgorny, jakehehrlich, abrachet, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D65541
Diffstat (limited to 'llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp')
-rw-r--r--llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
index 6d586e7d73f..73983a175a9 100644
--- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
+++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
@@ -18,6 +18,19 @@ namespace objcopy {
namespace macho {
using namespace object;
+using SectionPred = std::function<bool(const Section &Sec)>;
+
+static void removeSections(const CopyConfig &Config, Object &Obj) {
+ SectionPred RemovePred = [](const Section &) { return false; };
+
+ if (!Config.OnlySection.empty()) {
+ RemovePred = [&Config, RemovePred](const Section &Sec) {
+ return !Config.OnlySection.matches(Sec.CanonicalName);
+ };
+ }
+
+ return Obj.removeSections(RemovePred);
+}
static Error handleArgs(const CopyConfig &Config, Object &Obj) {
if (Config.AllowBrokenLinks || !Config.BuildIdLinkDir.empty() ||
@@ -25,11 +38,10 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj) {
!Config.SplitDWO.empty() || !Config.SymbolsPrefix.empty() ||
!Config.AllocSectionsPrefix.empty() || !Config.AddSection.empty() ||
!Config.DumpSection.empty() || !Config.KeepSection.empty() ||
- Config.NewSymbolVisibility || !Config.OnlySection.empty() ||
- !Config.SymbolsToGlobalize.empty() || !Config.SymbolsToKeep.empty() ||
- !Config.SymbolsToLocalize.empty() || !Config.SymbolsToWeaken.empty() ||
- !Config.SymbolsToKeepGlobal.empty() || !Config.SectionsToRename.empty() ||
- !Config.SymbolsToRename.empty() ||
+ Config.NewSymbolVisibility || !Config.SymbolsToGlobalize.empty() ||
+ !Config.SymbolsToKeep.empty() || !Config.SymbolsToLocalize.empty() ||
+ !Config.SymbolsToWeaken.empty() || !Config.SymbolsToKeepGlobal.empty() ||
+ !Config.SectionsToRename.empty() || !Config.SymbolsToRename.empty() ||
!Config.UnneededSymbolsToRemove.empty() ||
!Config.SetSectionAlignment.empty() || !Config.SetSectionFlags.empty() ||
!Config.ToRemove.empty() || Config.ExtractDWO || Config.KeepFileSymbols ||
@@ -43,6 +55,7 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj) {
"option not supported by llvm-objcopy for MachO");
}
+ removeSections(Config, Obj);
return Error::success();
}
OpenPOWER on IntegriCloud