diff --git a/source/compiler/CMakeLists.txt b/source/compiler/CMakeLists.txt index c206e6d..6190181 100644 --- a/source/compiler/CMakeLists.txt +++ b/source/compiler/CMakeLists.txt @@ -77,4 +77,5 @@ ADD_EXECUTABLE(pawncc ${PAWNCC_SRCS}) TARGET_LINK_LIBRARIES(pawncc pawnc) # The Pawn disassembler -ADD_EXECUTABLE(pawndisasm pawndisasm.c) +SET(PAWNDISASM_SRCS pawndisasm.c ../amx/amxdbg.c ../amx/amx.c) +ADD_EXECUTABLE(pawndisasm ${PAWNDISASM_SRCS}) diff --git a/source/compiler/pawndisasm.c b/source/compiler/pawndisasm.c index 1280dbc..1c02772 100644 --- a/source/compiler/pawndisasm.c +++ b/source/compiler/pawndisasm.c @@ -25,6 +25,7 @@ #include #include #include "../amx/amx.h" +#include "../amx/amxdbg.h" static FILE *fpamx; static AMX_HEADER amxhdr; @@ -488,6 +489,10 @@ int main(int argc,char *argv[]) int codesize,count; cell *code,*cip; OPCODE_PROC func; + AMX_DBG dbg; + int dbgloaded; + const char *filename; + long line,prevline; if (argc<2 || argc>3) { printf("Usage: pawndisasm [output]\n"); @@ -511,7 +516,11 @@ int main(int argc,char *argv[]) return 1; } /* if */ + /* load debug info */ + dbgloaded=(dbg_LoadInfo(&dbg, fpamx)==AMX_ERR_NONE); + /* load header */ + fseek(fpamx,0,SEEK_SET); fread(&amxhdr,sizeof amxhdr,1,fpamx); if (amxhdr.magic!=AMX_MAGIC) { printf("Not a valid AMX file\n"); @@ -543,7 +552,16 @@ int main(int argc,char *argv[]) /* browse through the code */ cip=code; codesize=amxhdr.dat-amxhdr.cod; + prevline=0; while (((unsigned char*)cip-(unsigned char*)code)