#include #include #include #include #include #include #include void *spslr_env_malloc(spslr_u32 size) { return malloc(size); } void spslr_env_free(void *ptr) { free(ptr); } spslr_u32 spslr_env_random_u32(void) { return ((spslr_u32)rand() << 16) ^ (spslr_u32)rand(); } void __init spslr_env_debug(const char* fmt, ...) { va_list args; va_start(args, fmt); fprintf(stdout, "[spslr_debug] "); vfprintf(stdout, fmt, args); fprintf(stdout, "\n"); va_end(args); } const spslr_u32 spslr_target_cnt = 1; const spslr_u32 spslr_target_field_cnt = 196; const struct spslr_target spslr_targets[] = { { .size = 2880, .fieldcnt = 196, .fieldoff = 0, }, }; const struct spslr_target_field spslr_target_fields[] = { { .offset = 0, .size = 8, .alignment = 8, .flags = 0 }, { .offset = 8, .size = 4, .alignment = 4, .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(spslr_u32 tidx) { spslr_u32 tsize, fieldcnt; if (spslr_randomizer_get_target(tidx, &tsize, &fieldcnt) < 0) return -1; spslr_u32 cur_end = 0; for (spslr_u32 i = 0; i < fieldcnt; i++) { struct spslr_randomizer_field_info finfo; 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; } 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; } if (finfo.offset % finfo.alignment != 0) { fprintf(stderr, "field is misaligned at %u\n (alignment is %u)", finfo.offset, finfo.alignment); return -1; } if ((finfo.flags & SPSLR_FLAG_FIELD_FIXED) && finfo.offset != finfo.initial_offset) { fprintf(stderr, "fixed field moved\n"); return -1; } if (finfo.offset + finfo.size > tsize) { fprintf(stderr, "field resides beyond target bounds"); return -1; } cur_end = finfo.offset + finfo.size; } return 0; } int main(void) { srand((unsigned)time(NULL)); spslr_u32 rounds = 1000; for (spslr_u32 iter = 0; iter < rounds; iter++) { if (spslr_randomizer_init() < 0) { fprintf(stderr, "init failed\n"); return 1; } if (spslr_randomize() < 0) { fprintf(stderr, "randomize failed at iter %u\n", iter); return 1; } for (spslr_u32 tidx = 0; tidx < spslr_target_cnt; tidx++) { if (check_target(tidx) < 0) { fprintf(stderr, "check failed at iter %u target %u\n", iter, tidx); return 1; } } spslr_randomizer_clear(); } printf("ok: %u iterations\n", rounds); return 0; }