From b797c92b2ecec30d2d4dd43a3263d990c2ad7ecd Mon Sep 17 00:00:00 2001 From: PSI-Rockin Date: Mon, 22 Apr 2024 18:17:58 -0400 Subject: [PATCH] [CRO] Offset the old data address by the start of the CRO The old logic caused bad data relocations --- .gitignore | 1 + src/core/services/ldr_ro.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 786db912..528462ad 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,4 @@ fb.bat *.smdh config.toml +CMakeSettings.json diff --git a/src/core/services/ldr_ro.cpp b/src/core/services/ldr_ro.cpp index 2ad62d99..a6114729 100644 --- a/src/core/services/ldr_ro.cpp +++ b/src/core/services/ldr_ro.cpp @@ -437,7 +437,7 @@ public: const u32 segmentID = mem.read32(segmentTable.offset + 12 * segment + SegmentTable::ID); switch (segmentID) { case SegmentTable::SegmentID::DATA: - *oldDataVaddr = segmentOffset + dataVaddr; oldDataSegmentOffset = segmentOffset; segmentOffset = dataVaddr; break; + *oldDataVaddr = segmentOffset + croPointer; oldDataSegmentOffset = segmentOffset; segmentOffset = dataVaddr; break; case SegmentTable::SegmentID::BSS: segmentOffset = bssVaddr; break; case SegmentTable::SegmentID::TEXT: case SegmentTable::SegmentID::RODATA: