[llvm-readobj][yaml2obj] Support SHT_LLVM_SYMPART, SHT_LLVM_PART_EHDR and SHT_LLVM_PA...
authorFangrui Song <maskray@google.com>
Fri, 6 Sep 2019 00:53:28 +0000 (00:53 +0000)
committerFangrui Song <maskray@google.com>
Fri, 6 Sep 2019 00:53:28 +0000 (00:53 +0000)
See http://lists.llvm.org/pipermail/llvm-dev/2019-February/130583.html
and D60242 for the lld partition feature.

This patch:

* Teaches yaml2obj to parse the 3 section types.
* Teaches llvm-readobj/llvm-readelf to dump the 3 section types.

There is no test for SHT_LLVM_DEPENDENT_LIBRARIES in llvm-readobj. Add
it as well.

Reviewed By: thakis

Differential Revision: https://reviews.llvm.org/D67228

llvm-svn: 371157

llvm/lib/Object/ELF.cpp
llvm/lib/ObjectYAML/ELFYAML.cpp
llvm/test/tools/llvm-readobj/elf-section-types.test
llvm/tools/llvm-readobj/ELFDumper.cpp

index 8660b1a..d491288 100644 (file)
@@ -255,6 +255,8 @@ StringRef llvm::object::getELFSectionTypeName(uint32_t Machine, unsigned Type) {
     STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_ADDRSIG);
     STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_DEPENDENT_LIBRARIES);
     STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_SYMPART);
+    STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_PART_EHDR);
+    STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_PART_PHDR);
     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_ATTRIBUTES);
     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_HASH);
     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verdef);
index 30d4c05..9214a0d 100644 (file)
@@ -463,6 +463,9 @@ void ScalarEnumerationTraits<ELFYAML::ELF_SHT>::enumeration(
   ECase(SHT_LLVM_CALL_GRAPH_PROFILE);
   ECase(SHT_LLVM_ADDRSIG);
   ECase(SHT_LLVM_DEPENDENT_LIBRARIES);
+  ECase(SHT_LLVM_SYMPART);
+  ECase(SHT_LLVM_PART_EHDR);
+  ECase(SHT_LLVM_PART_PHDR);
   ECase(SHT_GNU_ATTRIBUTES);
   ECase(SHT_GNU_HASH);
   ECase(SHT_GNU_verdef);
index 9b3e350..2c4e921 100644 (file)
 # LLVM: Type: SHT_LLVM_CALL_GRAPH_PROFILE
 # LLVM: Name: llvm_addrsig
 # LLVM: Type: SHT_LLVM_ADDRSIG
+# LLVM: Name: .deplibs
+# LLVM: Type: SHT_LLVM_DEPENDENT_LIBRARIES
+# LLVM: Name: .llvm_sympart.f
+# LLVM: Type: SHT_LLVM_SYMPART
+# LLVM: Name: part1
+# LLVM: Type: SHT_LLVM_PART_EHDR
+# LLVM: Name: .phdrs
+# LLVM: Type: SHT_LLVM_PART_PHDR
 # LLVM: Name: gnu_attributes
 # LLVM: Type: SHT_GNU_ATTRIBUTES
 # LLVM: Name: gnu_hash
 # GNU-NEXT: linker_options          LLVM_LINKER_OPTIONS
 # GNU-NEXT: llvm_call_graph_profile LLVM_CALL_GRAPH_PROFILE
 # GNU-NEXT: llvm_addrsig            LLVM_ADDRSIG
+# GNU-NEXT: .deplibs                LLVM_DEPENDENT_LIBRARIES
+# GNU-NEXT: .llvm_sympart.f         LLVM_SYMPART
+# GNU-NEXT: part1                   LLVM_PART_EHDR
+# GNU-NEXT: .phdrs                  LLVM_PART_PHDR
 # GNU-NEXT: gnu_attributes          ATTRIBUTES
 # GNU-NEXT: gnu_hash                GNU_HASH
 # GNU-NEXT: gnu_verdef              VERDEF
@@ -183,6 +195,14 @@ Sections:
     Type: SHT_LLVM_CALL_GRAPH_PROFILE
   - Name: llvm_addrsig
     Type: SHT_LLVM_ADDRSIG
+  - Name: .deplibs
+    Type: SHT_LLVM_DEPENDENT_LIBRARIES
+  - Name: .llvm_sympart.f
+    Type: SHT_LLVM_SYMPART
+  - Name: part1
+    Type: SHT_LLVM_PART_EHDR
+  - Name: .phdrs
+    Type: SHT_LLVM_PART_PHDR
   - Name: gnu_attributes
     Type: SHT_GNU_ATTRIBUTES
   - Name: gnu_hash
index bc17360..eb3239e 100644 (file)
@@ -3111,6 +3111,12 @@ static std::string getSectionTypeString(unsigned Arch, unsigned Type) {
     return "LLVM_ADDRSIG";
   case SHT_LLVM_DEPENDENT_LIBRARIES:
     return "LLVM_DEPENDENT_LIBRARIES";
+  case SHT_LLVM_SYMPART:
+    return "LLVM_SYMPART";
+  case SHT_LLVM_PART_EHDR:
+    return "LLVM_PART_EHDR";
+  case SHT_LLVM_PART_PHDR:
+    return "LLVM_PART_PHDR";
   // FIXME: Parse processor specific GNU attributes
   case SHT_GNU_ATTRIBUTES:
     return "ATTRIBUTES";