Fleshing out the symbol database.
Now detecting a lot of functions via method hints and generating stub functions. A few holes (in the test xex), but enough to move forward with codegen.
This commit is contained in:
@@ -31,5 +31,9 @@ void xe_memory_release(xe_memory_ref memory);
|
||||
size_t xe_memory_get_length(xe_memory_ref memory);
|
||||
uint8_t *xe_memory_addr(xe_memory_ref memory, uint32_t guest_addr);
|
||||
|
||||
uint32_t xe_memory_search_aligned(xe_memory_ref memory, uint32_t start,
|
||||
uint32_t end, const uint32_t *values,
|
||||
const size_t value_count);
|
||||
|
||||
|
||||
#endif // XENIA_CORE_MEMORY_H_
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/cpu/sdb.h>
|
||||
#include <xenia/kernel/export.h>
|
||||
#include <xenia/kernel/module.h>
|
||||
|
||||
@@ -34,7 +33,6 @@ void xe_cpu_release(xe_cpu_ref cpu);
|
||||
|
||||
xe_pal_ref xe_cpu_get_pal(xe_cpu_ref cpu);
|
||||
xe_memory_ref xe_cpu_get_memory(xe_cpu_ref cpu);
|
||||
xe_sdb_ref xe_cpu_get_sdb(xe_cpu_ref cpu);
|
||||
|
||||
int xe_cpu_prepare_module(xe_cpu_ref cpu, xe_module_ref module,
|
||||
xe_kernel_export_resolver_ref export_resolver);
|
||||
|
||||
@@ -58,12 +58,20 @@ struct xe_sdb_variable {
|
||||
char *name;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
int type;
|
||||
union {
|
||||
xe_sdb_function_t* function;
|
||||
xe_sdb_variable_t* variable;
|
||||
};
|
||||
} xe_sdb_symbol_t;
|
||||
|
||||
|
||||
struct xe_sdb;
|
||||
typedef struct xe_sdb* xe_sdb_ref;
|
||||
|
||||
|
||||
xe_sdb_ref xe_sdb_create(xe_memory_ref memory);
|
||||
xe_sdb_ref xe_sdb_create(xe_memory_ref memory, xe_module_ref module);
|
||||
xe_sdb_ref xe_sdb_retain(xe_sdb_ref sdb);
|
||||
void xe_sdb_release(xe_sdb_ref sdb);
|
||||
|
||||
@@ -73,9 +81,10 @@ xe_sdb_variable_t* xe_sdb_insert_variable(xe_sdb_ref sdb, uint32_t address);
|
||||
xe_sdb_function_t* xe_sdb_get_function(xe_sdb_ref sdb, uint32_t address);
|
||||
xe_sdb_variable_t* xe_sdb_get_variable(xe_sdb_ref sdb, uint32_t address);
|
||||
|
||||
void xe_sdb_dump(xe_sdb_ref sdb);
|
||||
int xe_sdb_get_functions(xe_sdb_ref sdb, xe_sdb_function_t ***out_functions,
|
||||
size_t *out_function_count);
|
||||
|
||||
int xe_sdb_analyze_module(xe_sdb_ref sdb, xe_module_ref module);
|
||||
void xe_sdb_dump(xe_sdb_ref sdb);
|
||||
|
||||
|
||||
#endif // XENIA_CPU_SDB_H_
|
||||
|
||||
@@ -31,6 +31,7 @@ int strncpy_s(char* dest, size_t destLength, const char* source, size_t count);
|
||||
#define xestrlenw wcslen
|
||||
#define xestrcmpw wcscmp
|
||||
#define xestrcasecmpw _wcsicmp
|
||||
#define xsstrdupw wcsdup
|
||||
#define xestrchrw wcschr
|
||||
#define xestrrchrw wcsrchr
|
||||
#define xestrstrw wcsstr
|
||||
@@ -44,6 +45,7 @@ int strncpy_s(char* dest, size_t destLength, const char* source, size_t count);
|
||||
#define xestrlena strlen
|
||||
#define xestrcmpa strcmp
|
||||
#define xestrcasecmpa strcasecmp
|
||||
#define xestrdupa strdup
|
||||
#define xestrchra strchr
|
||||
#define xestrrchra strrchr
|
||||
#define xestrstra strstr
|
||||
@@ -62,6 +64,7 @@ typedef wchar_t xechar_t;
|
||||
#define xestrlen xestrlenw
|
||||
#define xestrcmp xestrcmpw
|
||||
#define xestrcasecmp xestrcasecmpw
|
||||
#define xestrdup xestrdupw
|
||||
#define xestrchr xestrchrw
|
||||
#define xestrrchr xestrrchrw
|
||||
#define xestrstr xestrstrw
|
||||
@@ -82,6 +85,7 @@ typedef char xechar_t;
|
||||
#define xestrlen xestrlena
|
||||
#define xestrcmp xestrcmpa
|
||||
#define xestrcasecmp xestrcasecmpa
|
||||
#define xestrdup xestrdupa
|
||||
#define xestrchr xestrchra
|
||||
#define xestrrchr xestrrchra
|
||||
#define xestrstr xestrstra
|
||||
|
||||
Reference in New Issue
Block a user