more api for core
sets profiler+debugger now --HG-- branch : refac-jit extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/branches/refac-jit%402376
This commit is contained in:
		
							parent
							
								
									492c913aa9
								
							
						
					
					
						commit
						5351bbec71
					
				| @ -109,25 +109,25 @@ namespace SourceMod | |||||||
| 		virtual PluginType GetType() =0; | 		virtual PluginType GetType() =0; | ||||||
| 
 | 
 | ||||||
| 		/**
 | 		/**
 | ||||||
| 		 * @brief Returns the current API context being used in the plugin. | 		 * @brief Returns the IPluginRuntime::GetDefaultContext() value. | ||||||
| 		 * | 		 * | ||||||
| 		 * @return	Pointer to an IPluginContext, or NULL if not loaded. | 		 * @return	Pointer to an IPluginContext, or NULL if not loaded. | ||||||
| 		 */ | 		 */ | ||||||
| 		virtual SourcePawn::IPluginContext *GetBaseContext() =0; | 		virtual SourcePawn::IPluginContext *GetBaseContext() =0; | ||||||
| 
 | 
 | ||||||
| 		/**
 | 		/**
 | ||||||
| 		 * @brief Returns the context structure being used in the plugin. | 		 * @brief Deprecated, returns NULL. | ||||||
| 		 * | 		 * | ||||||
| 		 * @return	Pointer to an sp_context_t, or NULL if not loaded. | 		 * @return	NULL. | ||||||
| 		 */ | 		 */ | ||||||
| 		virtual sp_context_t *GetContext() =0; | 		virtual sp_context_t *GetContext() =0; | ||||||
| 
 | 
 | ||||||
| 		/**
 | 		/**
 | ||||||
| 		 * @brief Returns the plugin file structure. | 		 * @brief Deprecated, returns NULL. | ||||||
| 		 * | 		 * | ||||||
| 		 * @return	Pointer to an sp_plugin_t, or NULL if not loaded. | 		 * @return	NULL. | ||||||
| 		 */ | 		 */ | ||||||
| 		virtual const sp_plugin_t *GetPluginStructure() =0; | 		virtual void *GetPluginStructure() =0; | ||||||
| 
 | 
 | ||||||
| 		/**
 | 		/**
 | ||||||
| 		 * @brief Returns information about the plugin by reference. | 		 * @brief Returns information about the plugin by reference. | ||||||
| @ -189,6 +189,13 @@ namespace SourceMod | |||||||
| 		 * @return			True if the property existed, false otherwise. | 		 * @return			True if the property existed, false otherwise. | ||||||
| 		 */ | 		 */ | ||||||
| 		virtual bool GetProperty(const char *prop, void **ptr, bool remove=false) =0; | 		virtual bool GetProperty(const char *prop, void **ptr, bool remove=false) =0; | ||||||
|  | 
 | ||||||
|  | 		/**
 | ||||||
|  | 		 * @brief Returns the runtime representing this plugin. | ||||||
|  | 		 * | ||||||
|  | 		 * @return			IPluginRuntime pointer, or NULL if not loaded. | ||||||
|  | 		 */ | ||||||
|  | 		virtual SourcePawn::IPluginRuntime *GetRuntime() =0; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -234,7 +234,7 @@ namespace SourcePawn | |||||||
| 		 * @brief Executes the forward, resets the pushed parameter list, and  | 		 * @brief Executes the forward, resets the pushed parameter list, and  | ||||||
| 		 * performs any copybacks. | 		 * performs any copybacks. | ||||||
| 		 * | 		 * | ||||||
| 		 * Note: A function can only be executed given a context it was created in. | 		 * Note: A function can only be executed given a runtime it was created in. | ||||||
| 		 * | 		 * | ||||||
| 		 * @param ctx			Context to execute the function in. | 		 * @param ctx			Context to execute the function in. | ||||||
| 		 * @param result		Pointer to store return value in. | 		 * @param result		Pointer to store return value in. | ||||||
| @ -248,7 +248,7 @@ namespace SourcePawn | |||||||
| 		 * NOTE: You will get an error if you attempt to use CallFunction() with | 		 * NOTE: You will get an error if you attempt to use CallFunction() with | ||||||
| 		 * previously pushed parameters. | 		 * previously pushed parameters. | ||||||
| 		 * | 		 * | ||||||
| 		 * Note: A function can only be executed given a context it was created in. | 		 * Note: A function can only be executed given a runtime it was created in. | ||||||
| 		 * | 		 * | ||||||
| 		 * @param ctx			Context to execute the function in. | 		 * @param ctx			Context to execute the function in. | ||||||
| 		 * @param params		Array of cell parameters. | 		 * @param params		Array of cell parameters. | ||||||
| @ -466,6 +466,13 @@ namespace SourcePawn | |||||||
| 		 * @return				Pause state (true = paused, false = not). | 		 * @return				Pause state (true = paused, false = not). | ||||||
| 		 */ | 		 */ | ||||||
| 		virtual bool IsPaused() =0; | 		virtual bool IsPaused() =0; | ||||||
|  | 
 | ||||||
