[llvm-objdump] Merging MachO DumpSections in to FilterSections. Simplifying some...
authorColin LeMahieu <colinl@codeaurora.org>
Wed, 29 Jul 2015 19:08:10 +0000 (19:08 +0000)
committerColin LeMahieu <colinl@codeaurora.org>
Wed, 29 Jul 2015 19:08:10 +0000 (19:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243556 91177308-0d34-0410-b5e6-96231b3b80d8

test/tools/llvm-objdump/section-filter.test
tools/llvm-objdump/MachODump.cpp
tools/llvm-objdump/llvm-objdump.cpp
tools/llvm-objdump/llvm-objdump.h

index 911ff5b42522c30d77dcd1b2604ea860a1020c29..9c7ab31b0d72f9893cd56678bb482a4eb7b5e6cc 100644 (file)
@@ -1,6 +1,6 @@
 // This test checks that --section works correctly
 // RUN: llvm-objdump -h %p/Inputs/section-filter.obj -j=.text \
-// RUN: -j=.bss | FileCheck %s
+// RUN: --section=.bss | FileCheck %s
 
 # CHECK: .text
 # CHECK-NOT: .data
index 04c72f4856c896e76420ca3d2ec30f93736986f4..7b868fa9d0de8716b5ab220adc14bcba4de6172d 100644 (file)
@@ -97,11 +97,6 @@ cl::opt<bool>
                        cl::desc("Print the linker optimization hints for "
                                 "Mach-O objects (requires -macho)"));
 
-cl::list<std::string>
-    llvm::DumpSections("section",
-                       cl::desc("Prints the specified segment,section for "
-                                "Mach-O objects (requires -macho)"));
-
 cl::opt<bool>
     llvm::InfoPlist("info-plist",
                     cl::desc("Print the info plist section as strings for "
@@ -1006,8 +1001,8 @@ static void DumpSectionContents(StringRef Filename, MachOObjectFile *O,
   if (verbose)
     CreateSymbolAddressMap(O, &AddrMap);
 
-  for (unsigned i = 0; i < DumpSections.size(); ++i) {
-    StringRef DumpSection = DumpSections[i];
+  for (unsigned i = 0; i < FilterSections.size(); ++i) {
+    StringRef DumpSection = FilterSections[i];
     std::pair<StringRef, StringRef> DumpSegSectName;
     DumpSegSectName = DumpSection.split(',');
     StringRef DumpSegName, DumpSectName;
@@ -1171,7 +1166,7 @@ static void ProcessMachO(StringRef Filename, MachOObjectFile *MachOOF,
   // UniversalHeaders or ArchiveHeaders.
   if (Disassemble || PrivateHeaders || ExportsTrie || Rebase || Bind ||
       LazyBind || WeakBind || IndirectSymbols || DataInCode || LinkOptHints ||
-      DylibsUsed || DylibId || ObjcMetaData || (DumpSections.size() != 0)) {
+      DylibsUsed || DylibId || ObjcMetaData || (FilterSections.size() != 0)) {
     outs() << Filename;
     if (!ArchiveMemberName.empty())
       outs() << '(' << ArchiveMemberName << ')';
@@ -1194,7 +1189,7 @@ static void ProcessMachO(StringRef Filename, MachOObjectFile *MachOOF,
     PrintSectionHeaders(MachOOF);
   if (SectionContents)
     PrintSectionContents(MachOOF);
-  if (DumpSections.size() != 0)
+  if (FilterSections.size() != 0)
     DumpSectionContents(Filename, MachOOF, !NonVerbose);
   if (InfoPlist)
     DumpInfoPlistSectionContents(Filename, MachOOF);
@@ -6065,7 +6060,7 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
     diContext.reset(new DWARFContextInMemory(*DbgObj));
   }
 
-  if (DumpSections.size() == 0)
+  if (FilterSections.size() == 0)
     outs() << "(" << DisSegName << "," << DisSectName << ") section\n";
 
   for (unsigned SectIdx = 0; SectIdx != Sections.size(); SectIdx++) {
index af8bc4a44b87ea9d1ba3ad900b8d77611af11c34..97243cb8016372a965c182195fbd8fbba2aa825b 100644 (file)
@@ -135,8 +135,13 @@ SectionHeadersShort("headers", cl::desc("Alias for --section-headers"),
 static cl::alias
 SectionHeadersShorter("h", cl::desc("Alias for --section-headers"),
                       cl::aliasopt(SectionHeaders));
+
 cl::list<std::string>
-llvm::Sections("j", cl::desc("Operate on the specified sections only"));
+llvm::FilterSections("section", cl::desc("Operate on the specified sections only. "
+                                         "With -macho dump segment,section"));
+cl::alias
+static FilterSectionsj("j", cl::desc("Alias for --section"),
+                 cl::aliasopt(llvm::FilterSections));
 
 cl::list<std::string>
 llvm::MAttrs("mattr",
@@ -175,7 +180,7 @@ static StringRef ToolName;
 static int ReturnValue = EXIT_SUCCESS;
 
 namespace {
-typedef std::function<int(llvm::object::SectionRef const &)> FilterPredicate;
+typedef std::function<bool(llvm::object::SectionRef const &)> FilterPredicate;
 
 class SectionFilterIterator {
 public:
@@ -224,20 +229,16 @@ private:
   llvm::object::ObjectFile const &Object;
 };
 SectionFilter ToolSectionFilter(llvm::object::ObjectFile const &O) {
-  if (Sections.empty()) {
-    return SectionFilter([](llvm::object::SectionRef const &) { return 0; }, O);
-  }
   return SectionFilter([](llvm::object::SectionRef const &S) {
+                         if(FilterSections.empty())
+                           return false;
                          llvm::StringRef String;
                          std::error_code error = S.getName(String);
-                         if (error) {
-                           return error.value();
-                         }
-                         if (std::find(Sections.begin(), Sections.end(),
-                                       String) != Sections.end()) {
-                           return 0;
-                         }
-                         return 1;
+                         if (error)
+                           return true;
+                         return std::find(FilterSections.begin(),
+                                          FilterSections.end(),
+                                          String) == FilterSections.end();
                        },
                        O);
 }
@@ -1616,7 +1617,7 @@ int main(int argc, char **argv) {
       && !(DylibsUsed && MachOOpt)
       && !(DylibId && MachOOpt)
       && !(ObjcMetaData && MachOOpt)
-      && !(DumpSections.size() != 0 && MachOOpt)
+      && !(FilterSections.size() != 0 && MachOOpt)
       && !PrintFaultMaps) {
     cl::PrintHelpMessage();
     return 2;
index de737f5d2e98fb8ea3ae9339cba70f9e95a44b87..b19c515d3c5ccff5cde4f04aa4c7b3b4b42c21f6 100644 (file)
@@ -25,8 +25,7 @@ extern cl::opt<std::string> TripleName;
 extern cl::opt<std::string> ArchName;
 extern cl::opt<std::string> MCPU;
 extern cl::list<std::string> MAttrs;
-extern cl::list<std::string> Sections;
-extern cl::list<std::string> DumpSections;
+extern cl::list<std::string> FilterSections;
 extern cl::opt<bool> Disassemble;
 extern cl::opt<bool> DisassembleAll;
 extern cl::opt<bool> NoShowRawInsn;