// heavyRelocs.c - stress test for ExpressLoad cRELOC handling.
#include "iigs/toolbox.h"

// Code padding via large initialized data (NOT const so it lands in
// .data and survives -O2 dead-strip).
volatile unsigned char gBigData[20000] = { [0 ... 19999] = 0xAA };

static unsigned char gA[16], gB[16], gC[16], gD[16];
static unsigned char gE[16], gF[16], gG[16], gH[16];
static unsigned char gI[16], gJ[16], gK[16], gL[16];
static unsigned char gM[16], gN[16], gO[16], gP[16];
static unsigned char gQ[16], gR[16], gS[16], gT[16];
static unsigned char gU[16], gV[16], gW[16], gX[16];
static unsigned char gY[16], gZ[16];

static unsigned char *gPtrs[100] = {
    gA, gB, gC, gD, gE, gF, gG, gH, gI, gJ,
    gK, gL, gM, gN, gO, gP, gQ, gR, gS, gT,
    gU, gV, gW, gX, gY, gZ, gA, gB, gC, gD,
    gE, gF, gG, gH, gI, gJ, gK, gL, gM, gN,
    gO, gP, gQ, gR, gS, gT, gU, gV, gW, gX,
    gY, gZ, gA, gB, gC, gD, gE, gF, gG, gH,
    gI, gJ, gK, gL, gM, gN, gO, gP, gQ, gR,
    gS, gT, gU, gV, gW, gX, gY, gZ, gA, gB,
    gC, gD, gE, gF, gG, gH, gI, gJ, gK, gL,
    gM, gN, gO, gP, gQ, gR, gS, gT, gU, gV,
};

int main(void) {
    for (unsigned short i = 0; i < 100; i++) {
        gPtrs[i][0] = (unsigned char)i;
    }
    gA[0] = gBigData[0] + gBigData[19999];
    *(volatile unsigned char *)0x70 = 0x99;
    // Brief linger for snapshot capture.
    for (volatile unsigned long s = 0; s < 600000UL; s++) { }
    return 0;
}
