summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2015-04-30 23:08:53 +0000
committerDavide Italiano <davide@freebsd.org>2015-04-30 23:08:53 +0000
commitcd2514dca6b7376c7be4ba4d867480d7a9cd82f6 (patch)
tree1b27381fbe094dce08a4e4f48fb059b6522a0fd6 /llvm
parent6ae37961a8d8538d254e4e4aa1dc60026fe381a2 (diff)
downloadbcm5719-llvm-cd2514dca6b7376c7be4ba4d867480d7a9cd82f6.tar.gz
bcm5719-llvm-cd2514dca6b7376c7be4ba4d867480d7a9cd82f6.zip
[Object] Teach Object and llvm-objdump about ".hidden"
Differential Revision: http://reviews.llvm.org/D9416 Reviewed by: rafael llvm-svn: 236279
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/Object/ELFObjectFile.h3
-rw-r--r--llvm/include/llvm/Object/SymbolicFile.h1
-rw-r--r--llvm/test/Object/objdump-symbol-table.test2
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp8
4 files changed, 12 insertions, 2 deletions
diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h
index 464efe87fe4..a6914d5a608 100644
--- a/llvm/include/llvm/Object/ELFObjectFile.h
+++ b/llvm/include/llvm/Object/ELFObjectFile.h
@@ -409,6 +409,9 @@ uint32_t ELFObjectFile<ELFT>::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/llvm/include/llvm/Object/SymbolicFile.h b/llvm/include/llvm/Object/SymbolicFile.h
index 114b229b822..2bfff4c6b5a 100644
--- a/llvm/include/llvm/Object/SymbolicFile.h
+++ b/llvm/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/llvm/test/Object/objdump-symbol-table.test b/llvm/test/Object/objdump-symbol-table.test
index c94b0777355..07109176638 100644
--- a/llvm/test/Object/objdump-symbol-table.test
+++ b/llvm/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/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 71de8adca70..e442ac050fc 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/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';
}
}
OpenPOWER on IntegriCloud