[llvm] r239618 - Have the ELF symbol predicates match more directly the spec.

Rafael Espindola rafael.espindola at gmail.com
Fri Jun 12 10:23:40 PDT 2015


Author: rafael
Date: Fri Jun 12 12:23:39 2015
New Revision: 239618

URL: http://llvm.org/viewvc/llvm-project?rev=239618&view=rev
Log:
Have the ELF symbol predicates match more directly the spec.

The underlaying issues is that this code can't really know if an OS specific or
processor specific section number should return true or false.

One option would be to assert or return an error, but that looks like over
engineering since extensions are not that common.

It seems better to have these be direct implementation of the ELF spec so that
they are natural for someone familiar with ELF reading the code.

Code that does have to handle OS/Architecture specific values can do it at
a higher level.

Modified:
    llvm/trunk/include/llvm/Object/ELFTypes.h
    llvm/trunk/tools/llvm-readobj/ELFDumper.cpp

Modified: llvm/trunk/include/llvm/Object/ELFTypes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFTypes.h?rev=239618&r1=239617&r2=239618&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ELFTypes.h (original)
+++ llvm/trunk/include/llvm/Object/ELFTypes.h Fri Jun 12 12:23:39 2015
@@ -184,10 +184,7 @@ struct Elf_Sym_Impl : Elf_Sym_Base<ELFT>
   bool isCommon() const {
     return getType() == ELF::STT_COMMON || st_shndx == ELF::SHN_COMMON;
   }
-  bool isDefined() const {
-    return !isUndefined() &&
-           !(st_shndx >= ELF::SHN_LORESERVE && st_shndx < ELF::SHN_ABS);
-  }
+  bool isDefined() const { return !isUndefined(); }
   bool isProcessorSpecific() const {
     return st_shndx >= ELF::SHN_LOPROC && st_shndx <= ELF::SHN_HIPROC;
   }
@@ -195,7 +192,7 @@ struct Elf_Sym_Impl : Elf_Sym_Base<ELFT>
     return st_shndx >= ELF::SHN_LOOS && st_shndx <= ELF::SHN_HIOS;
   }
   bool isReserved() const {
-    return st_shndx > ELF::SHN_HIOS && st_shndx < ELF::SHN_ABS;
+    return st_shndx >= ELF::SHN_LORESERVE && st_shndx <= ELF::SHN_HIRESERVE;
   }
   bool isUndefined() const { return st_shndx == ELF::SHN_UNDEF; }
 };

Modified: llvm/trunk/tools/llvm-readobj/ELFDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ELFDumper.cpp?rev=239618&r1=239617&r2=239618&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/ELFDumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/ELFDumper.cpp Fri Jun 12 12:23:39 2015
@@ -147,12 +147,12 @@ getSectionNameIndex(const ELFO &Obj, typ
     SectionName = "Processor Specific";
   else if (Symbol->isOSSpecific())
     SectionName = "Operating System Specific";
-  else if (Symbol->isReserved())
-    SectionName = "Reserved";
   else if (Symbol->isAbsolute())
     SectionName = "Absolute";
   else if (Symbol->isCommon())
     SectionName = "Common";
+  else if (Symbol->isReserved() && SectionIndex != SHN_XINDEX)
+    SectionName = "Reserved";
   else {
     if (SectionIndex == SHN_XINDEX)
       SectionIndex = Obj.getSymbolTableIndex(&*Symbol);





More information about the llvm-commits mailing list