From: Simon Atanasyan Date: Wed, 5 Nov 2014 20:47:35 +0000 (+0000) Subject: Add accessor to get 'visibility' part of st_other field X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=5563be0f4fbdb84334e25cd0b72e40a6b560390d;p=oota-llvm.git Add accessor to get 'visibility' part of st_other field This new `getVisibility()` function will also be used in the LLD code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221392 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Object/ELFTypes.h b/include/llvm/Object/ELFTypes.h index 9a23c8c4e49..4bc0c7c2016 100644 --- a/include/llvm/Object/ELFTypes.h +++ b/include/llvm/Object/ELFTypes.h @@ -176,6 +176,7 @@ struct Elf_Sym_Base > { template struct Elf_Sym_Impl : Elf_Sym_Base { using Elf_Sym_Base::st_info; + using Elf_Sym_Base::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 { 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 diff --git a/tools/obj2yaml/elf2yaml.cpp b/tools/obj2yaml/elf2yaml.cpp index 8b53ee770a6..bff28496db1 100644 --- a/tools/obj2yaml/elf2yaml.cpp +++ b/tools/obj2yaml/elf2yaml.cpp @@ -133,7 +133,7 @@ std::error_code ELFDumper::dumpSymbol(Elf_Sym_Iter Sym, 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 NameOrErr = Obj.getSymbolName(Sym); if (std::error_code EC = NameOrErr.getError())