diff --git a/src/emucore/elf/ElfLinker.cxx b/src/emucore/elf/ElfLinker.cxx index 1f4280fe9..581115885 100644 --- a/src/emucore/elf/ElfLinker.cxx +++ b/src/emucore/elf/ElfLinker.cxx @@ -22,10 +22,12 @@ #include "ElfLinker.hxx" +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ElfLinker::ElfLinker(uInt32 textBase, uInt32 dataBase, const ElfParser& parser) : myTextBase(textBase), myDataBase(dataBase), myParser(parser) {} +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ElfLinker& ElfLinker::setUndefinedSymbolDefault(uInt32 defaultValue) { undefinedSymbolDefault = defaultValue; @@ -33,6 +35,7 @@ ElfLinker& ElfLinker::setUndefinedSymbolDefault(uInt32 defaultValue) return *this; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void ElfLinker::link(const vector& externalSymbols) { myTextSize = myDataSize = 0; @@ -49,46 +52,55 @@ void ElfLinker::link(const vector& externalSymbols) applyRelocationsToSections(); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt32 ElfLinker::getTextBase() const { return myTextBase; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt32 ElfLinker::getTextSize() const { return myTextSize; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const uInt8* ElfLinker::getTextData() const { return myTextData ? myTextData.get() : nullptr; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt32 ElfLinker::getDataBase() const { return myDataBase; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt32 ElfLinker::getDataSize() const { return myDataSize; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const uInt8* ElfLinker::getDataData() const { return myDataData ? myDataData.get() : nullptr; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const vector& ElfLinker::getInitArray() const { return myInitArray; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const vector& ElfLinker::getPreinitArray() const { return myPreinitArray; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ElfLinker::RelocatedSymbol ElfLinker::findRelocatedSymbol(string_view name) const { const auto& symbols = myParser.getSymbols(); @@ -104,16 +116,19 @@ ElfLinker::RelocatedSymbol ElfLinker::findRelocatedSymbol(string_view name) cons ElfSymbolResolutionError::raise("symbol not found"); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const vector>& ElfLinker::getRelocatedSections() const { return myRelocatedSections; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const vector>& ElfLinker::getRelocatedSymbols() const { return myRelocatedSymbols; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void ElfLinker::relocateSections() { auto& sections = myParser.getSections(); @@ -176,6 +191,7 @@ void ElfLinker::relocateSections() } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void ElfLinker::relocateInitArrays() { const auto& sections = myParser.getSections(); @@ -218,6 +234,7 @@ void ElfLinker::relocateInitArrays() applyRelocationsToInitArrays(ElfParser::SHT_PREINIT_ARRAY, myPreinitArray, relocatedPreinitArrays); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void ElfLinker::relocateSymbols(const vector& externalSymbols) { std::unordered_map externalSymbolLookup; @@ -259,6 +276,7 @@ void ElfLinker::relocateSymbols(const vector& externalSymbols) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void ElfLinker::applyRelocationsToSections() { auto& sections = myParser.getSections(); @@ -274,6 +292,7 @@ void ElfLinker::applyRelocationsToSections() } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void ElfLinker::copyInitArrays(vector& initArray, std::unordered_map relocatedInitArrays) { const uInt8* elfData = myParser.getData(); @@ -288,6 +307,7 @@ void ElfLinker::copyInitArrays(vector& initArray, std::unordered_map& initArray, - std::unordered_map relocatedInitArrays) + const std::unordered_map& relocatedInitArrays) { const auto& symbols = myParser.getSymbols(); const auto& sections = myParser.getSections(); @@ -373,6 +394,7 @@ void ElfLinker::applyRelocationsToInitArrays(uInt8 initArrayType, vector } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt32 ElfLinker::read32(const uInt8* address) { uInt32 value = *(address++); @@ -383,6 +405,7 @@ uInt32 ElfLinker::read32(const uInt8* address) return value; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void ElfLinker::write32(uInt8* address, uInt32 value) { *(address++) = value; diff --git a/src/emucore/elf/ElfLinker.hxx b/src/emucore/elf/ElfLinker.hxx index e5096b4fe..e16ac9a45 100644 --- a/src/emucore/elf/ElfLinker.hxx +++ b/src/emucore/elf/ElfLinker.hxx @@ -105,8 +105,8 @@ class ElfLinker { void copyInitArrays(vector& initArray, std::unordered_map relocatedInitArrays); void applyRelocationToSection(const ElfParser::Relocation& relocation, size_t iSection); - void applyRelocationsToInitArrays(uInt8 initArrayType, - vector& initArray, std::unordered_map relocatedInitArrays); + void applyRelocationsToInitArrays(uInt8 initArrayType, vector& initArray, + const std::unordered_map& relocatedInitArrays); uInt32 read32(const uInt8* address); void write32(uInt8* address, uInt32 value);