summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-nm/llvm-nm.cpp
diff options
context:
space:
mode:
authorJordan Rupprecht <rupprecht@google.com>2019-05-24 04:02:05 +0000
committerJordan Rupprecht <rupprecht@google.com>2019-05-24 04:02:05 +0000
commit01d6173667f77722a31070fd186a50d3b3740207 (patch)
tree6e6b175645b46b5ffea41048fe76cdcbee6cd209 /llvm/tools/llvm-nm/llvm-nm.cpp
parenta38ddc36fdc7a18795e067cb68ec770f3fc5a982 (diff)
downloadbcm5719-llvm-01d6173667f77722a31070fd186a50d3b3740207.tar.gz
bcm5719-llvm-01d6173667f77722a31070fd186a50d3b3740207.zip
[llvm-nm] Fix Bug 41353 - unique symbols printed as D instead of u
Summary: https://bugs.llvm.org/show_bug.cgi?id=41353 I'm new to LLVM and C++ so please do not hesitate to iterate with me on this fix. Patch by Mike Pozulp! Reviewers: rupprecht, zbrid, grimar, jhenderson Reviewed By: rupprecht, jhenderson Subscribers: jhenderson, chrisjackson, MaskRay, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D61117 llvm-svn: 361595
Diffstat (limited to 'llvm/tools/llvm-nm/llvm-nm.cpp')
-rw-r--r--llvm/tools/llvm-nm/llvm-nm.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp
index f21978d50cc..871ca638d9d 100644
--- a/llvm/tools/llvm-nm/llvm-nm.cpp
+++ b/llvm/tools/llvm-nm/llvm-nm.cpp
@@ -894,6 +894,9 @@ static char getSymbolNMTypeChar(ELFObjectFileBase &Obj,
return '?';
}
+ if (SymI->getBinding() == ELF::STB_GNU_UNIQUE)
+ return 'u';
+
elf_section_iterator SecI = *SecIOrErr;
if (SecI != Obj.section_end()) {
uint32_t Type = SecI->getType();
@@ -1119,10 +1122,13 @@ static char getNMSectionTagAndName(SymbolicFile &Obj, basic_symbol_iterator I,
else
Ret = getSymbolNMTypeChar(cast<ELFObjectFileBase>(Obj), I);
- if (Symflags & object::SymbolRef::SF_Global)
- Ret = toupper(Ret);
+ if (!(Symflags & object::SymbolRef::SF_Global))
+ return Ret;
+
+ if (Obj.isELF() && ELFSymbolRef(*I).getBinding() == ELF::STB_GNU_UNIQUE)
+ return Ret;
- return Ret;
+ return toupper(Ret);
}
// getNsectForSegSect() is used to implement the Mach-O "-s segname sectname"
OpenPOWER on IntegriCloud