1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 20:23:11 +01:00

[llvm-nm] Generalize ELF symbol types 'N' and 'n'

Reviewed By: grimar, jhenderson

Differential Revision: https://reviews.llvm.org/D63588

llvm-svn: 363918
This commit is contained in:
Fangrui Song 2019-06-20 10:15:11 +00:00
parent d13917bb37
commit dc8b667602
2 changed files with 28 additions and 13 deletions

View File

@ -1,7 +1,11 @@
# RUN: yaml2obj %s -o %t
# RUN: llvm-nm --no-sort %t | FileCheck %s
# CHECK: n debug_info_main
# CHECK: N debug_info_main
# CHECK: n readonly_local
# CHECK: ? writable_local
# CHECK: N readonly_global
# CHECK: ? writable_global
!ELF
FileHeader:
@ -12,6 +16,22 @@ FileHeader:
Sections:
- Name: .debug_info
Type: SHT_PROGBITS
- Name: .readonly
Type: SHT_PROGBITS
- Name: .writable
Type: SHT_PROGBITS
Flags: [SHF_WRITE]
Symbols:
- Name: debug_info_main
Section: .debug_info
- Name: readonly_local
Section: .readonly
- Name: writable_local
Section: .writable
- Name: readonly_global
Binding: STB_GLOBAL
Section: .readonly
- Name: writable_global
Binding: STB_GLOBAL
Section: .writable

View File

@ -907,22 +907,17 @@ static char getSymbolNMTypeChar(ELFObjectFileBase &Obj,
return 'b';
if (Flags & ELF::SHF_ALLOC)
return Flags & ELF::SHF_WRITE ? 'd' : 'r';
}
if (SymI->getELFType() == ELF::STT_SECTION) {
Expected<StringRef> Name = SymI->getName();
if (!Name) {
consumeError(Name.takeError());
StringRef SecName;
if (SecI->getName(SecName))
return '?';
}
return StringSwitch<char>(*Name)
.StartsWith(".debug", 'N')
.StartsWith(".note", 'n')
.StartsWith(".comment", 'n')
.Default('?');
if (SecName.startswith(".debug"))
return 'N';
if (!(Flags & ELF::SHF_WRITE))
return 'n';
}
return 'n';
return '?';
}
static char getSymbolNMTypeChar(COFFObjectFile &Obj, symbol_iterator I) {