mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 21:32:39 +00:00
Adding support for absolute relocations. This occurs in ELF files when a relocation is given with no name and an undefined section. The relocation is applied with an address of zero.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175643 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
eedff3547d
commit
7b170500dc
@ -432,14 +432,21 @@ void RuntimeDyldImpl::resolveExternalSymbols() {
|
||||
RelocationList &Relocs = i->second;
|
||||
SymbolTableMap::const_iterator Loc = GlobalSymbolTable.find(Name);
|
||||
if (Loc == GlobalSymbolTable.end()) {
|
||||
// This is an external symbol, try to get it address from
|
||||
// MemoryManager.
|
||||
uint8_t *Addr = (uint8_t*) MemMgr->getPointerToNamedFunction(Name.data(),
|
||||
if (Name.size() == 0) {
|
||||
// This is an absolute symbol, use an address of zero.
|
||||
DEBUG(dbgs() << "Resolving absolute relocations." << "\n");
|
||||
resolveRelocationList(Relocs, 0);
|
||||
}
|
||||
else {
|
||||
// This is an external symbol, try to get it address from
|
||||
// MemoryManager.
|
||||
uint8_t *Addr = (uint8_t*) MemMgr->getPointerToNamedFunction(Name.data(),
|
||||
true);
|
||||
DEBUG(dbgs() << "Resolving relocations Name: " << Name
|
||||
<< "\t" << format("%p", Addr)
|
||||
<< "\n");
|
||||
resolveRelocationList(Relocs, (uintptr_t)Addr);
|
||||
DEBUG(dbgs() << "Resolving relocations Name: " << Name
|
||||
<< "\t" << format("%p", Addr)
|
||||
<< "\n");
|
||||
resolveRelocationList(Relocs, (uintptr_t)Addr);
|
||||
}
|
||||
} else {
|
||||
report_fatal_error("Expected external symbol");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user