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_
 |