mirror of
https://github.com/Wiimpathy/HatariWii.git
synced 2024-11-22 01:39:16 +01:00
109 lines
2.5 KiB
C
109 lines
2.5 KiB
C
/*
|
|
* Code to test Hatari symbol/address (re-)loading in src/debug/symbols.c
|
|
*/
|
|
#include <stdio.h>
|
|
#include <SDL_types.h>
|
|
#include <stdbool.h>
|
|
#include "debug_priv.h"
|
|
#include "symbols.h"
|
|
#include "main.h"
|
|
#include "log.h"
|
|
|
|
int main(int argc, const char *argv[])
|
|
{
|
|
/* expected to fail */
|
|
const char *fail_name[] = {
|
|
"afoo",
|
|
"zbar",
|
|
};
|
|
Uint32 fail_addr[] = {
|
|
0x10,
|
|
0x30,
|
|
};
|
|
/* expected to succeed */
|
|
const char *success_name[] = {
|
|
"os_magic",
|
|
"p_root"
|
|
};
|
|
Uint32 success_addr[] = {
|
|
0x14,
|
|
0x28,
|
|
};
|
|
|
|
#define DO_CMD(cmd) Symbols_Command(ARRAYSIZE(cmd), cmd)
|
|
char symbols[] = "symbols";
|
|
char fname[] = "data/os-header.sym";
|
|
char sname[] = "name";
|
|
char saddr[] = "addr";
|
|
char sfree[] = "free";
|
|
char *cmd_load[] = { symbols, fname };
|
|
char *cmd_free[] = { symbols, sfree };
|
|
char *cmd_show_byname[] = { symbols, sname };
|
|
char *cmd_show_byaddr[] = { symbols, saddr };
|
|
|
|
int i, tests = 0, errors = 0;
|
|
const char *name;
|
|
Uint32 addr;
|
|
|
|
DO_CMD(cmd_load);
|
|
DO_CMD(cmd_show_byaddr);
|
|
fprintf(stderr, "\n");
|
|
DO_CMD(cmd_show_byname);
|
|
DO_CMD(cmd_load); /* free + reload */
|
|
|
|
fprintf(stderr, "\nStuff that should FAIL:\n");
|
|
for (i = 0; i < ARRAYSIZE(fail_name); i++) {
|
|
name = fail_name[i];
|
|
if (Symbols_GetCpuAddress(SYMTYPE_ALL, name, &addr)) {
|
|
fprintf(stderr, "*** Unexpected SUCCESS from '%s' (0x%08x) ***\n", name, addr);
|
|
errors++;
|
|
} else {
|
|
fprintf(stderr, "- '%s'\n", name);
|
|
}
|
|
}
|
|
tests += i;
|
|
for (i = 0; i < ARRAYSIZE(fail_addr); i++) {
|
|
addr = fail_addr[i];
|
|
name = Symbols_GetByCpuAddress(addr);
|
|
if (name) {
|
|
fprintf(stderr, "*** Unexpected SUCCESS from 0x%08x (%s) ***\n", addr, name);
|
|
errors++;
|
|
} else {
|
|
fprintf(stderr, "- 0x%08x\n", addr);
|
|
}
|
|
}
|
|
tests += i;
|
|
|
|
fprintf(stderr, "\nStuff that should SUCCEED:\n");
|
|
for (i = 0; i < ARRAYSIZE(success_name); i++) {
|
|
name = success_name[i];
|
|
if (Symbols_GetCpuAddress(SYMTYPE_ALL, name, &addr)) {
|
|
fprintf(stderr, "- '%s'\n", name);
|
|
} else {
|
|
fprintf(stderr, "*** Unexpected FAIL from '%s' ***\n", name);
|
|
errors++;
|
|
}
|
|
}
|
|
tests += i;
|
|
for (i = 0; i < ARRAYSIZE(success_addr); i++) {
|
|
addr = success_addr[i];
|
|
name = Symbols_GetByCpuAddress(addr);
|
|
if (name) {
|
|
fprintf(stderr, "- 0x%08x: %s\n", addr, name);
|
|
} else {
|
|
fprintf(stderr, "*** Unexpected FAIL from 0x%08x ***\n", addr);
|
|
errors++;
|
|
}
|
|
}
|
|
tests += i;
|
|
|
|
DO_CMD(cmd_free);
|
|
if (errors) {
|
|
fprintf(stderr, "\n***Detected %d ERRORs in %d automated tests!***\n\n",
|
|
errors, tests);
|
|
} else {
|
|
fprintf(stderr, "\nFinished without any errors!\n\n");
|
|
}
|
|
return errors;
|
|
}
|