Skip to content

Commit

Permalink
This bug is not physically possible on hardware
Browse files Browse the repository at this point in the history
  • Loading branch information
vabold committed Feb 24, 2025
1 parent aa797ad commit 594b0ad
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 5 deletions.
34 changes: 34 additions & 0 deletions source/abstract/memory/ExpHeap.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ MEMiExpBlockHead *MEMiExpBlockList::insert(MEMiExpBlockHead *block, MEMiExpBlock
m_tail = block;
}

if (prev) {
ASSERT(prev->m_signature != 0xd3d3);
}
if (next) {
ASSERT(next->m_signature != 0xd3d3);
}
ASSERT(block->m_signature != 0xd3d3);

return block;
}

Expand All @@ -53,12 +61,23 @@ MEMiExpBlockHead *MEMiExpBlockList::remove(MEMiExpBlockHead *block) {
m_tail = prev;
}

if (prev) {
ASSERT(prev->m_signature != 0xd3d3);
}
if (next) {
ASSERT(next->m_signature != 0xd3d3);
}
ASSERT(block->m_signature != 0xd3d3);

return prev;
}

MEMiExpBlockHead::MEMiExpBlockHead(const Region &region, u16 signature) {
m_signature = signature;
m_attribute.val = 0;
#ifdef BUILD_DEBUG
m_tag = 0;
#endif

m_size = region.getRange() - sizeof(MEMiExpBlockHead);

Expand Down Expand Up @@ -147,6 +166,10 @@ void *MEMiExpHeapHead::alloc(size_t size, s32 align) {
block = allocFromTail(size, -align);
}

for (MEMiExpBlockHead *b = m_usedBlocks.m_head; b; b = b->m_link.m_next) {
ASSERT(b->m_signature != 0xd3d3);
}

return block;
}

Expand All @@ -159,9 +182,19 @@ void MEMiExpHeapHead::free(void *block) {
MEMiExpBlockHead *head =
reinterpret_cast<MEMiExpBlockHead *>(SubOffset(block, sizeof(MEMiExpBlockHead)));

ASSERT(head->m_signature == 0x5544);

Region region = head->getRegion();
m_usedBlocks.remove(head);
for (MEMiExpBlockHead *block = m_usedBlocks.m_head; block; block = block->m_link.m_next) {
if (block >= region.start && block < region.end) {
REPORT("COLLISION!");
}
}
recycleRegion(region);
for (MEMiExpBlockHead *block = m_usedBlocks.m_head; block; block = block->m_link.m_next) {
ASSERT(block->m_signature != 0xd3d3);
}
}

/// @addr{0x80199180}
Expand Down Expand Up @@ -195,6 +228,7 @@ u32 MEMiExpHeapHead::getAllocatableSize(s32 align) const {
void MEMiExpHeapHead::visitAllocated(Visitor visitor, uintptr_t param) {
for (MEMiExpBlockHead *block = m_usedBlocks.m_head; block;) {
MEMiExpBlockHead *next = block->m_link.m_next;
ASSERT(block->m_signature != 0xd3d3);
visitor(block->getMemoryStart(), this, param);
block = next;
}
Expand Down
10 changes: 5 additions & 5 deletions testCases.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
{
"Logan rBC3 RTA WR": {
"rkgPath": "samples/rbc3-rta-1-55-715.rkg",
"krkgPath": "samples/rbc3-rta-1-55-715.krkg",
"targetFrame": 7347
},
"Flare RR NG RTA WR": {
"rkgPath": "samples/rr-ng-rta-2-24-281.rkg",
"krkgPath": "samples/rr-ng-rta-2-24-281.krkg",
Expand All @@ -19,11 +24,6 @@
"krkgPath": "samples/mmm-rta-1-15-273.krkg",
"targetFrame": 4923
},
"Logan rBC3 RTA WR": {
"rkgPath": "samples/rbc3-rta-1-55-715.rkg",
"krkgPath": "samples/rbc3-rta-1-55-715.krkg",
"targetFrame": 7347
},
"Logan MH RTA WR": {
"rkgPath": "samples/mh-rta-1-42-872.rkg",
"krkgPath": "samples/mh-rta-1-42-872.krkg",
Expand Down

0 comments on commit 594b0ad

Please sign in to comment.