diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-14 17:58:04 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-14 17:58:04 +0100 |
| commit | 4919f161cc7a0cfa31f91b0d1e2d0ff600044ff6 (patch) | |
| tree | e89e9892fa166aa348b8c9f902de7428e875c7bc /src/include/dynablock.h | |
| parent | 3dda84e58b148f92b2bb4d94caacc84011fa3919 (diff) | |
| download | box64-4919f161cc7a0cfa31f91b0d1e2d0ff600044ff6.tar.gz box64-4919f161cc7a0cfa31f91b0d1e2d0ff600044ff6.zip | |
[DYNAREC] Added Basic blocks for dynarec
Diffstat (limited to 'src/include/dynablock.h')
| -rwxr-xr-x | src/include/dynablock.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/include/dynablock.h b/src/include/dynablock.h new file mode 100755 index 00000000..76f1e5e0 --- /dev/null +++ b/src/include/dynablock.h @@ -0,0 +1,31 @@ +#ifndef __DYNABLOCK_H_ +#define __DYNABLOCK_H_ + +typedef struct x64emu_s x64emu_t; +typedef struct dynablock_s dynablock_t; +typedef struct dynablocklist_s dynablocklist_t; +typedef struct kh_dynablocks_s kh_dynablocks_t; + +uint32_t X31_hash_code(void* addr, int len); +dynablocklist_t* NewDynablockList(uintptr_t text, int textsz, int direct); +void FreeDynablockList(dynablocklist_t** dynablocks); +void FreeDynablock(dynablock_t* db); +void MarkDynablock(dynablock_t* db); +void FreeRangeDynablock(dynablocklist_t* dynablocks, uintptr_t addr, uintptr_t size); +void MarkRangeDynablock(dynablocklist_t* dynablocks, uintptr_t addr, uintptr_t size); + +dynablock_t* FindDynablockFromNativeAddress(void* addr); // defined in box64context.h +dynablock_t* FindDynablockDynablocklist(void* addr, kh_dynablocks_t* dynablocks); + +uintptr_t StartDynablockList(dynablocklist_t* db); +uintptr_t EndDynablockList(dynablocklist_t* db); +void MarkDirectDynablock(dynablocklist_t* dynablocks, uintptr_t addr, uintptr_t size); + +// Handling of Dynarec block (i.e. an exectable chunk of x64 translated code) +dynablock_t* DBGetBlock(x64emu_t* emu, uintptr_t addr, int create, dynablock_t** current); // return NULL if block is not found / cannot be created. Don't create if create==0 +dynablock_t* DBAlternateBlock(x64emu_t* emu, uintptr_t addr, uintptr_t filladdr); + +// Create and Add an new dynablock in the list, handling direct/map +dynablock_t *AddNewDynablock(dynablocklist_t* dynablocks, uintptr_t addr, int* created); + +#endif //__DYNABLOCK_H_ \ No newline at end of file |