|
|
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: int main(int argc, const char *argv[])
13: {
14: /* expected to fail */
15: const char *fail_name[] = {
16: "afoo",
17: "zbar",
18: };
19: Uint32 fail_addr[] = {
20: 0x10,
21: 0x30,
22: };
23: /* expected to succeed */
24: const char *success_name[] = {
25: "os_magic",
26: "p_root"
27: };
28: Uint32 success_addr[] = {
29: 0x14,
30: 0x28,
31: };
32:
1.1.1.2 root 33: #define DO_CMD(cmd) Symbols_Command(ARRAY_SIZE(cmd), cmd)
1.1 root 34: char symbols[] = "symbols";
35: char fname[] = "data/os-header.sym";
36: char sname[] = "name";
1.1.1.3 ! root 37: char scode[] = "code";
! 38: char sdata[] = "data";
1.1 root 39: char sfree[] = "free";
40: char *cmd_load[] = { symbols, fname };
41: char *cmd_free[] = { symbols, sfree };
42: char *cmd_show_byname[] = { symbols, sname };
1.1.1.3 ! root 43: char *cmd_show_bycode[] = { symbols, scode };
! 44: char *cmd_show_bydata[] = { symbols, sdata };
1.1 root 45:
46: int i, tests = 0, errors = 0;
47: const char *name;
48: Uint32 addr;
49:
50: DO_CMD(cmd_load);
1.1.1.3 ! root 51: DO_CMD(cmd_show_bycode);
! 52: DO_CMD(cmd_show_bydata);
1.1 root 53: DO_CMD(cmd_show_byname);
54: DO_CMD(cmd_load); /* free + reload */
55:
56: fprintf(stderr, "\nStuff that should FAIL:\n");
1.1.1.2 root 57: for (i = 0; i < ARRAY_SIZE(fail_name); i++) {
1.1 root 58: name = fail_name[i];
59: if (Symbols_GetCpuAddress(SYMTYPE_ALL, name, &addr)) {
60: fprintf(stderr, "*** Unexpected SUCCESS from '%s' (0x%08x) ***\n", name, addr);
61: errors++;
62: } else {
63: fprintf(stderr, "- '%s'\n", name);
64: }
65: }
66: tests += i;
1.1.1.2 root 67: for (i = 0; i < ARRAY_SIZE(fail_addr); i++) {
1.1 root 68: addr = fail_addr[i];
1.1.1.3 ! root 69: name = Symbols_GetByCpuAddress(addr, SYMTYPE_ALL);
1.1 root 70: if (name) {
71: fprintf(stderr, "*** Unexpected SUCCESS from 0x%08x (%s) ***\n", addr, name);
72: errors++;
73: } else {
74: fprintf(stderr, "- 0x%08x\n", addr);
75: }
76: }
77: tests += i;
78:
79: fprintf(stderr, "\nStuff that should SUCCEED:\n");
1.1.1.2 root 80: for (i = 0; i < ARRAY_SIZE(success_name); i++) {
1.1 root 81: name = success_name[i];
82: if (Symbols_GetCpuAddress(SYMTYPE_ALL, name, &addr)) {
83: fprintf(stderr, "- '%s'\n", name);
84: } else {
85: fprintf(stderr, "*** Unexpected FAIL from '%s' ***\n", name);
86: errors++;
87: }
88: }
89: tests += i;
1.1.1.2 root 90: for (i = 0; i < ARRAY_SIZE(success_addr); i++) {
1.1 root 91: addr = success_addr[i];
1.1.1.3 ! root 92: name = Symbols_GetByCpuAddress(addr, SYMTYPE_ALL);
1.1 root 93: if (name) {
94: fprintf(stderr, "- 0x%08x: %s\n", addr, name);
95: } else {
96: fprintf(stderr, "*** Unexpected FAIL from 0x%08x ***\n", addr);
97: errors++;
98: }
99: }
100: tests += i;
101:
102: DO_CMD(cmd_free);
103: if (errors) {
104: fprintf(stderr, "\n***Detected %d ERRORs in %d automated tests!***\n\n",
105: errors, tests);
106: } else {
107: fprintf(stderr, "\nFinished without any errors!\n\n");
108: }
109: return errors;
110: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.