Fix llvm-nm to mach OS X's nm on some tests.

There is still a long way to go for llvm-nm, but at least we now match
nm's letter output in the cases we test for.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193912 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2013-11-02 05:03:24 +00:00
parent 9d293f1f68
commit 6152f7d596
4 changed files with 24 additions and 10 deletions

View File

@ -594,24 +594,35 @@ error_code MachOObjectFile::getSymbolType(DataRefImpl Symb,
error_code MachOObjectFile::getSymbolNMTypeChar(DataRefImpl Symb,
char &Res) const {
nlist_base Entry = getSymbolTableEntryBase(this, Symb);
uint8_t Type = Entry.n_type;
uint16_t Flags = Entry.n_desc;
uint8_t NType = Entry.n_type;
char Char;
switch (Type & MachO::N_TYPE) {
switch (NType & MachO::N_TYPE) {
case MachO::N_UNDF:
Char = 'u';
break;
case MachO::N_ABS:
case MachO::N_SECT:
Char = 's';
break;
case MachO::N_SECT: {
section_iterator Sec = end_sections();
getSymbolSection(Symb, Sec);
DataRefImpl Ref = Sec->getRawDataRefImpl();
StringRef SectionName;
getSectionName(Ref, SectionName);
StringRef SegmentName = getSectionFinalSegmentName(Ref);
if (SegmentName == "__TEXT" && SectionName == "__text")
Char = 't';
else
Char = 's';
}
break;
default:
Char = '?';
break;
}
if (Flags & (MachO::N_EXT | MachO::N_PEXT))
if (NType & (MachO::N_EXT | MachO::N_PEXT))
Char = toupper(static_cast<unsigned char>(Char));
Res = Char;
return object_error::success;
@ -630,7 +641,7 @@ error_code MachOObjectFile::getSymbolFlags(DataRefImpl DRI,
if ((MachOType & MachO::N_TYPE) == MachO::N_UNDF)
Result |= SymbolRef::SF_Undefined;
if (MachOFlags & MachO::N_STAB)
if (MachOType & MachO::N_STAB)
Result |= SymbolRef::SF_FormatSpecific;
if (MachOType & MachO::N_EXT) {

Binary file not shown.

View File

@ -25,10 +25,10 @@ ELF: U puts
macho: 00000000 U _SomeOtherFunction
macho: 00000000 s _main
macho: 00000000 T _main
macho: 00000000 U _puts
macho64: 00000028 s L_.str
macho64: 00000000 u _SomeOtherFunction
macho64: 00000000 s _main
macho64: 00000000 u _puts
macho64: 00000000 U _SomeOtherFunction
macho64: 00000000 T _main
macho64: 00000000 U _puts

View File

@ -0,0 +1,3 @@
RUN: llvm-nm %p/Inputs/weak-global-symbol.macho-i386 | FileCheck %s
CHECK: 00000000 S _a