sourcepawn/jit/sp_vm_engine.h
author David Anderson <dvander@alliedmods.net>
Sun Oct 26 23:50:54 2008 -0500 (2008-10-26)
changeset 2377 6ee3bbd6fbdf
parent 2226 d10b38524be3
permissions -rw-r--r--
Fixed leaking relocation table memory in JIT.
dvander@2193
     1
/**
dvander@2193
     2
 * vim: set ts=4 :
dvander@2193
     3
 * =============================================================================
dvander@2193
     4
 * SourcePawn
dvander@2193
     5
 * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
dvander@2193
     6
 * =============================================================================
dvander@2193
     7
 *
dvander@2193
     8
 * This program is free software; you can redistribute it and/or modify it under
dvander@2193
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
dvander@2193
    10
 * Free Software Foundation.
dvander@2193
    11
 * 
dvander@2193
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
dvander@2193
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@2193
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
dvander@2193
    15
 * details.
dvander@2193
    16
 *
dvander@2193
    17
 * You should have received a copy of the GNU General Public License along with
dvander@2193
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
dvander@2193
    19
 *
dvander@2193
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
dvander@2193
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
dvander@2193
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
dvander@2193
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
dvander@2193
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
dvander@2193
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
dvander@2193
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
dvander@2193
    27
 * or <http://www.sourcemod.net/license.php>.
dvander@2193
    28
 *
dvander@2193
    29
 * Version: $Id$
dvander@2193
    30
 */
dvander@2193
    31
dvander@2193
    32
#ifndef _INCLUDE_SOURCEPAWN_VM_ENGINE_H_
dvander@2193
    33
#define _INCLUDE_SOURCEPAWN_VM_ENGINE_H_
dvander@2193
    34
dvander@2193
    35
#include "sp_vm_api.h"
dvander@2193
    36
#include "sp_vm_function.h"
dvander@2193
    37
dvander@2193
    38
class BaseContext;
dvander@2193
    39
dvander@2193
    40
class CContextTrace : public IContextTrace
dvander@2193
    41
{
dvander@2193
    42
public:
dvander@2226
    43
	CContextTrace(BaseRuntime *pRuntime, int err, const char *errstr, cell_t start_rp);
dvander@2193
    44
public:
dvander@2193
    45
	int GetErrorCode();
dvander@2193
    46
	const char *GetErrorString();
dvander@2193
    47
	bool DebugInfoAvailable();
dvander@2193
    48
	const char *GetCustomErrorString();
dvander@2193
    49
	bool GetTraceInfo(CallStackInfo *trace);
dvander@2193
    50
	void ResetTrace();
dvander@2193
    51
	const char *GetLastNative(uint32_t *index);
dvander@2193
    52
private:
dvander@2226
    53
	BaseRuntime *m_pRuntime;
dvander@2226
    54
	sp_context_t *m_ctx;
dvander@2193
    55
	int m_Error;
dvander@2193
    56
	const char *m_pMsg;
dvander@2226
    57
	cell_t m_StartRp;
dvander@2226
    58
	cell_t m_Level;
dvander@2226
    59
	IPluginDebugInfo *m_pDebug;
dvander@2193
    60
};
dvander@2193
    61
dvander@2193
    62
class SourcePawnEngine : public ISourcePawnEngine
dvander@2193
    63
{
dvander@2193
    64
public:
dvander@2193
    65
	SourcePawnEngine();
dvander@2193
    66
	~SourcePawnEngine();
dvander@2193
    67
public: //ISourcePawnEngine
dvander@2193
    68
	sp_plugin_t *LoadFromFilePointer(FILE *fp, int *err);
dvander@2193
    69
	sp_plugin_t *LoadFromMemory(void *base, sp_plugin_t *plugin, int *err);
dvander@2193
    70
	int FreeFromMemory(sp_plugin_t *plugin);
dvander@2193
    71
	void *BaseAlloc(size_t size);
dvander@2193
    72
	void BaseFree(void *memory);
dvander@2193
    73
	void *ExecAlloc(size_t size);
dvander@2193
    74
	void ExecFree(void *address);
dvander@2193
    75
	IDebugListener *SetDebugListener(IDebugListener *pListener);
dvander@2193
    76
	unsigned int GetContextCallCount();
dvander@2193
    77
	unsigned int GetEngineAPIVersion();
dvander@2193
    78
	void *AllocatePageMemory(size_t size);
dvander@2193
    79
	void SetReadWrite(void *ptr);
dvander@2193
    80
	void SetReadExecute(void *ptr);
dvander@2226
    81
	void SetReadWriteExecute(void *ptr);
dvander@2193
    82
	void FreePageMemory(void *ptr);
dvander@2193
    83
	const char *GetErrorString(int err);
dvander@2226
    84
	void ReportError(BaseRuntime *runtime, int err, const char *errstr, cell_t rp_start);
dvander@2193
    85
public: //Plugin function stuff
dvander@2193
    86
	CFunction *GetFunctionFromPool(funcid_t f, IPluginContext  *plugin);
dvander@2193
    87
	void ReleaseFunctionToPool(CFunction *func);
dvander@2226
    88
	IDebugListener *GetDebugHook();
dvander@2193
    89
private:
dvander@2193
    90
	IDebugListener *m_pDebugHook;
dvander@2193
    91
};
dvander@2193
    92
dvander@2193
    93
extern SourcePawnEngine g_engine1;
dvander@2193
    94
dvander@2193
    95
#endif //_INCLUDE_SOURCEPAWN_VM_ENGINE_H_