From 6d6e6524c2e6e5431dea86a1d0089c9b7f913fe8 Mon Sep 17 00:00:00 2001 From: Max <34987259+mparisi20@users.noreply.github.com> Date: Sun, 16 Aug 2026 22:08:14 -0400 Subject: [PATCH] Match utRelocate's constructor --- include/lib/BrawlHeaders | 2 +- src/sora/ut/ut_relocate.cpp | 23 +++++------------------ 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/include/lib/BrawlHeaders b/include/lib/BrawlHeaders index 399a313fa..e2a1c10f4 160000 --- a/include/lib/BrawlHeaders +++ b/include/lib/BrawlHeaders @@ -1 +1 @@ -Subproject commit 399a313fa9a87f92b9df04a8f3d4132ddea36813 +Subproject commit e2a1c10f40de4d3b5a2a375717da871f061080c7 diff --git a/src/sora/ut/ut_relocate.cpp b/src/sora/ut/ut_relocate.cpp index 26a5a9fb8..c8d1bce0f 100644 --- a/src/sora/ut/ut_relocate.cpp +++ b/src/sora/ut/ut_relocate.cpp @@ -3,7 +3,6 @@ #include #include -// NONMATCHING regswap utRelocate::utRelocate(u8* fileBuf, u32 fileSz) { m_dataStart = nullptr; m_relStart = nullptr; @@ -11,9 +10,8 @@ utRelocate::utRelocate(u8* fileBuf, u32 fileSz) { m_importStart = nullptr; m_strtabStart = nullptr; std::memcpy(&m_hdr, fileBuf, sizeof(m_hdr)); - if (m_hdr.fileSz != fileSz) { + if (m_hdr.fileSz != fileSz) OSReport("utRelocate: byte-order mismatch! Please check data format\n"); - } u32 fp = sizeof(m_hdr); if (m_hdr.dataSz) { @@ -36,19 +34,10 @@ utRelocate::utRelocate(u8* fileBuf, u32 fileSz) { fp += m_hdr.nImports * sizeof(m_importStart[0]); } - if (fp < m_hdr.fileSz) { + if (fp < m_hdr.fileSz) m_strtabStart = reinterpret_cast(fileBuf + fp); - } - if (!m_hdr.isAbsolute) { - // Resolve all internal relocations - for (u32 i = 0; i < m_hdr.nRels; i++) { - u8* datap = m_dataStart; - u32 offset = reinterpret_cast(datap); - *reinterpret_cast(&datap[m_relStart[i]]) += offset; - } - reinterpret_cast(fileBuf)->isAbsolute = true; - } + relocate(fileBuf); } utRelocate::~utRelocate() { } @@ -57,9 +46,8 @@ void* utRelocate::getPublicAddress(const char* symName) const { const DATSymbol* sym; for (u32 i = 0; i < m_hdr.nSymbols; i++) { sym = m_symtabStart; - if (!std::strcmp(m_strtabStart + sym[i].name, symName)) { + if (!std::strcmp(m_strtabStart + sym[i].name, symName)) return m_dataStart + sym[i].offset; - } } return nullptr; } @@ -94,9 +82,8 @@ void utRelocate::resolveReference(const utRelocate* other) { const char* importName = getImportName(i, m_hdr.nImports); if (importName) { void* addr = reinterpret_cast(other->getPublicAddress(importName)); - if (!addr) { + if (!addr) OSReport("utRelocate: not found symbol! ->[%s] \n", importName); - } locateExtern(importName, addr); } }