[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