8d78c74554
I accidentally changed the debug table packing in a commit a while ago. This explains the nonsense debug output and crashes people have been getting on the 1.1 branch. Fortunately this is (mostly) detectable via the "debug.natives" table and the JIT will unpack symbols based on that information.
88 lines
2.9 KiB
C++
88 lines
2.9 KiB
C++
#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;
|
|
}
|
|
|
|
typedef struct sp_context_s
|
|
{
|
|
cell_t hp; /**< Heap pointer */
|
|
cell_t sp; /**< Stack pointer */
|
|
cell_t frm; /**< Frame pointer */
|
|
int32_t err_cip; /**< Code pointer last error occurred in */
|
|
int32_t n_err; /**< Error code set by a native */
|
|
uint32_t n_idx; /**< Current native index being executed */
|
|
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_
|