Index: include/llvm/Object/ELF.h =================================================================== --- include/llvm/Object/ELF.h +++ include/llvm/Object/ELF.h @@ -32,6 +32,7 @@ namespace object { StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type); +StringRef getELFSectionTypeName(uint32_t Machine, uint32_t Type); // Subclasses of ELFFile may need this for template instantiation inline std::pair Index: lib/Object/ELF.cpp =================================================================== --- lib/Object/ELF.cpp +++ lib/Object/ELF.cpp @@ -141,3 +141,98 @@ } #undef ELF_RELOC + +StringRef llvm::object::getELFSectionTypeName(uint32_t Machine, unsigned Type) { + switch (Machine) { + case ELF::EM_ARM: + switch (Type) { + case ELF::SHT_ARM_EXIDX: + return "SHT_ARM_EXIDX"; + case ELF::SHT_ARM_PREEMPTMAP: + return "SHT_ARM_PREEMPTMAP"; + case ELF::SHT_ARM_ATTRIBUTES: + return "SHT_ARM_ATTRIBUTES"; + case ELF::SHT_ARM_DEBUGOVERLAY: + return "SHT_ARM_DEBUGOVERLAY"; + case ELF::SHT_ARM_OVERLAYSECTION: + return "SHT_ARM_OVERLAYSECTION"; + } + break; + case ELF::EM_HEXAGON: + switch (Type) { + case ELF::SHT_HEX_ORDERED: + return "SHT_HEX_ORDERED"; + } + break; + case ELF::EM_X86_64: + switch (Type) { + case ELF::SHT_X86_64_UNWIND: + return "SHT_X86_64_UNWIND"; + } + break; + case ELF::EM_MIPS: + case ELF::EM_MIPS_RS3_LE: + switch (Type) { + case ELF::SHT_MIPS_REGINFO: + return "SHT_MIPS_REGINFO"; + case ELF::SHT_MIPS_OPTIONS: + return "SHT_MIPS_OPTIONS"; + case ELF::SHT_MIPS_ABIFLAGS: + return "SHT_MIPS_ABIFLAGS"; + case ELF::SHT_MIPS_DWARF: + return "SHT_MIPS_DWARF"; + } + break; + default: + break; + } + + switch (Type) { + case ELF::SHT_NULL: + return "SHT_NULL"; + case ELF::SHT_PROGBITS: + return "SHT_PROGBITS"; + case ELF::SHT_SYMTAB: + return "SHT_SYMTAB"; + case ELF::SHT_STRTAB: + return "SHT_STRTAB"; + case ELF::SHT_RELA: + return "SHT_RELA"; + case ELF::SHT_HASH: + return "SHT_HASH"; + case ELF::SHT_DYNAMIC: + return "SHT_DYNAMIC"; + case ELF::SHT_NOTE: + return "SHT_NOTE"; + case ELF::SHT_NOBITS: + return "SHT_NOBITS"; + case ELF::SHT_REL: + return "SHT_REL"; + case ELF::SHT_SHLIB: + return "SHT_SHLIB"; + case ELF::SHT_DYNSYM: + return "SHT_DYNSYM"; + case ELF::SHT_INIT_ARRAY: + return "SHT_INIT_ARRAY"; + case ELF::SHT_FINI_ARRAY: + return "SHT_FINI_ARRAY"; + case ELF::SHT_PREINIT_ARRAY: + return "SHT_PREINIT_ARRAY"; + case ELF::SHT_GROUP: + return "SHT_GROUP"; + case ELF::SHT_SYMTAB_SHNDX: + return "SHT_SYMTAB_SHNDX"; + case ELF::SHT_GNU_ATTRIBUTES: + return "SHT_GNU_ATTRIBUTES"; + case ELF::SHT_GNU_HASH: + return "SHT_GNU_HASH"; + case ELF::SHT_GNU_verdef: + return "SHT_GNU_verdef"; + case ELF::SHT_GNU_verneed: + return "SHT_GNU_verneed"; + case ELF::SHT_GNU_versym: + return "SHT_GNU_versym"; + default: + return ""; + } +} Index: tools/llvm-readobj/ELFDumper.cpp =================================================================== --- tools/llvm-readobj/ELFDumper.cpp +++ tools/llvm-readobj/ELFDumper.cpp @@ -983,57 +983,6 @@ { "AMDGPU_HSA_METADATA", ELF::STT_AMDGPU_HSA_METADATA } }; -static const char *getElfSectionType(unsigned Arch, unsigned Type) { - switch (Arch) { - case ELF::EM_ARM: - switch (Type) { - LLVM_READOBJ_ENUM_CASE(ELF, SHT_ARM_EXIDX); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_ARM_PREEMPTMAP); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_ARM_ATTRIBUTES); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_ARM_DEBUGOVERLAY); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_ARM_OVERLAYSECTION); - } - case ELF::EM_HEXAGON: - switch (Type) { LLVM_READOBJ_ENUM_CASE(ELF, SHT_HEX_ORDERED); } - case ELF::EM_X86_64: - switch (Type) { LLVM_READOBJ_ENUM_CASE(ELF, SHT_X86_64_UNWIND); } - case ELF::EM_MIPS: - case ELF::EM_MIPS_RS3_LE: - switch (Type) { - LLVM_READOBJ_ENUM_CASE(ELF, SHT_MIPS_REGINFO); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_MIPS_OPTIONS); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_MIPS_ABIFLAGS); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_MIPS_DWARF); - } - } - - switch (Type) { - LLVM_READOBJ_ENUM_CASE(ELF, SHT_NULL ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_PROGBITS ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_SYMTAB ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_STRTAB ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_RELA ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_HASH ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_DYNAMIC ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_NOTE ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_NOBITS ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_REL ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_SHLIB ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_DYNSYM ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_INIT_ARRAY ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_FINI_ARRAY ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_PREINIT_ARRAY ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_GROUP ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_SYMTAB_SHNDX ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_GNU_ATTRIBUTES ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_GNU_HASH ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_GNU_verdef ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_GNU_verneed ); - LLVM_READOBJ_ENUM_CASE(ELF, SHT_GNU_versym ); - default: return ""; - } -} - static const char *getGroupType(uint32_t Flag) { if (Flag & ELF::GRP_COMDAT) return "COMDAT"; @@ -3636,7 +3585,7 @@ W.printNumber("Index", SectionIndex); W.printNumber("Name", Name, Sec.sh_name); W.printHex("Type", - getElfSectionType(Obj->getHeader()->e_machine, Sec.sh_type), + object::getELFSectionTypeName(Obj->getHeader()->e_machine, Sec.sh_type), Sec.sh_type); std::vector> SectionFlags(std::begin(ElfSectionFlags), std::end(ElfSectionFlags));