From 9af852afd57eefae0bb01953fd6e25257da15714 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Fri, 6 Sep 2019 00:53:28 +0000 Subject: [PATCH] [llvm-readobj][yaml2obj] Support SHT_LLVM_SYMPART, SHT_LLVM_PART_EHDR and SHT_LLVM_PART_PHDR 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@371157 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Object/ELF.cpp | 2 ++ lib/ObjectYAML/ELFYAML.cpp | 3 +++ .../tools/llvm-readobj/elf-section-types.test | 20 +++++++++++++++++++ tools/llvm-readobj/ELFDumper.cpp | 6 ++++++ 4 files changed, 31 insertions(+) diff --git a/lib/Object/ELF.cpp b/lib/Object/ELF.cpp index 8660b1a64bd..d491288579d 100644 --- a/lib/Object/ELF.cpp +++ b/lib/Object/ELF.cpp @@ -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); diff --git a/lib/ObjectYAML/ELFYAML.cpp b/lib/ObjectYAML/ELFYAML.cpp index 30d4c0505a9..9214a0d025c 100644 --- a/lib/ObjectYAML/ELFYAML.cpp +++ b/lib/ObjectYAML/ELFYAML.cpp @@ -463,6 +463,9 @@ void ScalarEnumerationTraits::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); diff --git a/test/tools/llvm-readobj/elf-section-types.test b/test/tools/llvm-readobj/elf-section-types.test index 9b3e350173f..2c4e921456a 100644 --- a/test/tools/llvm-readobj/elf-section-types.test +++ b/test/tools/llvm-readobj/elf-section-types.test @@ -51,6 +51,14 @@ # 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 @@ -107,6 +115,10 @@ # 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 diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index bc173607e7b..eb3239ec2fd 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -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"; -- 2.50.1