mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-28 07:17:32 +00:00
Update MachOObjectFile::getSymbolAddress so it returns UnknownAddressOrSize
for undefined symbols, so it matches what COFFObjectFile::getSymbolAddress does. This allows llvm-nm to print spaces instead of 0’s for the value of undefined symbols in Mach-O files. To make this change other uses of MachOObjectFile::getSymbolAddress are updated to handle when the Value is returned as UnknownAddressOrSize. Which is needed to keep two of the ExecutionEngine tests working for example. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209253 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -472,10 +472,18 @@ error_code MachOObjectFile::getSymbolAddress(DataRefImpl Symb,
|
||||
uint64_t &Res) const {
|
||||
if (is64Bit()) {
|
||||
MachO::nlist_64 Entry = getSymbol64TableEntry(Symb);
|
||||
Res = Entry.n_value;
|
||||
if ((Entry.n_type & MachO::N_TYPE) == MachO::N_UNDF &&
|
||||
Entry.n_value == 0)
|
||||
Res = UnknownAddressOrSize;
|
||||
else
|
||||
Res = Entry.n_value;
|
||||
} else {
|
||||
MachO::nlist Entry = getSymbolTableEntry(Symb);
|
||||
Res = Entry.n_value;
|
||||
if ((Entry.n_type & MachO::N_TYPE) == MachO::N_UNDF &&
|
||||
Entry.n_value == 0)
|
||||
Res = UnknownAddressOrSize;
|
||||
else
|
||||
Res = Entry.n_value;
|
||||
}
|
||||
return object_error::success;
|
||||
}
|
||||
@@ -501,6 +509,10 @@ error_code MachOObjectFile::getSymbolSize(DataRefImpl DRI,
|
||||
nlist_base Entry = getSymbolTableEntryBase(this, DRI);
|
||||
uint64_t Value;
|
||||
getSymbolAddress(DRI, Value);
|
||||
if (Value == UnknownAddressOrSize) {
|
||||
Result = UnknownAddressOrSize;
|
||||
return object_error::success;
|
||||
}
|
||||
|
||||
BeginOffset = Value;
|
||||
|
||||
@@ -519,6 +531,8 @@ error_code MachOObjectFile::getSymbolSize(DataRefImpl DRI,
|
||||
DataRefImpl DRI = Symbol.getRawDataRefImpl();
|
||||
Entry = getSymbolTableEntryBase(this, DRI);
|
||||
getSymbolAddress(DRI, Value);
|
||||
if (Value == UnknownAddressOrSize)
|
||||
continue;
|
||||
if (Entry.n_sect == SectionIndex && Value > BeginOffset)
|
||||
if (!EndOffset || Value < EndOffset)
|
||||
EndOffset = Value;
|
||||
@@ -578,7 +592,7 @@ uint32_t MachOObjectFile::getSymbolFlags(DataRefImpl DRI) const {
|
||||
if ((MachOType & MachO::N_TYPE) == MachO::N_UNDF) {
|
||||
uint64_t Value;
|
||||
getSymbolAddress(DRI, Value);
|
||||
if (Value)
|
||||
if (Value && Value != UnknownAddressOrSize)
|
||||
Result |= SymbolRef::SF_Common;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user