|  | 		/**
 | ||||||
|  | 		 * @brief Returns the estimated memory usage of this plugin. | ||||||
|  | 		 * | ||||||
|  | 		 * @return				Memory usage, in bytes. | ||||||
|  | 		 */ | ||||||
|  | 		virtual size_t GetMemUsage() =0; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	/**
 | 	/**
 | ||||||
| @ -765,10 +772,10 @@ namespace SourcePawn | |||||||
| 		 */ | 		 */ | ||||||
| 		virtual IPluginFunction *GetFunctionById(funcid_t func_id) =0; | 		virtual IPluginFunction *GetFunctionById(funcid_t func_id) =0; | ||||||
| 
 | 
 | ||||||
| #if defined SOURCEMOD_BUILD |  | ||||||
| 		/**
 | 		/**
 | ||||||
| 		 * @brief Returns the identity token for this context. | 		 * @brief Returns the identity token for this context. | ||||||
| 		 * Note: This is a helper function for native calls and the Handle System. | 		 *  | ||||||
|  | 		 * Note: This is a compatibility shim and is the same as GetKey(1). | ||||||
| 		 * | 		 * | ||||||
| 		 * @return			Identity token. | 		 * @return			Identity token. | ||||||
| 		 */ | 		 */ | ||||||
| @ -791,7 +798,6 @@ namespace SourcePawn | |||||||
| 		 * @param addr			Destination output pointer. | 		 * @param addr			Destination output pointer. | ||||||
| 		 */ | 		 */ | ||||||
| 		virtual int LocalToStringNULL(cell_t local_addr, char **addr) =0; | 		virtual int LocalToStringNULL(cell_t local_addr, char **addr) =0; | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| 		/**
 | 		/**
 | ||||||
| 		 * @brief Deprecated; do not use. | 		 * @brief Deprecated; do not use. | ||||||
| @ -849,6 +855,25 @@ namespace SourcePawn | |||||||
| 		 * @return				Parameter stack. | 		 * @return				Parameter stack. | ||||||
| 		 */ | 		 */ | ||||||
| 		virtual cell_t *GetLocalParams() =0; | 		virtual cell_t *GetLocalParams() =0; | ||||||
|  | 
 | ||||||
|  | 		/**
 | ||||||
|  | 		 * @brief Sets a local "key" that can be used for fast lookup. | ||||||
|  | 		 * | ||||||
|  | 		 * Only the "owner" of the context should be setting this. | ||||||
|  | 		 * | ||||||
|  | 		 * @param key			Key number (values allowed: 1 through 4). | ||||||
|  | 		 * @param value			Pointer value. | ||||||
|  | 		 */ | ||||||
|  | 		virtual void SetKey(int k, void *value) =0; | ||||||
|  | 
 | ||||||
|  | 		/**
 | ||||||
|  | 		 * @brief Retrieves a previously set "key." | ||||||
|  | 		 * | ||||||
|  | 		 * @param key			Key number (values allowed: 1 through 4). | ||||||
|  | 		 * @param value			Pointer to store value. | ||||||
|  | 		 * @return				True on success, false on failure. | ||||||
|  | 		 */ | ||||||
|  | 		virtual bool GetKey(int k, void **value) =0; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -1190,6 +1215,14 @@ namespace SourcePawn | |||||||
| 		 * @param profiler	Profiler pointer. | 		 * @param profiler	Profiler pointer. | ||||||
| 		 */ | 		 */ | ||||||
| 		virtual void SetProfiler(IProfiler *profiler) =0; | 		virtual void SetProfiler(IProfiler *profiler) =0; | ||||||
|  | 
 | ||||||
