From 0c54b7abc727d38fe9efc99a6d1092ccb6cf1835 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Thu, 30 Apr 2015 23:08:53 +0000 Subject: [PATCH] [Object] Teach Object and llvm-objdump about ".hidden" Differential Revision: http://reviews.llvm.org/D9416 Reviewed by: rafael git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236279 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Object/ELFObjectFile.h | 3 +++ include/llvm/Object/SymbolicFile.h | 1 + test/Object/objdump-symbol-table.test | 2 ++ tools/llvm-objdump/llvm-objdump.cpp | 8 ++++++-- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/llvm/Object/ELFObjectFile.h b/include/llvm/Object/ELFObjectFile.h index 464efe87fe4..a6914d5a608 100644 --- a/include/llvm/Object/ELFObjectFile.h +++ b/include/llvm/Object/ELFObjectFile.h @@ -409,6 +409,9 @@ uint32_t ELFObjectFile::getSymbolFlags(DataRefImpl Symb) const { if (isExportedToOtherDSO(ESym)) Result |= SymbolRef::SF_Exported; + if (ESym->getVisibility() == ELF::STV_HIDDEN) + Result |= SymbolRef::SF_Hidden; + return Result; } diff --git a/include/llvm/Object/SymbolicFile.h b/include/llvm/Object/SymbolicFile.h index 114b229b822..2bfff4c6b5a 100644 --- a/include/llvm/Object/SymbolicFile.h +++ b/include/llvm/Object/SymbolicFile.h @@ -93,6 +93,7 @@ public: SF_FormatSpecific = 1U << 7, // Specific to the object file format // (e.g. section symbols) SF_Thumb = 1U << 8, // Thumb symbol in a 32-bit ARM binary + SF_Hidden = 1U << 9, // Symbol has hidden visibility }; BasicSymbolRef() : OwningObject(nullptr) { } diff --git a/test/Object/objdump-symbol-table.test b/test/Object/objdump-symbol-table.test index c94b0777355..07109176638 100644 --- a/test/Object/objdump-symbol-table.test +++ b/test/Object/objdump-symbol-table.test @@ -37,5 +37,7 @@ macho-i386: 00000000 *UND* 00000000 _puts ELF-shared: shared-object-test.elf-i386: file format ELF-shared: SYMBOL TABLE: ELF-shared: 00000200 l F .text 00000003 local_func +ELF-shared: 000012b8 l *ABS* 00000000 .hidden _GLOBAL_OFFSET_TABLE_ +ELF-shared: 00001248 l *ABS* 00000000 .hidden _DYNAMIC ELF-shared: 000012c4 g .data 00000004 defined_sym ELF-shared: 000001f0 g F .text 00000003 global_func diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index 71de8adca70..e442ac050fc 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/tools/llvm-objdump/llvm-objdump.cpp @@ -629,6 +629,7 @@ void llvm::PrintSymbolTable(const ObjectFile *o) { bool Weak = Flags & SymbolRef::SF_Weak; bool Absolute = Flags & SymbolRef::SF_Absolute; bool Common = Flags & SymbolRef::SF_Common; + bool Hidden = Flags & SymbolRef::SF_Hidden; if (Common) { uint32_t Alignment; @@ -683,8 +684,11 @@ void llvm::PrintSymbolTable(const ObjectFile *o) { outs() << SectionName; } outs() << '\t' - << format("%08" PRIx64 " ", Size) - << Name + << format("%08" PRIx64 " ", Size); + if (Hidden) { + outs() << ".hidden "; + } + outs() << Name << '\n'; } } -- 2.34.1