|
|
1.1 ! root 1: /* ! 2: * Code to test Hatari symbol/address (re-)loading in src/debug/symbols.c ! 3: */ ! 4: #include <stdio.h> ! 5: #include <SDL_types.h> ! 6: #include <stdbool.h> ! 7: #include "debug_priv.h" ! 8: #include "symbols.h" ! 9: #include "main.h" ! 10: #include "log.h" ! 11: ! 12: /* dummy variable for debugcpu.c */ ! 13: Uint32 LogTraceFlags = TRACE_CPU_DISASM; ! 14: ! 15: /* dummy symbols.c dep function */ ! 16: void DebugUI_PrintCmdHelp(const char *cmd) ! 17: { ! 18: fprintf(stderr, "Help!\n"); ! 19: } ! 20: ! 21: int main(int argc, const char *argv[]) ! 22: { ! 23: /* expected to fail */ ! 24: const char *fail_name[] = { ! 25: "afoo", ! 26: "zbar", ! 27: }; ! 28: Uint32 fail_addr[] = { ! 29: 0x10, ! 30: 0x30, ! 31: }; ! 32: /* expected to succeed */ ! 33: const char *success_name[] = { ! 34: "os_magic", ! 35: "p_root" ! 36: }; ! 37: Uint32 success_addr[] = { ! 38: 0x14, ! 39: 0x28, ! 40: }; ! 41: ! 42: #define DO_CMD(cmd) Symbols_Command(ARRAYSIZE(cmd), cmd) ! 43: char symbols[] = "symbols"; ! 44: char fname[] = "os-header.sym"; ! 45: char sname[] = "name"; ! 46: char saddr[] = "addr"; ! 47: char sfree[] = "free"; ! 48: char *cmd_load[] = { symbols, fname }; ! 49: char *cmd_free[] = { symbols, sfree }; ! 50: char *cmd_show_byname[] = { symbols, sname }; ! 51: char *cmd_show_byaddr[] = { symbols, saddr }; ! 52: ! 53: int i, tests = 0, errors = 0; ! 54: const char *name; ! 55: Uint32 addr; ! 56: ! 57: DO_CMD(cmd_load); ! 58: DO_CMD(cmd_show_byaddr); ! 59: fprintf(stderr, "\n"); ! 60: DO_CMD(cmd_show_byname); ! 61: DO_CMD(cmd_load); /* free + reload */ ! 62: ! 63: fprintf(stderr, "\nStuff that should FAIL:\n"); ! 64: for (i = 0; i < ARRAYSIZE(fail_name); i++) { ! 65: name = fail_name[i]; ! 66: if (Symbols_GetCpuAddress(SYMTYPE_ALL, name, &addr)) { ! 67: fprintf(stderr, "*** Unexpected SUCCESS from '%s' (0x%08x) ***\n", name, addr); ! 68: errors++; ! 69: } else { ! 70: fprintf(stderr, "- '%s'\n", name); ! 71: } ! 72: } ! 73: tests += i; ! 74: for (i = 0; i < ARRAYSIZE(fail_addr); i++) { ! 75: addr = fail_addr[i]; ! 76: name = Symbols_GetByCpuAddress(addr); ! 77: if (name) { ! 78: fprintf(stderr, "*** Unexpected SUCCESS from 0x%08x (%s) ***\n", addr, name); ! 79: errors++; ! 80: } else { ! 81: fprintf(stderr, "- 0x%08x\n", addr); ! 82: } ! 83: } ! 84: tests += i; ! 85: ! 86: fprintf(stderr, "\nStuff that should SUCCEED:\n"); ! 87: for (i = 0; i < ARRAYSIZE(success_name); i++) { ! 88: name = success_name[i]; ! 89: if (Symbols_GetCpuAddress(SYMTYPE_ALL, name, &addr)) { ! 90: fprintf(stderr, "- '%s'\n", name); ! 91: } else { ! 92: fprintf(stderr, "*** Unexpected FAIL from '%s' ***\n", name); ! 93: errors++; ! 94: } ! 95: } ! 96: tests += i; ! 97: for (i = 0; i < ARRAYSIZE(success_addr); i++) { ! 98: addr = success_addr[i]; ! 99: name = Symbols_GetByCpuAddress(addr); ! 100: if (name) { ! 101: fprintf(stderr, "- 0x%08x: %s\n", addr, name); ! 102: } else { ! 103: fprintf(stderr, "*** Unexpected FAIL from 0x%08x ***\n", addr); ! 104: errors++; ! 105: } ! 106: } ! 107: tests += i; ! 108: ! 109: DO_CMD(cmd_free); ! 110: if (errors) { ! 111: fprintf(stderr, "\n***Detected %d ERRORs in %d automated tests!***\n\n", ! 112: errors, tests); ! 113: } else { ! 114: fprintf(stderr, "\nFinished without any errors!\n\n"); ! 115: } ! 116: return errors; ! 117: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.