[PATCH] D32587: Add llvm::object::getELFSectionTypeName()
Rafael Avila de Espindola via llvm-commits
llvm-commits at lists.llvm.org
Mon May 1 06:39:22 PDT 2017
LGTM
Alexander Richardson via Phabricator <reviews at reviews.llvm.org> writes:
> arichardson updated this revision to Diff 97274.
> arichardson added a comment.
>
> return "Unknown" in the default case
>
>
> https://reviews.llvm.org/D32587
>
> Files:
> include/llvm/Object/ELF.h
> lib/Object/ELF.cpp
> tools/llvm-readobj/ELFDumper.cpp
>
> 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<EnumEntry<unsigned>> SectionFlags(std::begin(ElfSectionFlags),
> std::end(ElfSectionFlags));
> Index: lib/Object/ELF.cpp
> ===================================================================
> --- lib/Object/ELF.cpp
> +++ lib/Object/ELF.cpp
> @@ -13,10 +13,14 @@
> using namespace llvm;
> using namespace object;
>
> -#define ELF_RELOC(name, value) \
> - case ELF::name: \
> +
> +#define STRINGIFY_ENUM_CASE(ns, name) \
> + case ns::name: \
> return #name; \
>
> +#define ELF_RELOC(name, value) STRINGIFY_ENUM_CASE(ELF, name)
> +
> +
> StringRef llvm::object::getELFRelocationTypeName(uint32_t Machine,
> uint32_t Type) {
> switch (Machine) {
> @@ -141,3 +145,65 @@
> }
>
> #undef ELF_RELOC
> +
> +StringRef llvm::object::getELFSectionTypeName(uint32_t Machine, unsigned Type) {
> + switch (Machine) {
> + case ELF::EM_ARM:
> + switch (Type) {
> + STRINGIFY_ENUM_CASE(ELF, SHT_ARM_EXIDX);
> + STRINGIFY_ENUM_CASE(ELF, SHT_ARM_PREEMPTMAP);
> + STRINGIFY_ENUM_CASE(ELF, SHT_ARM_ATTRIBUTES);
> + STRINGIFY_ENUM_CASE(ELF, SHT_ARM_DEBUGOVERLAY);
> + STRINGIFY_ENUM_CASE(ELF, SHT_ARM_OVERLAYSECTION);
> + }
> + break;
> + case ELF::EM_HEXAGON:
> + switch (Type) {
> + STRINGIFY_ENUM_CASE(ELF, SHT_HEX_ORDERED);
> + }
> + break;
> + case ELF::EM_X86_64:
> + switch (Type) {
> + STRINGIFY_ENUM_CASE(ELF, SHT_X86_64_UNWIND);
> + }
> + break;
> + case ELF::EM_MIPS:
> + case ELF::EM_MIPS_RS3_LE:
> + switch (Type) {
> + STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_REGINFO);
> + STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_OPTIONS);
> + STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_ABIFLAGS);
> + STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_DWARF);
> + }
> + break;
> + default:
> + break;
> + }
> +
> + switch (Type) {
> + STRINGIFY_ENUM_CASE(ELF, SHT_NULL);
> + STRINGIFY_ENUM_CASE(ELF, SHT_PROGBITS);
> + STRINGIFY_ENUM_CASE(ELF, SHT_SYMTAB);
> + STRINGIFY_ENUM_CASE(ELF, SHT_STRTAB);
> + STRINGIFY_ENUM_CASE(ELF, SHT_RELA);
> + STRINGIFY_ENUM_CASE(ELF, SHT_HASH);
> + STRINGIFY_ENUM_CASE(ELF, SHT_DYNAMIC);
> + STRINGIFY_ENUM_CASE(ELF, SHT_NOTE);
> + STRINGIFY_ENUM_CASE(ELF, SHT_NOBITS);
> + STRINGIFY_ENUM_CASE(ELF, SHT_REL);
> + STRINGIFY_ENUM_CASE(ELF, SHT_SHLIB);
> + STRINGIFY_ENUM_CASE(ELF, SHT_DYNSYM);
> + STRINGIFY_ENUM_CASE(ELF, SHT_INIT_ARRAY);
> + STRINGIFY_ENUM_CASE(ELF, SHT_FINI_ARRAY);
> + STRINGIFY_ENUM_CASE(ELF, SHT_PREINIT_ARRAY);
> + STRINGIFY_ENUM_CASE(ELF, SHT_GROUP);
> + STRINGIFY_ENUM_CASE(ELF, SHT_SYMTAB_SHNDX);
> + STRINGIFY_ENUM_CASE(ELF, SHT_GNU_ATTRIBUTES);
> + STRINGIFY_ENUM_CASE(ELF, SHT_GNU_HASH);
> + STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verdef);
> + STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verneed);
> + STRINGIFY_ENUM_CASE(ELF, SHT_GNU_versym);
> + default:
> + return "Unknown";
> + }
> +}
> 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<unsigned char, unsigned char>
More information about the llvm-commits
mailing list