From 0f31a4e8c6c6eacbad84e6a7fbef686a6a99cb4e Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Mon, 7 Aug 2023 16:06:34 +0200 Subject: [PATCH] Add error for overlapping data sections --- oscar64/Errors.h | 1 + oscar64/Linker.cpp | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/oscar64/Errors.h b/oscar64/Errors.h index 967cf6c..1813cfc 100644 --- a/oscar64/Errors.h +++ b/oscar64/Errors.h @@ -83,6 +83,7 @@ enum ErrorID ERRR_STACK_OVERFLOW, ERRR_INVALID_NUMBER, + EERR_OVERLAPPING_DATA_SECTIONS, EERR_INVALID_PREPROCESSOR, diff --git a/oscar64/Linker.cpp b/oscar64/Linker.cpp index 8713b36..f5f1e94 100644 --- a/oscar64/Linker.cpp +++ b/oscar64/Linker.cpp @@ -612,6 +612,29 @@ void Linker::Link(void) } } } + + for (int i = 0; i < mObjects.Size(); i++) + { + LinkerObject* oi = mObjects[i]; + + if (oi->mSection->mType == LST_DATA && (oi->mFlags & LOBJF_PLACED) && oi->mRegion) + { + for (int j = i + 1; j < mObjects.Size(); j++) + { + LinkerObject* oj = mObjects[j]; + + if (oj->mSection->mType == LST_DATA && (oj->mFlags & LOBJF_PLACED) && oj->mRegion) + { + if (oj->mAddress < oi->mAddress + oi->mSize && oi->mAddress < oj->mAddress + oj->mSize && (oj->mRegion->mCartridgeBanks & oi->mRegion->mCartridgeBanks)) + { + mErrors->Error(oi->mLocation, EERR_OVERLAPPING_DATA_SECTIONS, "Overlapping data section", oi->mIdent); + mErrors->Error(oj->mLocation, EERR_OVERLAPPING_DATA_SECTIONS, "Overlapping data section", oj->mIdent); + } + } + } + } + } + } }