sourcepawn/jit/jit_shared.h
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--
Update CS:GO team score gamedata.
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_