Userdata typo
FROM int TO uintptr_t in pointer casts Added finish state and renamed LMP_CONT to LMP_EXEC Fixed cast warning when printing size_tmaster
parent
b0e6a0af7a
commit
22a001fb5e
7
lmp.c
7
lmp.c
|
@ -13,6 +13,7 @@
|
||||||
#include <lua.h>
|
#include <lua.h>
|
||||||
#include <lauxlib.h>
|
#include <lauxlib.h>
|
||||||
#include <lualib.h>
|
#include <lualib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "lmp.h"
|
#include "lmp.h"
|
||||||
#include "vmemory.h"
|
#include "vmemory.h"
|
||||||
|
@ -88,8 +89,8 @@ static void *lmp_malloc(size_t nsize, size_t luatype) {
|
||||||
st_insertblock(new);
|
st_insertblock(new);
|
||||||
|
|
||||||
updatecounters(LMP_MALLOC, nsize, luatype);
|
updatecounters(LMP_MALLOC, nsize, luatype);
|
||||||
if ((int) ptr > Maddress) /* save max address to calc mem needed */
|
if ((uintptr_t) ptr > Maddress) /* save max address to calc mem needed */
|
||||||
Maddress = (int) ptr;
|
Maddress = (uintptr_t) ptr;
|
||||||
|
|
||||||
if (usegraphics) /* if graphics enabled call function to handle */
|
if (usegraphics) /* if graphics enabled call function to handle */
|
||||||
vm_newmemop(LMP_VM_MALLOC, ptr, luatype, nsize);
|
vm_newmemop(LMP_VM_MALLOC, ptr, luatype, nsize);
|
||||||
|
@ -217,7 +218,7 @@ printf("Number of Mallocs=%ld\tTotal Malloc Size=%ld\n", nallocs, alloc_size);
|
||||||
printf("Number of Reallocs=%ld\tTotal Realloc Size=%ld\n", nreallocs, realloc_size);
|
printf("Number of Reallocs=%ld\tTotal Realloc Size=%ld\n", nreallocs, realloc_size);
|
||||||
printf("Number of Frees=%ld\tTotal Free Size=%ld\n", nfrees, free_size);
|
printf("Number of Frees=%ld\tTotal Free Size=%ld\n", nfrees, free_size);
|
||||||
printf("\nNumber of Allocs of Each Type:\n");
|
printf("\nNumber of Allocs of Each Type:\n");
|
||||||
printf(" String=%d | Function=%d | Usedata=%d | Thread=%d | Table=%d | Other=%d\n", ac_string, ac_function, ac_userdata, ac_thread, ac_table, ac_other);
|
printf(" String=%d | Function=%d | Userdata=%d | Thread=%d | Table=%d | Other=%d\n", ac_string, ac_function, ac_userdata, ac_thread, ac_table, ac_other);
|
||||||
printf("\nMaximum Memory Used=%ld bytes\n", maxmemoryuse);
|
printf("\nMaximum Memory Used=%ld bytes\n", maxmemoryuse);
|
||||||
|
|
||||||
if (!usegraphics && nallocs > 0) {
|
if (!usegraphics && nallocs > 0) {
|
||||||
|
|
|
@ -10,16 +10,16 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
#include "lmp_struct.h"
|
#include "lmp_struct.h"
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
|
|
||||||
|
|
||||||
#define HASH_SIZE 23 /* empiric hash size - need more tests to confirm */
|
#define HASH_SIZE 23 /* empiric hash size - need more tests to confirm */
|
||||||
|
|
||||||
|
|
||||||
/* simple hash function */
|
/* simple hash function */
|
||||||
static int hashfunc(void *ptr) {
|
static int hashfunc(void *ptr) {
|
||||||
return ((unsigned int) ptr) % HASH_SIZE;
|
return ((uintptr_t) ptr) % HASH_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <lua.h>
|
#include <lua.h>
|
||||||
#include <lauxlib.h>
|
#include <lauxlib.h>
|
||||||
#include <lualib.h>
|
#include <lualib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "lmp.h"
|
#include "lmp.h"
|
||||||
|
|
||||||
|
@ -108,7 +109,7 @@ static int luamemprofiler_start(lua_State *L) {
|
||||||
lua_setallocf(L, lmp_alloc, ud);
|
lua_setallocf(L, lmp_alloc, ud);
|
||||||
|
|
||||||
/* L is in most cases the lowest address of the heap (easiest to access) */
|
/* L is in most cases the lowest address of the heap (easiest to access) */
|
||||||
lmp_start((int) L, memused, usegraphics);
|
lmp_start((uintptr_t) L, memused, usegraphics);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
29
vmemory.c
29
vmemory.c
|
@ -15,6 +15,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <lualib.h>
|
#include <lualib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
#include "graphic.h"
|
#include "graphic.h"
|
||||||
|
@ -28,7 +29,8 @@
|
||||||
|
|
||||||
/* screen state */
|
/* screen state */
|
||||||
#define LMP_PAUSE 0
|
#define LMP_PAUSE 0
|
||||||
#define LMP_CONT 1
|
#define LMP_EXEC 1
|
||||||
|
#define LMP_FINISH -1
|
||||||
#define LMP_ZOOM_OUT 0
|
#define LMP_ZOOM_OUT 0
|
||||||
#define LMP_ZOOM_IN 1
|
#define LMP_ZOOM_IN 1
|
||||||
|
|
||||||
|
@ -83,8 +85,8 @@ static LMP_Menuitem mi_other;
|
||||||
|
|
||||||
/* STATIC GLOBAL VARIABLES */
|
/* STATIC GLOBAL VARIABLES */
|
||||||
static Screen *screen;
|
static Screen *screen;
|
||||||
static int laddress; /* first address of the program */
|
static uintptr_t laddress; /* first address of the program */
|
||||||
static int baseaddr; /* base address of the memory box */
|
static uintptr_t baseaddr; /* base address of the memory box */
|
||||||
static int state = LMP_PAUSE; /* luamemprofiler state (paused or executing) */
|
static int state = LMP_PAUSE; /* luamemprofiler state (paused or executing) */
|
||||||
static int zoom = LMP_ZOOM_OUT; /* zoom state (in or out) */
|
static int zoom = LMP_ZOOM_OUT; /* zoom state (in or out) */
|
||||||
|
|
||||||
|
@ -136,8 +138,9 @@ void vm_start(int lowestaddress, float memused) {
|
||||||
|
|
||||||
void vm_stop() {
|
void vm_stop() {
|
||||||
char dummy;
|
char dummy;
|
||||||
state = 0;
|
state = LMP_FINISH;
|
||||||
drawreport("Execution finished. The report is in the Terminal.", LMP_FLINE);
|
drawreport("Execution finished. The report is in the Terminal.", LMP_FLINE);
|
||||||
|
drawstates();
|
||||||
printf("Press Enter To Finish!");
|
printf("Press Enter To Finish!");
|
||||||
scanf("%c", &dummy);
|
scanf("%c", &dummy);
|
||||||
|
|
||||||
|
@ -168,7 +171,7 @@ void vm_newmemop(int memop, void *ptr, size_t luatype, size_t size) {
|
||||||
|
|
||||||
/* uses baseaddress to calculate the memory box position of a block */
|
/* uses baseaddress to calculate the memory box position of a block */
|
||||||
static void calcmemdata(void *ptr, size_t size, int *reladdr, size_t *relsize) {
|
static void calcmemdata(void *ptr, size_t size, int *reladdr, size_t *relsize) {
|
||||||
*reladdr = ((int) ptr - baseaddr) / BYTES_PER_PIXEL;
|
*reladdr = ((uintptr_t) ptr - baseaddr) / BYTES_PER_PIXEL;
|
||||||
*relsize = (size / BYTES_PER_PIXEL);
|
*relsize = (size / BYTES_PER_PIXEL);
|
||||||
if (*relsize == 0) {
|
if (*relsize == 0) {
|
||||||
*relsize = 1;
|
*relsize = 1;
|
||||||
|
@ -319,7 +322,7 @@ static void zoomin(int x, int y) {
|
||||||
BLOCK_HEIGHT = BLOCK_HEIGHT * 2; /* height 2x bigger */
|
BLOCK_HEIGHT = BLOCK_HEIGHT * 2; /* height 2x bigger */
|
||||||
for(block = lmp_all; block != NULL; block = st_getnextall(block)) {
|
for(block = lmp_all; block != NULL; block = st_getnextall(block)) {
|
||||||
/* calculates new block values in memry box (relative address and size) */
|
/* calculates new block values in memry box (relative address and size) */
|
||||||
p = ((int) block->ptr - baseaddr) / BYTES_PER_PIXEL;
|
p = ((uintptr_t) block->ptr - baseaddr) / BYTES_PER_PIXEL;
|
||||||
mb_size = (block->size / BYTES_PER_PIXEL);
|
mb_size = (block->size / BYTES_PER_PIXEL);
|
||||||
if (mb_size == 0) {
|
if (mb_size == 0) {
|
||||||
mb_size = 1;
|
mb_size = 1;
|
||||||
|
@ -349,7 +352,7 @@ static void checkevent() {
|
||||||
int eventtype;
|
int eventtype;
|
||||||
LMP_Event event;
|
LMP_Event event;
|
||||||
|
|
||||||
if (state == LMP_CONT) { /* normal execution - only accepts pause command */
|
if (state == LMP_EXEC) { /* normal execution - only accepts pause command */
|
||||||
eventtype = gr_getevent(screen, &event); /* gets an event if exists */
|
eventtype = gr_getevent(screen, &event); /* gets an event if exists */
|
||||||
if (eventtype == LMP_EVENT_KEY && event.kevent.key == ' ') { /* pause */
|
if (eventtype == LMP_EVENT_KEY && event.kevent.key == ' ') { /* pause */
|
||||||
state = LMP_PAUSE;
|
state = LMP_PAUSE;
|
||||||
|
@ -360,7 +363,7 @@ static void checkevent() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (state == LMP_PAUSE) { /* execution is paused */
|
while (state != LMP_EXEC) { /* execution is paused or finished */
|
||||||
lmp_Block* (*fnextblock) (lmp_Block*) = st_getnexttype;
|
lmp_Block* (*fnextblock) (lmp_Block*) = st_getnexttype;
|
||||||
lmp_Block *block = NULL;
|
lmp_Block *block = NULL;
|
||||||
|
|
||||||
|
@ -368,7 +371,7 @@ static void checkevent() {
|
||||||
if (eventtype == LMP_EVENT_KEY) {
|
if (eventtype == LMP_EVENT_KEY) {
|
||||||
switch (event.kevent.key) {
|
switch (event.kevent.key) {
|
||||||
case ' ': /* space key - continue - resumes normal execution */
|
case ' ': /* space key - continue - resumes normal execution */
|
||||||
state = LMP_CONT;
|
state = LMP_EXEC;
|
||||||
drawstates();
|
drawstates();
|
||||||
drawreport("Press 'space' to Pause execution.", LMP_FLINE);
|
drawreport("Press 'space' to Pause execution.", LMP_FLINE);
|
||||||
return;
|
return;
|
||||||
|
@ -458,8 +461,8 @@ static void writeblockinfo(void *ptr, size_t luatype, size_t size, int alloctype
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(textbuff, "%s | addr = %p | type = %s | size = %dB", atype,
|
sprintf(textbuff, "%s | addr = %p | type = %s | size = %luB", atype,
|
||||||
ptr, ltype, size);
|
ptr, ltype, (unsigned long) size);
|
||||||
drawreport(textbuff, LMP_FLINE);
|
drawreport(textbuff, LMP_FLINE);
|
||||||
drawcallstack(LMP_FLINE + 1);
|
drawcallstack(LMP_FLINE + 1);
|
||||||
}
|
}
|
||||||
|
@ -602,8 +605,10 @@ static void drawstates() {
|
||||||
gr_settextcolor(screen, BLACK);
|
gr_settextcolor(screen, BLACK);
|
||||||
if(state == LMP_PAUSE) {
|
if(state == LMP_PAUSE) {
|
||||||
gr_drawtext(screen, "lmp: PAUSED", x, y);
|
gr_drawtext(screen, "lmp: PAUSED", x, y);
|
||||||
} else if (state == LMP_CONT) {
|
} else if (state == LMP_EXEC) {
|
||||||
gr_drawtext(screen, "lmp: EXECUTING", x, y);
|
gr_drawtext(screen, "lmp: EXECUTING", x, y);
|
||||||
|
} else if (state == LMP_FINISH) {
|
||||||
|
gr_drawtext(screen, "lmp: FINISHED", x, y);
|
||||||
}
|
}
|
||||||
y = y + offset;
|
y = y + offset;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue