forked from OSchip/llvm-project
Common symbols don't have a value.
At least not in the interface exposed by ObjectFile. This matches what ELF and COFF implement. Adjust existing code that was expecting them to have values. No overall functionality change intended. Another option would be to change the interface and the ELF and COFF implementations to say that the value of a common symbol is its size. llvm-svn: 241593
This commit is contained in:
parent
cf0a80728c
commit
7e7be92c7f
|
@ -369,11 +369,10 @@ std::error_code MachOObjectFile::getIndirectName(DataRefImpl Symb,
|
|||
}
|
||||
|
||||
uint64_t MachOObjectFile::getSymbolValue(DataRefImpl Sym) const {
|
||||
uint64_t NValue = getNValue(Sym);
|
||||
MachO::nlist_base Entry = getSymbolTableEntryBase(this, Sym);
|
||||
if ((Entry.n_type & MachO::N_TYPE) == MachO::N_UNDF && NValue == 0)
|
||||
if ((Entry.n_type & MachO::N_TYPE) == MachO::N_UNDF)
|
||||
return UnknownAddress;
|
||||
return NValue;
|
||||
return getNValue(Sym);
|
||||
}
|
||||
|
||||
ErrorOr<uint64_t> MachOObjectFile::getSymbolAddress(DataRefImpl Sym) const {
|
||||
|
|
|
@ -216,7 +216,11 @@ MappingTraits<dsymutil::DebugMapObject>::YamlDMO::denormalize(IO &IO) {
|
|||
// during the test, we can't hardcode the symbols addresses, so
|
||||
// look them up here and rewrite them.
|
||||
for (const auto &Sym : ErrOrObjectFile->symbols()) {
|
||||
uint64_t Address = Sym.getValue();
|
||||
uint64_t Address;
|
||||
if (Sym.getFlags() & SymbolRef::SF_Common)
|
||||
Address = Sym.getCommonSize();
|
||||
else
|
||||
Address = Sym.getValue();
|
||||
ErrorOr<StringRef> Name = Sym.getName();
|
||||
if (!Name)
|
||||
continue;
|
||||
|
|
|
@ -197,10 +197,14 @@ void MachODebugMapParser::loadCurrentObjectFileSymbols() {
|
|||
CurrentObjectAddresses.clear();
|
||||
|
||||
for (auto Sym : CurrentObjectHolder.Get().symbols()) {
|
||||
|
||||
uint64_t Addr = Sym.getValue();
|
||||
if (Addr == UnknownAddress)
|
||||
continue;
|
||||
uint64_t Addr;
|
||||
if (Sym.getFlags() & SymbolRef::SF_Common) {
|
||||
Addr = Sym.getCommonSize();
|
||||
} else {
|
||||
Addr = Sym.getValue();
|
||||
if (Addr == UnknownAddress)
|
||||
continue;
|
||||
}
|
||||
ErrorOr<StringRef> Name = Sym.getName();
|
||||
if (!Name)
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue