97 lines
3.2 KiB
C++
97 lines
3.2 KiB
C++
// vim: set ts=4 sw=4 tw=99 noet:
|
|
#ifndef _INCLUDE_SOURCEPAWN_JIT_SHARED_H_
|
|
#define _INCLUDE_SOURCEPAWN_JIT_SHARED_H_
|
|
|
|
#include <sp_vm_api.h>
|
|
|
|
using namespace SourcePawn;
|
|
|
|
#define SP_MAX_RETURN_STACK 1024
|
|
|
|
/**
|
|
* @brief Information about the plugin's debug tables. These are all present if one is present.
|
|
*/
|
|
typedef struct sp_plugin_debug_s
|
|
{
|
|
const char *stringbase; /**< base of string table */
|
|
uint32_t files_num; /**< number of files */
|
|
sp_fdbg_file_t *files; /**< files table */
|
|
uint32_t lines_num; /**< number of lines */
|
|
sp_fdbg_line_t *lines; /**< lines table */
|
|
uint32_t syms_num; /**< number of symbols */
|
|
sp_fdbg_symbol_t *symbols; /**< symbol table */
|
|
bool unpacked; /**< Whether debug structures are unpacked */
|
|
} sp_plugin_debug_t;
|
|
|
|
class BaseContext;
|
|
|
|
/**
|
|
* Breaks into a debugger
|
|
* Params:
|
|
* [0] - plugin context
|
|
* [1] - frm
|
|
* [2] - cip
|
|
*/
|
|
typedef int (*SPVM_DEBUGBREAK)(BaseContext *, uint32_t, uint32_t);
|
|
|
|
/**
|
|
* @brief The rebased memory format of a plugin. This differs from the on-disk structure
|
|
* to ensure that the format is properly read.
|
|
*/
|
|
namespace SourcePawn
|
|
{
|
|
typedef struct sp_plugin_s
|
|
{
|
|
uint8_t *base; /**< Base of memory for this plugin. */
|
|
uint8_t *pcode; /**< P-Code of plugin */
|
|
uint32_t pcode_size; /**< Size of p-code */
|
|
uint8_t *data; /**< Data/memory layout */
|
|
uint32_t data_size; /**< Size of data */
|
|
uint32_t mem_size; /**< Required memory space */
|
|
uint16_t flags; /**< Code flags */
|
|
sp_plugin_debug_t debug; /**< Debug info table */
|
|
size_t base_size; /**< Size of the entire plugin base */
|
|
uint8_t *memory; /**< Data chunk */
|
|
const char *stringbase; /**< base of string table */
|
|
sp_public_t *publics; /**< Public functions table */
|
|
uint32_t num_publics; /**< Number of publics. */
|
|
sp_pubvar_t *pubvars; /**< Public variables table */
|
|
uint32_t num_pubvars; /**< Number of public variables */
|
|
sp_native_t *natives; /**< Natives table */
|
|
uint32_t num_natives; /**< Number of natives */
|
|
IProfiler *profiler; /**< Pointer to IProfiler */
|
|
uint32_t prof_flags; /**< Profiling flags */
|
|
uint32_t run_flags; /**< Runtime flags */
|
|
uint32_t pcode_version; /**< P-Code version number */
|
|
char *name; /**< Plugin/script name */
|
|
} sp_plugin_t;
|
|
}
|
|
|
|
struct tracker_t;
|
|
class BaseContext;
|
|
|
|
typedef struct sp_context_s
|
|
{
|
|
cell_t hp; /**< Heap pointer */
|
|
cell_t sp; /**< Stack pointer */
|
|
cell_t frm; /**< Frame pointer */
|
|
cell_t rval; /**< Return value from InvokeFunction() */
|
|
int32_t cip; /**< Code pointer last error occurred in */
|
|
int32_t err; /**< Error last set by interpreter */
|
|
int32_t n_err; /**< Error code set by a native */
|
|
uint32_t n_idx; /**< Current native index being executed */
|
|
tracker_t *tracker;
|
|
sp_plugin_t *plugin;
|
|
BaseContext *basecx;
|
|
void * vm[8]; /**< VM-specific pointers */
|
|
cell_t rp; /**< Return stack pointer */
|
|
cell_t rstk_cips[SP_MAX_RETURN_STACK];
|
|
} sp_context_t;
|
|
|
|
//#define SPFLAG_PLUGIN_DEBUG (1<<0)
|
|
#define SPFLAG_PLUGIN_PAUSED (1<<1)
|
|
|
|
#define INVALID_CIP 0xFFFFFFFF
|
|
|
|
#endif //_INCLUDE_SOURCEPAWN_JIT_SHARED_H_
|