summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-nm/llvm-nm.cpp
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2016-12-01 06:53:47 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2016-12-01 06:53:47 +0000
commite2f1b4a651e37966c586ec4a8cf47a1255bcedaa (patch)
tree61d6671ddd30eea028f5857ee93113975464b316 /llvm/tools/llvm-nm/llvm-nm.cpp
parent863cbfbebad4609678f5f74f5750b230e8aa5d77 (diff)
downloadbcm5719-llvm-e2f1b4a651e37966c586ec4a8cf47a1255bcedaa.tar.gz
bcm5719-llvm-e2f1b4a651e37966c586ec4a8cf47a1255bcedaa.zip
Object: Add SF_Executable symbol flag.
This allows us to remove a few uses of IRObjectFile::getSymbolGV() in llvm-nm. While here change host-dependent logic in llvm-nm to target-dependent logic. Differential Revision: https://reviews.llvm.org/D27075 llvm-svn: 288320
Diffstat (limited to 'llvm/tools/llvm-nm/llvm-nm.cpp')
-rw-r--r--llvm/tools/llvm-nm/llvm-nm.cpp30
1 files changed, 14 insertions, 16 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp
index 436cf9cac68..33385e9953e 100644
--- a/llvm/tools/llvm-nm/llvm-nm.cpp
+++ b/llvm/tools/llvm-nm/llvm-nm.cpp
@@ -313,10 +313,10 @@ static void darwinPrintSymbol(SymbolicFile &Obj, SymbolListT::iterator I,
NType |= MachO::N_SECT;
if (SymFlags & SymbolRef::SF_Const)
NSect = 3;
- else {
- IRObjectFile *IRobj = dyn_cast<IRObjectFile>(&Obj);
- NSect = (getSymbolNMTypeChar(*IRobj, I->Sym) == 't') ? 1 : 2;
- }
+ else if (SymFlags & SymbolRef::SF_Executable)
+ NSect = 1;
+ else
+ NSect = 2;
}
if (SymFlags & SymbolRef::SF_Weak)
NDesc |= MachO::N_WEAK_DEF;
@@ -882,15 +882,17 @@ static char getSymbolNMTypeChar(MachOObjectFile &Obj, basic_symbol_iterator I) {
return '?';
}
-static char getSymbolNMTypeChar(const GlobalValue &GV) {
+static char getSymbolNMTypeChar(IRObjectFile &Obj, basic_symbol_iterator I) {
+ uint32_t Flags = I->getFlags();
// FIXME: should we print 'b'? At the IR level we cannot be sure if this
// will be in bss or not, but we could approximate.
- return GV.getValueType()->isFunctionTy() ? 't' : 'd';
-}
-
-static char getSymbolNMTypeChar(IRObjectFile &Obj, basic_symbol_iterator I) {
- const GlobalValue *GV = Obj.getSymbolGV(I->getRawDataRefImpl());
- return !GV ? 't' : getSymbolNMTypeChar(*GV);
+ if (Flags & SymbolRef::SF_Executable)
+ return 't';
+ else if (Triple(Obj.getTargetTriple()).isOSDarwin() &&
+ (Flags & SymbolRef::SF_Const))
+ return 's';
+ else
+ return 'd';
}
static bool isObject(SymbolicFile &Obj, basic_symbol_iterator I) {
@@ -915,12 +917,8 @@ static char getNMTypeChar(SymbolicFile &Obj, basic_symbol_iterator I) {
char Ret = '?';
if (Symflags & object::SymbolRef::SF_Absolute)
Ret = 'a';
- else if (IRObjectFile *IR = dyn_cast<IRObjectFile>(&Obj)) {
+ else if (IRObjectFile *IR = dyn_cast<IRObjectFile>(&Obj))
Ret = getSymbolNMTypeChar(*IR, I);
- Triple Host(sys::getDefaultTargetTriple());
- if (Ret == 'd' && Host.isOSDarwin() && Symflags & SymbolRef::SF_Const)
- Ret = 's';
- }
else if (COFFObjectFile *COFF = dyn_cast<COFFObjectFile>(&Obj))
Ret = getSymbolNMTypeChar(*COFF, I);
else if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(&Obj))
OpenPOWER on IntegriCloud