[PATCH] D97186: [XCOFF][llvm-dwarfdump] support llvm-dwarfdump for XCOFF DWARF

ChenZheng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 22 00:55:53 PST 2021


shchenz created this revision.
shchenz added reviewers: jsji, daltenty, ZarkoCA, jasonliu, jdoerfert, PowerPC, hubert.reinterpretcast.
Herald added a subscriber: hiraditya.
shchenz requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Adds support for XCOFF DWARF for `llvm-dwarfdump` tool.

The patch is made by @hubert.reinterpretcast

The test case is added D97184 <https://reviews.llvm.org/D97184>. Seems we have to test `llvm-dwarfdump` and XCOFF DWARF support together. Otherwise, no existing ways to generate DWARF info for `llvm-dwarfdump`


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D97186

Files:
  llvm/include/llvm/Object/Binary.h
  llvm/include/llvm/Object/XCOFFObjectFile.h
  llvm/lib/Object/XCOFFObjectFile.cpp


Index: llvm/lib/Object/XCOFFObjectFile.cpp
===================================================================
--- llvm/lib/Object/XCOFFObjectFile.cpp
+++ llvm/lib/Object/XCOFFObjectFile.cpp
@@ -11,6 +11,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/Object/XCOFFObjectFile.h"
+#include "llvm/ADT/StringSwitch.h"
 #include "llvm/MC/SubtargetFeature.h"
 #include "llvm/Support/DataExtractor.h"
 #include <cstddef>
@@ -296,9 +297,7 @@
 }
 
 bool XCOFFObjectFile::isSectionCompressed(DataRefImpl Sec) const {
-  bool Result = false;
-  llvm_unreachable("Not yet implemented!");
-  return Result;
+  return false;
 }
 
 bool XCOFFObjectFile::isSectionText(DataRefImpl Sec) const {
@@ -458,6 +457,22 @@
   return 0;
 }
 
+StringRef XCOFFObjectFile::mapDebugSectionName(StringRef Name) const {
+  return StringSwitch<StringRef>(Name)
+      .Case("dwinfo", "debug_info")
+      .Case("dwline", "debug_line")
+      .Case("dwpbnms", "debug_pubnames")
+      .Case("dwpbtyp", "debug_pubtypes")
+      .Case("dwarnge", "debug_aranges")
+      .Case("dwabrev", "debug_abbrev")
+      .Case("dwstr", "debug_str")
+      .Case("dwrnges", "debug_ranges")
+      .Case("dwloc", "debug_loc")
+      .Case("dwframe", "debug_frame")
+      .Case("dwmac", "debug_macinfo")
+      .Default(Name);
+}
+
 size_t XCOFFObjectFile::getFileHeaderSize() const {
   return is64Bit() ? sizeof(XCOFFFileHeader64) : sizeof(XCOFFFileHeader32);
 }
Index: llvm/include/llvm/Object/XCOFFObjectFile.h
===================================================================
--- llvm/include/llvm/Object/XCOFFObjectFile.h
+++ llvm/include/llvm/Object/XCOFFObjectFile.h
@@ -317,6 +317,7 @@
   Triple::ArchType getArch() const override;
   SubtargetFeatures getFeatures() const override;
   Expected<uint64_t> getStartAddress() const override;
+  StringRef mapDebugSectionName(StringRef Name) const override;
   bool isRelocatableObject() const override;
 
   // Below here is the non-inherited interface.
Index: llvm/include/llvm/Object/Binary.h
===================================================================
--- llvm/include/llvm/Object/Binary.h
+++ llvm/include/llvm/Object/Binary.h
@@ -147,7 +147,8 @@
 
   bool isLittleEndian() const {
     return !(TypeID == ID_ELF32B || TypeID == ID_ELF64B ||
-             TypeID == ID_MachO32B || TypeID == ID_MachO64B);
+             TypeID == ID_MachO32B || TypeID == ID_MachO64B ||
+             TypeID == ID_XCOFF32 || TypeID == ID_XCOFF64);
   }
 
   bool isWinRes() const { return TypeID == ID_WinRes; }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D97186.325390.patch
Type: text/x-patch
Size: 2573 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210222/ba1646f1/attachment.bin>


More information about the llvm-commits mailing list