|  | 		/**
 | ||||||
|  | 		 * @brief Returns the string representation of an error message. | ||||||
|  | 		 * | ||||||
|  | 		 * @param err		Error code. | ||||||
|  | 		 * @return			Error string, or NULL if not found. | ||||||
|  | 		 */ | ||||||
|  | 		virtual const char *GetErrorString(int err) =0; | ||||||
| 	}; | 	}; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ | |||||||
| #include "sp_vm_engine.h" | #include "sp_vm_engine.h" | ||||||
| #include "x86/jit_x86.h" | #include "x86/jit_x86.h" | ||||||
| #include "sp_vm_basecontext.h" | #include "sp_vm_basecontext.h" | ||||||
|  | #include "engine2.h" | ||||||
| 
 | 
 | ||||||
| using namespace SourcePawn; | using namespace SourcePawn; | ||||||
| 
 | 
 | ||||||
| @ -28,6 +29,9 @@ BaseRuntime::BaseRuntime(sp_plugin_t *pl) : m_Debug(pl), m_pPlugin(pl) | |||||||
| 	{ | 	{ | ||||||
| 		m_PubFuncs = NULL; | 		m_PubFuncs = NULL; | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	m_pPlugin->dbreak = GlobalDebugBreak; | ||||||
|  | 	m_pPlugin->profiler = g_engine2.GetProfiler(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BaseRuntime::~BaseRuntime() | BaseRuntime::~BaseRuntime() | ||||||
| @ -331,3 +335,17 @@ bool BaseRuntime::IsPaused() | |||||||
| { | { | ||||||
| 	return ((m_pPlugin->run_flags & SPFLAG_PLUGIN_PAUSED) == SPFLAG_PLUGIN_PAUSED); | 	return ((m_pPlugin->run_flags & SPFLAG_PLUGIN_PAUSED) == SPFLAG_PLUGIN_PAUSED); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | size_t BaseRuntime::GetMemUsage() | ||||||
|  | { | ||||||
|  | 	size_t mem = 0; | ||||||
|  | 
 | ||||||
|  | 	mem += sizeof(this); | ||||||
|  | 	mem += sizeof(sp_plugin_t); | ||||||
|  | 	mem += sizeof(BaseContext); | ||||||
|  | 	mem += m_pPlugin->base_size; | ||||||
|  | 	mem += m_pPlugin->jit_codesize; | ||||||
|  | 	mem += m_pPlugin->jit_memsize; | ||||||
|  | 
 | ||||||
|  | 	return mem; | ||||||
|  | } | ||||||
|  | |||||||
| @ -44,6 +44,7 @@ public: | |||||||
| 	virtual int ApplyCompilationOptions(ICompilation *co); | 	virtual int ApplyCompilationOptions(ICompilation *co); | ||||||
| 	virtual void SetPauseState(bool paused); | 	virtual void SetPauseState(bool paused); | ||||||
| 	virtual bool IsPaused(); | 	virtual bool IsPaused(); | ||||||
|  | 	virtual size_t GetMemUsage(); | ||||||
| private: | private: | ||||||
| 	void ClearCompile(); | 	void ClearCompile(); | ||||||
| 	void RefreshFunctionCache(); | 	void RefreshFunctionCache(); | ||||||
|  | |||||||
| @ -195,6 +195,7 @@ IPluginRuntime *SourcePawnEngine2::LoadPlugin(ICompilation *co, const char *file | |||||||
| 
 | 
 | ||||||
| 	memset(plugin, 0, sizeof(sp_plugin_t)); | 	memset(plugin, 0, sizeof(sp_plugin_t)); | ||||||
| 
 | 
 | ||||||
|  | 	plugin->base_size = hdr.imagesize; | ||||||
| 	if (!_ReadPlugin(&hdr, base, plugin, err)) | 	if (!_ReadPlugin(&hdr, base, plugin, err)) | ||||||
| 	{ | 	{ | ||||||
| 		delete plugin; | 		delete plugin; | ||||||
| @ -269,3 +270,8 @@ ICompilation *SourcePawnEngine2::StartCompilation() | |||||||
| { | { | ||||||
| 	return g_Jit1.StartCompilation(); | 	return g_Jit1.StartCompilation(); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | const char *SourcePawnEngine2::GetErrorString(int err) | ||||||
|  | { | ||||||
|  | 	return g_engine1.GetErrorString(err); | ||||||
|  | } | ||||||
|  | |||||||
| @ -22,6 +22,7 @@ namespace SourcePawn | |||||||
| 		IDebugListener *SetDebugListener(IDebugListener *listener); | 		IDebugListener *SetDebugListener(IDebugListener *listener); | ||||||
| 		void SetProfiler(IProfiler *profiler); | 		void SetProfiler(IProfiler *profiler); | ||||||
| 		ICompilation *StartCompilation(); | 		ICompilation *StartCompilation(); | ||||||
|  | 		const char *GetErrorString(int err); | ||||||
| 	public: | 	public: | ||||||
| 		IProfiler *GetProfiler(); | 		IProfiler *GetProfiler(); | ||||||
| 	private: | 	private: | ||||||
|  | |||||||
| @ -61,6 +61,7 @@ namespace SourcePawn | |||||||
| 		uint16_t	flags;			/**< Code flags */ | 		uint16_t	flags;			/**< Code flags */ | ||||||
| 		sp_plugin_infotab_t info;	/**< Base info table */ | 		sp_plugin_infotab_t info;	/**< Base info table */ | ||||||
| 		sp_plugin_debug_t   debug;	/**< Debug info table */ | 		sp_plugin_debug_t   debug;	/**< Debug info table */ | ||||||
|  | 		size_t		base_size;		/**< Size of the entire plugin base */ | ||||||
| 		void		*codebase;		/**< Base of generated code and memory */ | 		void		*codebase;		/**< Base of generated code and memory */ | ||||||
| 		SPVM_DEBUGBREAK dbreak;		/**< Debug break function */ | 		SPVM_DEBUGBREAK dbreak;		/**< Debug break function */ | ||||||
| 		uint8_t		*memory;		/**< Data chunk */ | 		uint8_t		*memory;		/**< Data chunk */ | ||||||
| @ -73,6 +74,8 @@ namespace SourcePawn | |||||||
| 		IProfiler *profiler;		/**< Pointer to IProfiler */ | 		IProfiler *profiler;		/**< Pointer to IProfiler */ | ||||||
| 		uint32_t	prof_flags;		/**< Profiling flags */ | 		uint32_t	prof_flags;		/**< Profiling flags */ | ||||||
| 		uint32_t	run_flags;		/**< Runtime flags */ | 		uint32_t	run_flags;		/**< Runtime flags */ | ||||||
|  | 		size_t		jit_codesize;	/**< JIT compiled codesize */ | ||||||
|  | 		size_t		jit_memsize;	/**< JIT additional memory */ | ||||||
| 	} sp_plugin_t; | 	} sp_plugin_t; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -769,3 +769,26 @@ cell_t *BaseContext::GetLocalParams() | |||||||
| { | { | ||||||
| 	return (cell_t *)(m_pPlugin->memory + m_ctx.frm + (2 * sizeof(cell_t))); | 	return (cell_t *)(m_pPlugin->memory + m_ctx.frm + (2 * sizeof(cell_t))); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void BaseContext::SetKey(int k, void *value) | ||||||
|  | { | ||||||
|  | 	if (k < 1 || k > 4) | ||||||
|  | 	{ | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	m_keys[k - 1] = value; | ||||||
|  | 	m_keys_set[k - 1] = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool BaseContext::GetKey(int k, void **value) | ||||||
|  | { | ||||||
|  | 	if (k < 1 || k > 4 || m_keys_set[k - 1] == false) | ||||||
|  | 	{ | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	*value = m_keys[k - 1]; | ||||||
|  | 
 | ||||||
|  | 	return true; | ||||||
|  | } | ||||||
|  | |||||||
| @ -90,6 +90,8 @@ public: //IPluginContext | |||||||
| 	IPluginRuntime *GetRuntime(); | 	IPluginRuntime *GetRuntime(); | ||||||
| 	int GetLastNativeError(); | 	int GetLastNativeError(); | ||||||
| 	cell_t *GetLocalParams(); | 	cell_t *GetLocalParams(); | ||||||
|  | 	void SetKey(int k, void *value); | ||||||
|  | 	bool GetKey(int k, void **value); | ||||||
| public: | public: | ||||||
| 	bool IsInExec(); | 	bool IsInExec(); | ||||||
| private: | private: | ||||||
| @ -105,6 +107,8 @@ private: | |||||||
| 	bool m_InExec; | 	bool m_InExec; | ||||||
| 	BaseRuntime *m_pRuntime; | 	BaseRuntime *m_pRuntime; | ||||||
| 	sp_context_t m_ctx; | 	sp_context_t m_ctx; | ||||||
|  | 	void *m_keys[4]; | ||||||
|  | 	bool m_keys_set[4]; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #endif //_INCLUDE_SOURCEPAWN_BASECONTEXT_H_
 | #endif //_INCLUDE_SOURCEPAWN_BASECONTEXT_H_
 | ||||||
|  | |||||||
| @ -94,7 +94,7 @@ static const char *g_ErrorMsgTable[] = | |||||||
| 	"Call was aborted", | 	"Call was aborted", | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const char *GetSourcePawnErrorMessage(int error) | const char *SourcePawnEngine::GetErrorString(int error) | ||||||
| { | { | ||||||
| 	if (error < 1 || error > ERROR_MESSAGE_MAX) | 	if (error < 1 || error > ERROR_MESSAGE_MAX) | ||||||
| 	{ | 	{ | ||||||
|  | |||||||
| @ -86,6 +86,7 @@ public: //ISourcePawnEngine | |||||||
| 	void SetReadWrite(void *ptr); | 	void SetReadWrite(void *ptr); | ||||||
| 	void SetReadExecute(void *ptr); | 	void SetReadExecute(void *ptr); | ||||||
| 	void FreePageMemory(void *ptr); | 	void FreePageMemory(void *ptr); | ||||||
|  | 	const char *GetErrorString(int err); | ||||||
| public: //Debugger Stuff
 | public: //Debugger Stuff
 | ||||||
| 	/**
 | 	/**
 | ||||||
| 	 * @brief Pushes a context onto the top of the call tracer. | 	 * @brief Pushes a context onto the top of the call tracer. | ||||||
|  | |||||||
| @ -2673,6 +2673,8 @@ jit_rewind: | |||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	plugin->codebase = writer.outbase; | 	plugin->codebase = writer.outbase; | ||||||
|  | 	plugin->jit_codesize = codemem; | ||||||
|  | 	plugin->jit_memsize = 0; | ||||||
| 
 | 
 | ||||||
| 	/* setup memory */ | 	/* setup memory */ | ||||||
| 
 | 
 | ||||||
| @ -2691,6 +2693,7 @@ jit_rewind: | |||||||
| 	if ((max = plugin->info.publics_num)) | 	if ((max = plugin->info.publics_num)) | ||||||
| 	{ | 	{ | ||||||
| 		plugin->publics = new sp_public_t[max]; | 		plugin->publics = new sp_public_t[max]; | ||||||
|  | 		plugin->jit_memsize += sizeof(sp_public_t) * max; | ||||||
| 		for (iter=0; iter<max; iter++) | 		for (iter=0; iter<max; iter++) | ||||||
| 		{ | 		{ | ||||||
| 			plugin->publics[iter].name = strbase + plugin->info.publics[iter].name; | 			plugin->publics[iter].name = strbase + plugin->info.publics[iter].name; | ||||||
| @ -2705,6 +2708,7 @@ jit_rewind: | |||||||
| 	{ | 	{ | ||||||
| 		uint8_t *dat = plugin->memory; | 		uint8_t *dat = plugin->memory; | ||||||
| 		plugin->pubvars = new sp_pubvar_t[max]; | 		plugin->pubvars = new sp_pubvar_t[max]; | ||||||
|  | 		plugin->jit_memsize += sizeof(sp_pubvar_t) * max; | ||||||
| 		for (iter=0; iter<max; iter++) | 		for (iter=0; iter<max; iter++) | ||||||
| 		{ | 		{ | ||||||
| 			plugin->pubvars[iter].name = strbase + plugin->info.pubvars[iter].name; | 			plugin->pubvars[iter].name = strbase + plugin->info.pubvars[iter].name; | ||||||
| @ -2716,6 +2720,7 @@ jit_rewind: | |||||||
| 	if ((max = plugin->info.natives_num)) | 	if ((max = plugin->info.natives_num)) | ||||||
| 	{ | 	{ | ||||||
| 		plugin->natives = new sp_native_t[max]; | 		plugin->natives = new sp_native_t[max]; | ||||||
|  | 		plugin->jit_memsize += sizeof(sp_native_t) * max; | ||||||
| 		for (iter=0; iter<max; iter++) | 		for (iter=0; iter<max; iter++) | ||||||
| 		{ | 		{ | ||||||
| 			plugin->natives[iter].name = strbase + plugin->info.natives[iter].name; | 			plugin->natives[iter].name = strbase + plugin->info.natives[iter].name; | ||||||
| @ -2736,6 +2741,7 @@ jit_rewind: | |||||||
| 		/* relocate files */ | 		/* relocate files */ | ||||||
| 		max = plugin->debug.files_num; | 		max = plugin->debug.files_num; | ||||||
| 		plugin->files = new sp_debug_file_t[max]; | 		plugin->files = new sp_debug_file_t[max]; | ||||||
|  | 		plugin->jit_memsize += sizeof(sp_debug_file_t) * max; | ||||||
| 		for (iter=0; iter<max; iter++) | 		for (iter=0; iter<max; iter++) | ||||||
| 		{ | 		{ | ||||||
| 			plugin->files[iter].addr = RelocLookup(jit, plugin->debug.files[iter].addr, false); | 			plugin->files[iter].addr = RelocLookup(jit, plugin->debug.files[iter].addr, false); | ||||||
| @ -2745,6 +2751,7 @@ jit_rewind: | |||||||
| 		/* relocate lines */ | 		/* relocate lines */ | ||||||
| 		max = plugin->debug.lines_num; | 		max = plugin->debug.lines_num; | ||||||
| 		plugin->lines = new sp_debug_line_t[max]; | 		plugin->lines = new sp_debug_line_t[max]; | ||||||
|  | 		plugin->jit_memsize += sizeof(sp_debug_line_t) * max; | ||||||
| 		for (iter=0; iter<max; iter++) | 		for (iter=0; iter<max; iter++) | ||||||
| 		{ | 		{ | ||||||
| 			plugin->lines[iter].addr = RelocLookup(jit, plugin->debug.lines[iter].addr, false); | 			plugin->lines[iter].addr = RelocLookup(jit, plugin->debug.lines[iter].addr, false); | ||||||
| @ -2758,6 +2765,7 @@ jit_rewind: | |||||||
| 		 | 		 | ||||||
| 		max = plugin->debug.syms_num; | 		max = plugin->debug.syms_num; | ||||||
| 		plugin->symbols = new sp_debug_symbol_t[max]; | 		plugin->symbols = new sp_debug_symbol_t[max]; | ||||||
|  | 		plugin->jit_memsize += sizeof(sp_debug_symbol_t) * max; | ||||||
| 		for (iter=0; iter<max; iter++) | 		for (iter=0; iter<max; iter++) | ||||||
| 		{ | 		{ | ||||||
| 			sym = (sp_fdbg_symbol_t *)cursor; | 			sym = (sp_fdbg_symbol_t *)cursor; | ||||||
| @ -2805,6 +2813,8 @@ jit_rewind: | |||||||
| 	trk->pCur = trk->pBase; | 	trk->pCur = trk->pBase; | ||||||
| 	trk->size = 1024 / sizeof(cell_t); | 	trk->size = 1024 / sizeof(cell_t); | ||||||
| 
 | 
 | ||||||
|  | 	plugin->jit_memsize += trk->size; | ||||||
|  | 
 | ||||||
| 	/* clean up relocation+compilation memory */ | 	/* clean up relocation+compilation memory */ | ||||||
| 	co->Abort(); | 	co->Abort(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user