[llvm] r221392 - Add accessor to get 'visibility' part of st_other field

Simon Atanasyan simon at atanasyan.com
Wed Nov 5 12:47:36 PST 2014


Author: atanasyan
Date: Wed Nov  5 14:47:35 2014
New Revision: 221392

URL: http://llvm.org/viewvc/llvm-project?rev=221392&view=rev
Log:
Add accessor to get 'visibility' part of st_other field

This new `getVisibility()` function will also be used in the LLD code.

Modified:
    llvm/trunk/include/llvm/Object/ELFTypes.h
    llvm/trunk/tools/obj2yaml/elf2yaml.cpp

Modified: llvm/trunk/include/llvm/Object/ELFTypes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFTypes.h?rev=221392&r1=221391&r2=221392&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ELFTypes.h (original)
+++ llvm/trunk/include/llvm/Object/ELFTypes.h Wed Nov  5 14:47:35 2014
@@ -176,6 +176,7 @@ struct Elf_Sym_Base<ELFType<TargetEndian
 template <class ELFT>
 struct Elf_Sym_Impl : Elf_Sym_Base<ELFT> {
   using Elf_Sym_Base<ELFT>::st_info;
+  using Elf_Sym_Base<ELFT>::st_other;
 
   // These accessors and mutators correspond to the ELF32_ST_BIND,
   // ELF32_ST_TYPE, and ELF32_ST_INFO macros defined in the ELF specification:
@@ -186,6 +187,9 @@ struct Elf_Sym_Impl : Elf_Sym_Base<ELFT>
   void setBindingAndType(unsigned char b, unsigned char t) {
     st_info = (b << 4) + (t & 0x0f);
   }
+
+  /// Access to the STV_xxx flag stored in the first two bits of st_other.
+  unsigned char getVisibility() const { return st_other & 0x3; }
 };
 
 /// Elf_Versym: This is the structure of entries in the SHT_GNU_versym section

Modified: llvm/trunk/tools/obj2yaml/elf2yaml.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/obj2yaml/elf2yaml.cpp?rev=221392&r1=221391&r2=221392&view=diff
==============================================================================
--- llvm/trunk/tools/obj2yaml/elf2yaml.cpp (original)
+++ llvm/trunk/tools/obj2yaml/elf2yaml.cpp Wed Nov  5 14:47:35 2014
@@ -133,7 +133,7 @@ std::error_code ELFDumper<ELFT>::dumpSym
   S.Type = Sym->getType();
   S.Value = Sym->st_value;
   S.Size = Sym->st_size;
-  S.Visibility = Sym->st_other & 0x3;
+  S.Visibility = Sym->getVisibility();
 
   ErrorOr<StringRef> NameOrErr = Obj.getSymbolName(Sym);
   if (std::error_code EC = NameOrErr.getError())





More information about the llvm-commits mailing list