Updated field randomizer test to task_struct layout

This commit is contained in:
York Jasper Niebuhr 2026-04-08 11:54:04 +02:00
parent 8a5628bd11
commit 424065b4b5

View File

@ -19,21 +19,213 @@ uint32_t spslr_env_random_u32(void) {
} }
const uint32_t spslr_target_cnt = 1; const uint32_t spslr_target_cnt = 1;
const uint32_t spslr_target_field_cnt = 4; const uint32_t spslr_target_field_cnt = 196;
const struct spslr_target spslr_targets[] = { const struct spslr_target spslr_targets[] = {
{ {
.size = 24, .size = 2880,
.fieldcnt = 4, .fieldcnt = 196,
.fieldoff = 0, .fieldoff = 0,
}, },
}; };
const struct spslr_target_field spslr_target_fields[] = { const struct spslr_target_field spslr_target_fields[] = {
{ .offset = 0, .size = 4, .alignment = 4, .flags = 0 }, { .offset = 0, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 4, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 8, .size = 4, .alignment = 4, .flags = 0 }, { .offset = 8, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 16, .size = 8, .alignment = 8, .flags = 0 }, { .offset = 12, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 16, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 20, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 24, .size = 16, .alignment = 8, .flags = 0 },
{ .offset = 40, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 48, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 56, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 64, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 68, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 72, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 76, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 80, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 84, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 88, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 128, .size = 256, .alignment = 64, .flags = 1 },
{ .offset = 384, .size = 48, .alignment = 8, .flags = 1 },
{ .offset = 432, .size = 248, .alignment = 8, .flags = 0 },
{ .offset = 680, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 688, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 696, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 704, .size = 256, .alignment = 64, .flags = 0 },
{ .offset = 960, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 964, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 968, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 976, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 984, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 992, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1000, .size = 8, .alignment = 8, .flags = 1 },
{ .offset = 1008, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1016, .size = 2, .alignment = 2, .flags = 0 },
{ .offset = 1018, .size = 2, .alignment = 2, .flags = 0 },
{ .offset = 1020, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1024, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1032, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 1048, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1056, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1064, .size = 1, .alignment = 1, .flags = 0 },
{ .offset = 1065, .size = 1, .alignment = 1, .flags = 0 },
{ .offset = 1068, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1072, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 1088, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1096, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 1112, .size = 32, .alignment = 8, .flags = 0 },
{ .offset = 1144, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 1160, .size = 40, .alignment = 8, .flags = 1 },
{ .offset = 1200, .size = 24, .alignment = 8, .flags = 0 },
{ .offset = 1224, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1232, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1240, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1248, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1252, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1256, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1260, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1264, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1272, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1276, .size = 1, .alignment = 1, .flags = 1 },
{ .offset = 1280, .size = 1, .alignment = 1, .flags = 1 },
{ .offset = 1281, .size = 1, .alignment = 1, .flags = 1 },
{ .offset = 1288, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1296, .size = 56, .alignment = 8, .flags = 0 },
{ .offset = 1352, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1356, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 1360, .size = 8, .alignment = 8, .flags = 1 },
{ .offset = 1368, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1376, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1384, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 1400, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 1416, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1424, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 1440, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 1456, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1464, .size = 64, .alignment = 8, .flags = 0 },
{ .offset = 1528, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 1544, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1552, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1560, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1568, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1576, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1584, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1592, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1600, .size = 24, .alignment = 8, .flags = 0 },
{ .offset = 1624, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1632, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1640, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1648, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1656, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1664, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1672, .size = 80, .alignment = 8, .flags = 0 },
{ .offset = 1752, .size = 56, .alignment = 8, .flags = 0 },
{ .offset = 1808, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1816, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1824, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1832, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1840, .size = 16, .alignment = 1, .flags = 0 },
{ .offset = 1856, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1864, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1872, .size = 16, .alignment = 8, .flags = 0 },
{ .offset = 1888, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1896, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1904, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1912, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1920, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1928, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1936, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1944, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1952, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1960, .size = 24, .alignment = 8, .flags = 1 },
{ .offset = 1984, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 1992, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2000, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2008, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2016, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2024, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2028, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2032, .size = 16, .alignment = 8, .flags = 0 },
{ .offset = 2048, .size = 32, .alignment = 8, .flags = 0 },
{ .offset = 2080, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2088, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2096, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2100, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2104, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2112, .size = 16, .alignment = 8, .flags = 0 },
{ .offset = 2128, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2136, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2144, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2152, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2160, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2168, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2176, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2184, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2192, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2200, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2208, .size = 56, .alignment = 8, .flags = 0 },
{ .offset = 2264, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2272, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2280, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2288, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2296, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2300, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2304, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2312, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 2328, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2336, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2344, .size = 16, .alignment = 8, .flags = 0 },
{ .offset = 2360, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2368, .size = 32, .alignment = 8, .flags = 0 },
{ .offset = 2400, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2404, .size = 4, .alignment = 1, .flags = 0 },
{ .offset = 2408, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2416, .size = 32, .alignment = 8, .flags = 1 },
{ .offset = 2448, .size = 16, .alignment = 8, .flags = 1 },
{ .offset = 2464, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2472, .size = 2, .alignment = 2, .flags = 0 },
{ .offset = 2474, .size = 1, .alignment = 1, .flags = 0 },
{ .offset = 2476, .size = 2, .alignment = 2, .flags = 0 },
{ .offset = 2480, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2488, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2492, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2496, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2504, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2508, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2512, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2516, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2520, .size = 16, .alignment = 8, .flags = 0 },
{ .offset = 2536, .size = 16, .alignment = 8, .flags = 0 },
{ .offset = 2552, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2560, .size = 16, .alignment = 8, .flags = 0 },
{ .offset = 2576, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2584, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2588, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2592, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2600, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2608, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2616, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2624, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2632, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2640, .size = 16, .alignment = 1, .flags = 1 },
{ .offset = 2656, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2660, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2664, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2672, .size = 40, .alignment = 8, .flags = 0 },
{ .offset = 2712, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2720, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2728, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2736, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2744, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2752, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2760, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2768, .size = 8, .alignment = 1, .flags = 1 },
{ .offset = 2776, .size = 16, .alignment = 8, .flags = 0 },
{ .offset = 2792, .size = 4, .alignment = 4, .flags = 0 },
{ .offset = 2800, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2808, .size = 8, .alignment = 8, .flags = 0 },
{ .offset = 2816, .size = 16, .alignment = 8, .flags = 0 }
}; };
static int check_target(uint32_t tidx) { static int check_target(uint32_t tidx) {
@ -46,20 +238,30 @@ static int check_target(uint32_t tidx) {
for (uint32_t i = 0; i < fieldcnt; i++) { for (uint32_t i = 0; i < fieldcnt; i++) {
struct spslr_randomizer_field_info finfo; struct spslr_randomizer_field_info finfo;
if (spslr_randomizer_get_field(tidx, i, SPSLR_RANDOMIZER_FIELD_IDX_MODE_FINAL, &finfo) < 0) if (spslr_randomizer_get_field(tidx, i, SPSLR_RANDOMIZER_FIELD_IDX_MODE_FINAL, &finfo) < 0) {
fprintf(stderr, "failed to get field from randomizer\n");
return -1; return -1;
}
if (finfo.offset < cur_end) if (finfo.offset < cur_end) {
fprintf(stderr, "field overlaps with predecessor (begins at %u, pred ends at %u)\n", finfo.offset, cur_end);
return -1; return -1;
}
if (finfo.offset % finfo.alignment != 0) if (finfo.offset % finfo.alignment != 0) {
fprintf(stderr, "field is misaligned at %u\n (alignment is %u)", finfo.offset, finfo.alignment);
return -1; return -1;
}
if ((finfo.flags & SPSLR_FLAG_FIELD_FIXED) && finfo.offset != finfo.initial_offset) if ((finfo.flags & SPSLR_FLAG_FIELD_FIXED) && finfo.offset != finfo.initial_offset) {
fprintf(stderr, "fixed field moved\n");
return -1; return -1;
}
if (finfo.offset + finfo.size > tsize) if (finfo.offset + finfo.size > tsize) {
fprintf(stderr, "field resides beyond target bounds");
return -1; return -1;
}
cur_end = finfo.offset + finfo.size; cur_end = finfo.offset + finfo.size;
} }
@ -70,7 +272,9 @@ static int check_target(uint32_t tidx) {
int main(void) { int main(void) {
srand((unsigned)time(NULL)); srand((unsigned)time(NULL));
for (uint32_t iter = 0; iter < 1000000; iter++) { uint32_t rounds = 1000;
for (uint32_t iter = 0; iter < rounds; iter++) {
if (spslr_randomizer_init() < 0) { if (spslr_randomizer_init() < 0) {
fprintf(stderr, "init failed\n"); fprintf(stderr, "init failed\n");
return 1; return 1;
@ -91,6 +295,6 @@ int main(void) {
spslr_randomizer_clear(); spslr_randomizer_clear();
} }
printf("ok: 1000000 iterations\n"); printf("ok: %u iterations\n", rounds);
return 0; return 0;
} }