[PATCH] D75797: [llvm-objdump] --syms: print 'u' for STB_GNU_UNIQUE

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 6 21:27:05 PST 2020


MaskRay created this revision.
MaskRay added reviewers: grimar, jhenderson, rupprecht.
Herald added subscribers: llvm-commits, emaste.
Herald added a reviewer: espindola.
Herald added a project: LLVM.
MaskRay added a parent revision: D75793: [llvm-objdump] --syms: print 'i' for STT_GNU_IFUNC.

GCC when configured with --enable-gnu-unique (default on glibc>=2.11)
emits STB_GNU_UNIQUE for certain objects which are otherwise emitted as
STT_OBJECT, such as an inline function's static local variable or its
guard variable, and a static data member of a template.

Clang does not implement -fgnu-unique.

Implementing it as a binding is strange and the feature itself is
considered by some as a misfeature.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D75797

Files:
  llvm/test/tools/llvm-objdump/ELF/symbol-table.test
  llvm/tools/llvm-objdump/llvm-objdump.cpp


Index: llvm/tools/llvm-objdump/llvm-objdump.cpp
===================================================================
--- llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -1904,6 +1904,8 @@
     if (auto *ELF = dyn_cast<ELFObjectFileBase>(O)) {
       if (ELFSymbolRef(*I).getELFType() == ELF::STT_GNU_IFUNC)
         Indirect = 'i';
+      if (ELFSymbolRef(*I).getBinding() == ELF::STB_GNU_UNIQUE)
+        GlobLoc = 'u';
     }
     char Debug = (Type == SymbolRef::ST_Debug || Type == SymbolRef::ST_File)
                  ? 'd' : ' ';
Index: llvm/test/tools/llvm-objdump/ELF/symbol-table.test
===================================================================
--- llvm/test/tools/llvm-objdump/ELF/symbol-table.test
+++ llvm/test/tools/llvm-objdump/ELF/symbol-table.test
@@ -14,7 +14,7 @@
 # CHECK-NEXT:0000000000000000 g       *ABS*	0000000000000000 abs
 # CHECK-NEXT:0000000000000000         *COM*	0000000000000000 common
 # CHECK-NEXT:0000000000000000 g   i   .text	0000000000000000 ifunc
-# CHECK-NEXT:0000000000000000 g     O .data	0000000000000000 gnu_unique
+# CHECK-NEXT:0000000000000000 u     O .data	0000000000000000 gnu_unique
 
 --- !ELF
 FileHeader:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75797.248895.patch
Type: text/x-patch
Size: 1205 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200307/f7b1936b/attachment.bin>


More information about the llvm-commits mailing list