made these names a little nicer

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40140
This commit is contained in:
David Anderson 2006-11-04 18:54:03 +00:00
parent 0ece7914b7
commit 8099cb09bd
5 changed files with 26 additions and 135 deletions

View File

@ -218,9 +218,10 @@ typedef struct sp_context_s
uint32_t flags; /* compilation flags */
SPVM_DEBUGBREAK dbreak; /* debug break function */
/* context runtime information */
ucell_t memory; /* total memory size; */
uint8_t *data; /* data chunk */
cell_t heapbase; /* heap base */
uint8_t *memory; /* data chunk */
ucell_t mem_size; /* total memory size; */
cell_t data_size; /* data chunk size, always starts at 0 */
cell_t heap_base; /* where the heap starts */
/* execution specific data */
cell_t hp; /* heap pointer */
cell_t sp; /* stack pointer */

View File

@ -1712,7 +1712,7 @@ cell_t NativeCallback_Debug(sp_context_t *ctx, ucell_t native_idx, cell_t *param
cell_t save_sp = ctx->sp;
cell_t save_hp = ctx->hp;
if (ctx->hp < ctx->heapbase)
if (ctx->hp < ctx->heap_base)
{
ctx->err = SP_ERROR_HEAPMIN;
return 0;
@ -1724,7 +1724,7 @@ cell_t NativeCallback_Debug(sp_context_t *ctx, ucell_t native_idx, cell_t *param
return 0;
}
if ((uint32_t)ctx->sp >= ctx->memory)
if ((uint32_t)ctx->sp >= ctx->mem_size)
{
ctx->err = SP_ERROR_STACKMIN;
return 0;
@ -1936,12 +1936,12 @@ jit_rewind:
ctx->flags = (data->debug ? SPFLAG_PLUGIN_DEBUG : 0);
/* setup memory */
ctx->data = new uint8_t[plugin->memory];
memcpy(ctx->data, plugin->data, plugin->data_size);
ctx->memory = plugin->memory;
ctx->heapbase = plugin->data_size;
ctx->hp = ctx->heapbase;
ctx->sp = ctx->memory - sizeof(cell_t);
ctx->memory = new uint8_t[plugin->memory];
memcpy(ctx->memory, plugin->data, plugin->data_size);
ctx->mem_size = plugin->memory;
ctx->heap_base = plugin->data_size;
ctx->hp = ctx->heap_base;
ctx->sp = ctx->mem_size - sizeof(cell_t);
const char *strbase = plugin->info.stringbase;
uint32_t max, iter;
@ -1960,7 +1960,7 @@ jit_rewind:
/* relocate pubvar info */
if ((max = plugin->info.pubvars_num))
{
uint8_t *dat = ctx->data;
uint8_t *dat = ctx->memory;
ctx->pubvars = new sp_pubvar_t[max];
for (iter=0; iter<max; iter++)
{
@ -2065,7 +2065,7 @@ int JITX86::ContextExecute(sp_context_t *ctx, uint32_t code_idx, cell_t *result)
void JITX86::FreeContext(sp_context_t *ctx)
{
engine->ExecFree(ctx->codebase);
delete [] ctx->data;
delete [] ctx->memory;
delete [] ctx->files;
delete [] ctx->lines;
delete [] ctx->natives;

View File

@ -52,7 +52,7 @@ jitoffs_t Write_Execute_Function(JitWriter *jit)
IA32_Mov_Rm_Reg_Disp8(jit, AMX_REG_INFO, REG_EAX, AMX_INFO_CONTEXT);
IA32_Mov_Reg_Rm_Disp8(jit, REG_ECX, REG_EAX, offsetof(sp_context_t, hp));
IA32_Mov_Rm_Reg_Disp8(jit, AMX_REG_INFO, REG_ECX, AMX_INFO_HEAP);
IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_DAT, REG_EAX, offsetof(sp_context_t, data));
IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_DAT, REG_EAX, offsetof(sp_context_t, memory));
/* Frame setup */
//mov edi, [eax+<offs>] - get stack pointer

View File

@ -113,7 +113,7 @@ int BaseContext::HeapAlloc(unsigned int cells, cell_t *local_addr, cell_t **phys
return SP_ERROR_HEAPLOW;
}
addr = (cell_t *)(ctx->data + ctx->hp);
addr = (cell_t *)(ctx->memory + ctx->hp);
/* store size of allocation in cells */
*addr = (cell_t)cells;
addr++;
@ -138,12 +138,12 @@ int BaseContext::HeapPop(cell_t local_addr)
/* check the bounds of this address */
local_addr -= sizeof(cell_t);
if (local_addr < ctx->heapbase || local_addr >= ctx->sp)
if (local_addr < ctx->heap_base || local_addr >= ctx->sp)
{
return SP_ERROR_INVALID_ADDRESS;
}
addr = (cell_t *)(ctx->data + local_addr);
addr = (cell_t *)(ctx->memory + local_addr);
cellcount = (*addr) * sizeof(cell_t);
/* check if this memory count looks valid */
if (ctx->hp - cellcount - sizeof(cell_t) != local_addr)
@ -159,7 +159,7 @@ int BaseContext::HeapPop(cell_t local_addr)
int BaseContext::HeapRelease(cell_t local_addr)
{
if (local_addr < ctx->heapbase)
if (local_addr < ctx->heap_base)
{
return SP_ERROR_INVALID_ADDRESS;
}
@ -394,14 +394,14 @@ int BaseContext::BindNativeToAny(SPVM_NATIVE_FUNC native)
int BaseContext::LocalToPhysAddr(cell_t local_addr, cell_t **phys_addr)
{
if (((local_addr >= ctx->hp) && (local_addr < ctx->sp)) || (local_addr < 0) || ((ucell_t)local_addr >= ctx->memory))
if (((local_addr >= ctx->hp) && (local_addr < ctx->sp)) || (local_addr < 0) || ((ucell_t)local_addr >= ctx->mem_size))
{
return SP_ERROR_INVALID_ADDRESS;
}
if (phys_addr)
{
*phys_addr = (cell_t *)(ctx->data + local_addr);
*phys_addr = (cell_t *)(ctx->memory + local_addr);
}
return SP_ERROR_NONE;
@ -415,7 +415,7 @@ int BaseContext::PushCell(cell_t value)
}
ctx->sp -= sizeof(cell_t);
*(cell_t *)(ctx->data + ctx->sp) = value;
*(cell_t *)(ctx->memory + ctx->sp) = value;
ctx->pushcount++;
return SP_ERROR_NONE;
@ -470,12 +470,12 @@ int BaseContext::LocalToString(cell_t local_addr, char *buffer, size_t maxlength
int len = 0;
cell_t *src;
if (((local_addr >= ctx->hp) && (local_addr < ctx->sp)) || (local_addr < 0) || ((ucell_t)local_addr >= ctx->memory))
if (((local_addr >= ctx->hp) && (local_addr < ctx->sp)) || (local_addr < 0) || ((ucell_t)local_addr >= ctx->mem_size))
{
return SP_ERROR_INVALID_ADDRESS;
}
src = (cell_t *)(ctx->data + local_addr);
src = (cell_t *)(ctx->memory + local_addr);
while ((*src != '\0') && ((size_t)len < maxlength))
{
buffer[len++] = (char)*src++;
@ -534,13 +534,13 @@ int BaseContext::StringToLocal(cell_t local_addr, size_t chars, const char *sour
cell_t *dest;
int i, len;
if (((local_addr >= ctx->hp) && (local_addr < ctx->sp)) || (local_addr < 0) || ((ucell_t)local_addr >= ctx->memory))
if (((local_addr >= ctx->hp) && (local_addr < ctx->sp)) || (local_addr < 0) || ((ucell_t)local_addr >= ctx->mem_size))
{
return SP_ERROR_INVALID_ADDRESS;
}
len = strlen(source);
dest = (cell_t *)(ctx->data + local_addr);
dest = (cell_t *)(ctx->memory + local_addr);
if ((size_t)len >= chars)
{

View File

@ -1,110 +0,0 @@
#include <stdio.h>
#include <sp_vm_api.h>
#include <sp_vm_context.h>
#include "sp_vm_engine.h"
#include "sp_vm_basecontext.h"
#define WINDOWS_LEAN_AND_MEAN
#include <windows.h>
using namespace SourcePawn;
typedef void (*GIVEENGINE)(ISourcePawnEngine *);
typedef IVirtualMachine *(*GETEXPORT)(unsigned int);
cell_t TestNative(sp_context_t *ctx, cell_t *params)
{
IPluginContext *pl = ctx->context;
cell_t *phys;
int err;
printf("params[0] = %d\n", params[0]);
printf("params[1] = %d\n", params[1]);
if ((err=pl->LocalToPhysAddr(params[2], &phys)) != SP_ERROR_NONE)
{
ctx->err = err;
return 0;
}
printf("params[2] %c%c%c%c%c\n", phys[0], phys[1], phys[2], phys[3], phys[4]);
if ((err=pl->LocalToPhysAddr(params[3], &phys)) != SP_ERROR_NONE)
{
ctx->err = err;
return 0;
}
printf("params[3] = %d\n", *phys);
*phys = 95;
return 5;
}
int main()
{
SourcePawnEngine engine;
IVirtualMachine *vm;
ICompilation *co;
sp_plugin_t *plugin = NULL;
sp_context_t *ctx = NULL;
cell_t result;
int err;
/* Note: for now this is hardcoded for testing purposes!
* The ..\ should be one above msvc8.
*/
FILE *fp = fopen("..\\test.smx", "rb");
if (!fp)
{
return 0;
}
plugin = engine.LoadFromFilePointer(fp, &err);
if (err != SP_ERROR_NONE)
{
printf("Error loading: %d", err);
return 0;
}
HMODULE dll = LoadLibrary("..\\jit\\x86\\msvc8\\Debug\\jit-x86.dll");
if (dll == NULL)
{
printf("Error loading DLL: %d\n", GetLastError());
return 0;
}
GIVEENGINE give_eng = (GIVEENGINE)GetProcAddress(dll, "GiveEnginePointer");
if (!give_eng)
{
printf("Error getting \"GiveEnginePointer!\"!\n");
return 0;
}
give_eng(&engine);
GETEXPORT getex = (GETEXPORT)GetProcAddress(dll, "GetExport");
if ((vm=getex(0)) == NULL)
{
printf("GetExport() returned no VM!\n");
return 0;
}
co = vm->StartCompilation(plugin);
if ((ctx = vm->CompileToContext(co, &err)) == NULL)
{
printf("CompileToContext() failed: %d", err);
return 0;
}
IPluginContext *base = engine.CreateBaseContext(ctx);
sp_nativeinfo_t mynative;
mynative.name = "gaben";
mynative.func = TestNative;
if ((err=base->BindNative(&mynative, SP_NATIVE_OKAY)) != SP_ERROR_NONE)
{
printf("BindNative() failed: %d", err);
return 0;
}
base->PushCell(1);
base->PushCell(4);
err = base->Execute(0, &result);
printf("Result: %d Error: %d\n", result, err);
engine.FreeBaseContext(base);
fclose(fp);
FreeLibrary(dll);
}