| author | Ruben Gonzalez <drifter01620@gmail.com> |
| Thu May 22 09:49:27 2014 -0400 (2014-05-22) | |
| changeset 4378 | 568f4497ef4a |
| parent 4116 | 3e58428d988f |
| permissions | -rw-r--r-- |
| dvander@3989 | 1 |
// vim: set ts=4 sw=4 tw=99 noet: |
| dvander@2193 | 2 |
#ifndef _INCLUDE_SOURCEPAWN_JIT_SHARED_H_ |
| dvander@2193 | 3 |
#define _INCLUDE_SOURCEPAWN_JIT_SHARED_H_ |
| dvander@2193 | 4 |
|
| dvander@2193 | 5 |
#include <sp_vm_api.h> |
| dvander@2193 | 6 |
|
| dvander@2193 | 7 |
using namespace SourcePawn; |
| dvander@2193 | 8 |
|
| dvander@2226 | 9 |
#define SP_MAX_RETURN_STACK 1024 |
| dvander@2193 | 10 |
|
| dvander@2193 | 11 |
/** |
| dvander@2226 | 12 |
* @brief Information about the plugin's debug tables. These are all present if one is present. |
| dvander@2226 | 13 |
*/ |
| dvander@2193 | 14 |
typedef struct sp_plugin_debug_s |
| dvander@2193 | 15 |
{ |
| dvander@2193 | 16 |
const char *stringbase; /**< base of string table */ |
| dvander@2193 | 17 |
uint32_t files_num; /**< number of files */ |
| dvander@2193 | 18 |
sp_fdbg_file_t *files; /**< files table */ |
| dvander@2193 | 19 |
uint32_t lines_num; /**< number of lines */ |
| dvander@2193 | 20 |
sp_fdbg_line_t *lines; /**< lines table */ |
| dvander@2193 | 21 |
uint32_t syms_num; /**< number of symbols */ |
| dvander@2193 | 22 |
sp_fdbg_symbol_t *symbols; /**< symbol table */ |
| dvander@2378 | 23 |
bool unpacked; /**< Whether debug structures are unpacked */ |
| dvander@2193 | 24 |
} sp_plugin_debug_t; |
| dvander@2193 | 25 |
|
| dvander@2193 | 26 |
class BaseContext; |
| dvander@2193 | 27 |
|
| dvander@2193 | 28 |
/** |
| dvander@2226 | 29 |
* Breaks into a debugger |
| dvander@2226 | 30 |
* Params: |
| dvander@2226 | 31 |
* [0] - plugin context |
| dvander@2226 | 32 |
* [1] - frm |
| dvander@2226 | 33 |
* [2] - cip |
| dvander@2226 | 34 |
*/ |
| dvander@2193 | 35 |
typedef int (*SPVM_DEBUGBREAK)(BaseContext *, uint32_t, uint32_t); |
| dvander@2193 | 36 |
|
| dvander@2193 | 37 |
/** |
| dvander@2193 | 38 |
* @brief The rebased memory format of a plugin. This differs from the on-disk structure |
| dvander@2193 | 39 |
* to ensure that the format is properly read. |
| dvander@2193 | 40 |
*/ |
| dvander@2193 | 41 |
namespace SourcePawn |
| dvander@2193 | 42 |
{ |
| dvander@2193 | 43 |
typedef struct sp_plugin_s |
| dvander@2193 | 44 |
{ |
| dvander@2193 | 45 |
uint8_t *base; /**< Base of memory for this plugin. */ |
| dvander@2193 | 46 |
uint8_t *pcode; /**< P-Code of plugin */ |
| dvander@2193 | 47 |
uint32_t pcode_size; /**< Size of p-code */ |
| dvander@2193 | 48 |
uint8_t *data; /**< Data/memory layout */ |
| dvander@2193 | 49 |
uint32_t data_size; /**< Size of data */ |
| dvander@2193 | 50 |
uint32_t mem_size; /**< Required memory space */ |
| dvander@2193 | 51 |
uint16_t flags; /**< Code flags */ |
| dvander@2193 | 52 |
sp_plugin_debug_t debug; /**< Debug info table */ |
| dvander@2193 | 53 |
size_t base_size; /**< Size of the entire plugin base */ |
| dvander@2193 | 54 |
uint8_t *memory; /**< Data chunk */ |
| dvander@2226 | 55 |
const char *stringbase; /**< base of string table */ |
| dvander@2193 | 56 |
sp_public_t *publics; /**< Public functions table */ |
| dvander@2226 | 57 |
uint32_t num_publics; /**< Number of publics. */ |
| dvander@2193 | 58 |
sp_pubvar_t *pubvars; /**< Public variables table */ |
| dvander@2226 | 59 |
uint32_t num_pubvars; /**< Number of public variables */ |
| dvander@2193 | 60 |
sp_native_t *natives; /**< Natives table */ |
| dvander@2226 | 61 |
uint32_t num_natives; /**< Number of natives */ |
| dvander@2193 | 62 |
IProfiler *profiler; /**< Pointer to IProfiler */ |
| dvander@2193 | 63 |
uint32_t prof_flags; /**< Profiling flags */ |
| dvander@2193 | 64 |
uint32_t run_flags; /**< Runtime flags */ |
| dvander@2226 | 65 |
uint32_t pcode_version; /**< P-Code version number */ |
| dvander@2226 | 66 |
char *name; /**< Plugin/script name */ |
| dvander@2193 | 67 |
} sp_plugin_t; |
| dvander@2193 | 68 |
} |
| dvander@2193 | 69 |
|
| dvander@4116 | 70 |
struct tracker_t; |
| dvander@4116 | 71 |
class BaseContext; |
| dvander@4116 | 72 |
|
| dvander@2193 | 73 |
typedef struct sp_context_s |
| dvander@2193 | 74 |
{ |
| dvander@2226 | 75 |
cell_t hp; /**< Heap pointer */ |
| dvander@2226 | 76 |
cell_t sp; /**< Stack pointer */ |
| dvander@2226 | 77 |
cell_t frm; /**< Frame pointer */ |
| dvander@3989 | 78 |
cell_t rval; /**< Return value from InvokeFunction() */ |
| dvander@3990 | 79 |
int32_t cip; /**< Code pointer last error occurred in */ |
| dvander@4116 | 80 |
int32_t err; /**< Error last set by interpreter */ |
| dvander@2226 | 81 |
int32_t n_err; /**< Error code set by a native */ |
| dvander@2226 | 82 |
uint32_t n_idx; /**< Current native index being executed */ |
| dvander@4116 | 83 |
tracker_t *tracker; |
| dvander@4116 | 84 |
sp_plugin_t *plugin; |
| dvander@4116 | 85 |
BaseContext *basecx; |
| dvander@2226 | 86 |
void * vm[8]; /**< VM-specific pointers */ |
| dvander@2226 | 87 |
cell_t rp; /**< Return stack pointer */ |
| dvander@2226 | 88 |
cell_t rstk_cips[SP_MAX_RETURN_STACK]; |
| dvander@2193 | 89 |
} sp_context_t; |
| dvander@2193 | 90 |
|
| dvander@2226 | 91 |
//#define SPFLAG_PLUGIN_DEBUG (1<<0) |
| dvander@2193 | 92 |
#define SPFLAG_PLUGIN_PAUSED (1<<1) |
| dvander@2193 | 93 |
|
| dvander@2226 | 94 |
#define INVALID_CIP 0xFFFFFFFF |
| dvander@2226 | 95 |
|
| dvander@2193 | 96 |
#endif //_INCLUDE_SOURCEPAWN_JIT_SHARED_H_ |