Remove amx.c from pawndisasm's sources
We don't need the whole AMX in order to compile pawndisasm, only a handful of alignment functions (amx_AlignXXX) that are used in amxdbg.c. Just copy those functions to amxdbg. As a bonus, we don't have to fix compile warnings in amx.c now. (maybe somebody will fix them some day in a distant future...)
This commit is contained in:
parent
11199da210
commit
8fe5558d7e
@ -30,6 +30,123 @@
|
|||||||
#include "amx.h"
|
#include "amx.h"
|
||||||
#include "amxdbg.h"
|
#include "amxdbg.h"
|
||||||
|
|
||||||
|
#if PAWN_CELL_SIZE==16
|
||||||
|
#define dbg_AlignCell(v) dbg_Align16(v)
|
||||||
|
#elif PAWN_CELL_SIZE==32
|
||||||
|
#define dbg_AlignCell(v) dbg_Align32(v)
|
||||||
|
#elif PAWN_CELL_SIZE==64 && (defined _I64_MAX || defined HAVE_I64)
|
||||||
|
#define dbg_AlignCell(v) dbg_Align64(v)
|
||||||
|
#else
|
||||||
|
#error Unsupported cell size
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined NDEBUG
|
||||||
|
static int check_endian(void)
|
||||||
|
{
|
||||||
|
uint16_t val=0x00ff;
|
||||||
|
unsigned char *ptr=(unsigned char *)&val;
|
||||||
|
/* "ptr" points to the starting address of "val". If that address
|
||||||
|
* holds the byte "0xff", the computer stored the low byte of "val"
|
||||||
|
* at the lower address, and so the memory lay out is Little Endian.
|
||||||
|
*/
|
||||||
|
assert(*ptr==0xff || *ptr==0x00);
|
||||||
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
|
return *ptr==0x00; /* return "true" if big endian */
|
||||||
|
#else
|
||||||
|
return *ptr==0xff; /* return "true" if little endian */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BYTE_ORDER==BIG_ENDIAN || PAWN_CELL_SIZE==16
|
||||||
|
static void swap16(uint16_t *v)
|
||||||
|
{
|
||||||
|
unsigned char *s = (unsigned char *)v;
|
||||||
|
unsigned char t;
|
||||||
|
|
||||||
|
assert(sizeof(*v)==2);
|
||||||
|
/* swap two bytes */
|
||||||
|
t=s[0];
|
||||||
|
s[0]=s[1];
|
||||||
|
s[1]=t;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BYTE_ORDER==BIG_ENDIAN || PAWN_CELL_SIZE==32
|
||||||
|
static void swap32(uint32_t *v)
|
||||||
|
{
|
||||||
|
unsigned char *s = (unsigned char *)v;
|
||||||
|
unsigned char t;
|
||||||
|
|
||||||
|
assert_static(sizeof(*v)==4);
|
||||||
|
/* swap outer two bytes */
|
||||||
|
t=s[0];
|
||||||
|
s[0]=s[3];
|
||||||
|
s[3]=t;
|
||||||
|
/* swap inner two bytes */
|
||||||
|
t=s[1];
|
||||||
|
s[1]=s[2];
|
||||||
|
s[2]=t;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (BYTE_ORDER==BIG_ENDIAN || PAWN_CELL_SIZE==64) && (defined _I64_MAX || defined HAVE_I64)
|
||||||
|
static void swap64(uint64_t *v)
|
||||||
|
{
|
||||||
|
unsigned char *s = (unsigned char *)v;
|
||||||
|
unsigned char t;
|
||||||
|
|
||||||
|
assert(sizeof(*v)==8);
|
||||||
|
|
||||||
|
t=s[0];
|
||||||
|
s[0]=s[7];
|
||||||
|
s[7]=t;
|
||||||
|
|
||||||
|
t=s[1];
|
||||||
|
s[1]=s[6];
|
||||||
|
s[6]=t;
|
||||||
|
|
||||||
|
t=s[2];
|
||||||
|
s[2]=s[5];
|
||||||
|
s[5]=t;
|
||||||
|
|
||||||
|
t=s[3];
|
||||||
|
s[3]=s[4];
|
||||||
|
s[4]=t;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint16_t * AMXAPI dbg_Align16(uint16_t *v)
|
||||||
|
{
|
||||||
|
assert_static(sizeof(*v)==2);
|
||||||
|
assert(check_endian());
|
||||||
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
|
swap16(v);
|
||||||
|
#endif
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t * AMXAPI dbg_Align32(uint32_t *v)
|
||||||
|
{
|
||||||
|
assert_static(sizeof(*v)==4);
|
||||||
|
assert(check_endian());
|
||||||
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
|
swap32(v);
|
||||||
|
#endif
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined _I64_MAX || defined HAVE_I64
|
||||||
|
uint64_t * AMXAPI dbg_Align64(uint64_t *v)
|
||||||
|
{
|
||||||
|
assert(sizeof(*v)==8);
|
||||||
|
assert(check_endian());
|
||||||
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
|
swap64(v);
|
||||||
|
#endif
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
#endif /* _I64_MAX || HAVE_I64 */
|
||||||
|
|
||||||
int AMXAPI dbg_FreeInfo(AMX_DBG *amxdbg)
|
int AMXAPI dbg_FreeInfo(AMX_DBG *amxdbg)
|
||||||
{
|
{
|
||||||
@ -68,9 +185,9 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp)
|
|||||||
if (fread(&amxhdr, sizeof amxhdr, 1, fp) == 0)
|
if (fread(&amxhdr, sizeof amxhdr, 1, fp) == 0)
|
||||||
return AMX_ERR_FORMAT;
|
return AMX_ERR_FORMAT;
|
||||||
#if BYTE_ORDER==BIG_ENDIAN
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
amx_Align32((uint32_t*)&amxhdr.size);
|
dbg_Align32((uint32_t*)&amxhdr.size);
|
||||||
amx_Align16(&amxhdr.magic);
|
dbg_Align16(&amxhdr.magic);
|
||||||
amx_Align16(&dbghdr.flags);
|
dbg_Align16(&dbghdr.flags);
|
||||||
#endif
|
#endif
|
||||||
if (amxhdr.magic != AMX_MAGIC)
|
if (amxhdr.magic != AMX_MAGIC)
|
||||||
return AMX_ERR_FORMAT;
|
return AMX_ERR_FORMAT;
|
||||||
@ -83,15 +200,15 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp)
|
|||||||
return AMX_ERR_FORMAT;
|
return AMX_ERR_FORMAT;
|
||||||
|
|
||||||
#if BYTE_ORDER==BIG_ENDIAN
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
amx_Align32((uint32_t*)&dbghdr.size);
|
dbg_Align32((uint32_t*)&dbghdr.size);
|
||||||
amx_Align16(&dbghdr.magic);
|
dbg_Align16(&dbghdr.magic);
|
||||||
amx_Align16(&dbghdr.flags);
|
dbg_Align16(&dbghdr.flags);
|
||||||
amx_Align16(&dbghdr.files);
|
dbg_Align16(&dbghdr.files);
|
||||||
amx_Align16(&dbghdr.lines);
|
dbg_Align16(&dbghdr.lines);
|
||||||
amx_Align16(&dbghdr.symbols);
|
dbg_Align16(&dbghdr.symbols);
|
||||||
amx_Align16(&dbghdr.tags);
|
dbg_Align16(&dbghdr.tags);
|
||||||
amx_Align16(&dbghdr.automatons);
|
dbg_Align16(&dbghdr.automatons);
|
||||||
amx_Align16(&dbghdr.states);
|
dbg_Align16(&dbghdr.states);
|
||||||
#endif
|
#endif
|
||||||
if (dbghdr.magic != AMX_DBG_MAGIC)
|
if (dbghdr.magic != AMX_DBG_MAGIC)
|
||||||
return AMX_ERR_FORMAT;
|
return AMX_ERR_FORMAT;
|
||||||
@ -136,7 +253,7 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp)
|
|||||||
assert(amxdbg->filetbl != NULL);
|
assert(amxdbg->filetbl != NULL);
|
||||||
amxdbg->filetbl[index] = (AMX_DBG_FILE *)ptr;
|
amxdbg->filetbl[index] = (AMX_DBG_FILE *)ptr;
|
||||||
#if BYTE_ORDER==BIG_ENDIAN
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
amx_AlignCell(&amxdbg->filetbl[index]->address);
|
dbg_AlignCell(&amxdbg->filetbl[index]->address);
|
||||||
#endif
|
#endif
|
||||||
for (ptr = ptr + sizeof(AMX_DBG_FILE); *ptr != '\0'; ptr++)
|
for (ptr = ptr + sizeof(AMX_DBG_FILE); *ptr != '\0'; ptr++)
|
||||||
/* nothing */;
|
/* nothing */;
|
||||||
@ -147,8 +264,8 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp)
|
|||||||
amxdbg->linetbl = (AMX_DBG_LINE*)ptr;
|
amxdbg->linetbl = (AMX_DBG_LINE*)ptr;
|
||||||
#if BYTE_ORDER==BIG_ENDIAN
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
for (index = 0; index < dbghdr.lines; index++) {
|
for (index = 0; index < dbghdr.lines; index++) {
|
||||||
amx_AlignCell(&amxdbg->linetbl[index].address);
|
dbg_AlignCell(&amxdbg->linetbl[index].address);
|
||||||
amx_Align32((uint32_t*)&amxdbg->linetbl[index].line);
|
dbg_Align32((uint32_t*)&amxdbg->linetbl[index].line);
|
||||||
} /* for */
|
} /* for */
|
||||||
#endif
|
#endif
|
||||||
ptr += (uint16_t)dbghdr.lines * sizeof(AMX_DBG_LINE);
|
ptr += (uint16_t)dbghdr.lines * sizeof(AMX_DBG_LINE);
|
||||||
@ -158,8 +275,8 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp)
|
|||||||
&& (cell)line->address > (cell)(line - 1)->address) {
|
&& (cell)line->address > (cell)(line - 1)->address) {
|
||||||
#if BYTE_ORDER==BIG_ENDIAN
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
for (index = 0; index <= (uint32_t)(1u << 16) - 1; index++) {
|
for (index = 0; index <= (uint32_t)(1u << 16) - 1; index++) {
|
||||||
amx_AlignCell(&linetbl[index].address);
|
dbg_AlignCell(&linetbl[index].address);
|
||||||
amx_Align32((uint32_t*)&linetbl[index].line);
|
dbg_Align32((uint32_t*)&linetbl[index].line);
|
||||||
line++;
|
line++;
|
||||||
} /* for */
|
} /* for */
|
||||||
#endif
|
#endif
|
||||||
@ -171,19 +288,19 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp)
|
|||||||
assert(amxdbg->symboltbl != NULL);
|
assert(amxdbg->symboltbl != NULL);
|
||||||
amxdbg->symboltbl[index] = (AMX_DBG_SYMBOL *)ptr;
|
amxdbg->symboltbl[index] = (AMX_DBG_SYMBOL *)ptr;
|
||||||
#if BYTE_ORDER==BIG_ENDIAN
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
amx_AlignCell(&amxdbg->symboltbl[index]->address);
|
dbg_AlignCell(&amxdbg->symboltbl[index]->address);
|
||||||
amx_Align16((uint16_t*)&amxdbg->symboltbl[index]->tag);
|
dbg_Align16((uint16_t*)&amxdbg->symboltbl[index]->tag);
|
||||||
amx_AlignCell(&amxdbg->symboltbl[index]->codestart);
|
dbg_AlignCell(&amxdbg->symboltbl[index]->codestart);
|
||||||
amx_AlignCell(&amxdbg->symboltbl[index]->codeend);
|
dbg_AlignCell(&amxdbg->symboltbl[index]->codeend);
|
||||||
amx_Align16((uint16_t*)&amxdbg->symboltbl[index]->dim);
|
dbg_Align16((uint16_t*)&amxdbg->symboltbl[index]->dim);
|
||||||
#endif
|
#endif
|
||||||
for (ptr = ptr + sizeof(AMX_DBG_SYMBOL); *ptr != '\0'; ptr++)
|
for (ptr = ptr + sizeof(AMX_DBG_SYMBOL); *ptr != '\0'; ptr++)
|
||||||
/* nothing */;
|
/* nothing */;
|
||||||
ptr++; /* skip '\0' too */
|
ptr++; /* skip '\0' too */
|
||||||
for (dim = 0; dim < amxdbg->symboltbl[index]->dim; dim++) {
|
for (dim = 0; dim < amxdbg->symboltbl[index]->dim; dim++) {
|
||||||
symdim = (AMX_DBG_SYMDIM *)ptr;
|
symdim = (AMX_DBG_SYMDIM *)ptr;
|
||||||
amx_Align16((uint16_t*)&symdim->tag);
|
dbg_Align16((uint16_t*)&symdim->tag);
|
||||||
amx_AlignCell(&symdim->size);
|
dbg_AlignCell(&symdim->size);
|
||||||
ptr += sizeof(AMX_DBG_SYMDIM);
|
ptr += sizeof(AMX_DBG_SYMDIM);
|
||||||
} /* for */
|
} /* for */
|
||||||
} /* for */
|
} /* for */
|
||||||
@ -193,7 +310,7 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp)
|
|||||||
assert(amxdbg->tagtbl != NULL);
|
assert(amxdbg->tagtbl != NULL);
|
||||||
amxdbg->tagtbl[index] = (AMX_DBG_TAG *)ptr;
|
amxdbg->tagtbl[index] = (AMX_DBG_TAG *)ptr;
|
||||||
#if BYTE_ORDER==BIG_ENDIAN
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
amx_Align16(&amxdbg->tagtbl[index]->tag);
|
dbg_Align16(&amxdbg->tagtbl[index]->tag);
|
||||||
#endif
|
#endif
|
||||||
for (ptr = ptr + sizeof(AMX_DBG_TAG) - 1; *ptr != '\0'; ptr++)
|
for (ptr = ptr + sizeof(AMX_DBG_TAG) - 1; *ptr != '\0'; ptr++)
|
||||||
/* nothing */;
|
/* nothing */;
|
||||||
@ -205,8 +322,8 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp)
|
|||||||
assert(amxdbg->automatontbl != NULL);
|
assert(amxdbg->automatontbl != NULL);
|
||||||
amxdbg->automatontbl[index] = (AMX_DBG_MACHINE *)ptr;
|
amxdbg->automatontbl[index] = (AMX_DBG_MACHINE *)ptr;
|
||||||
#if BYTE_ORDER==BIG_ENDIAN
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
amx_Align16(&amxdbg->automatontbl[index]->automaton);
|
dbg_Align16(&amxdbg->automatontbl[index]->automaton);
|
||||||
amx_AlignCell(&amxdbg->automatontbl[index]->address);
|
dbg_AlignCell(&amxdbg->automatontbl[index]->address);
|
||||||
#endif
|
#endif
|
||||||
for (ptr = ptr + sizeof(AMX_DBG_MACHINE) - 1; *ptr != '\0'; ptr++)
|
for (ptr = ptr + sizeof(AMX_DBG_MACHINE) - 1; *ptr != '\0'; ptr++)
|
||||||
/* nothing */;
|
/* nothing */;
|
||||||
@ -218,8 +335,8 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp)
|
|||||||
assert(amxdbg->statetbl != NULL);
|
assert(amxdbg->statetbl != NULL);
|
||||||
amxdbg->statetbl[index] = (AMX_DBG_STATE *)ptr;
|
amxdbg->statetbl[index] = (AMX_DBG_STATE *)ptr;
|
||||||
#if BYTE_ORDER==BIG_ENDIAN
|
#if BYTE_ORDER==BIG_ENDIAN
|
||||||
amx_Align16(&amxdbg->statetbl[index]->state);
|
dbg_Align16(&amxdbg->statetbl[index]->state);
|
||||||
amx_Align16(&amxdbg->automatontbl[index]->automaton);
|
dbg_Align16(&amxdbg->automatontbl[index]->automaton);
|
||||||
#endif
|
#endif
|
||||||
for (ptr = ptr + sizeof(AMX_DBG_STATE) - 1; *ptr != '\0'; ptr++)
|
for (ptr = ptr + sizeof(AMX_DBG_STATE) - 1; *ptr != '\0'; ptr++)
|
||||||
/* nothing */;
|
/* nothing */;
|
||||||
|
@ -135,7 +135,6 @@ target_link_libraries(pawncc pawnc)
|
|||||||
set(PAWNDISASM_SRCS
|
set(PAWNDISASM_SRCS
|
||||||
pawndisasm.c
|
pawndisasm.c
|
||||||
../amx/amxdbg.c
|
../amx/amxdbg.c
|
||||||
../amx/amx.c
|
|
||||||
)
|
)
|
||||||
add_executable(pawndisasm ${PAWNDISASM_SRCS})
|
add_executable(pawndisasm ${PAWNDISASM_SRCS})
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user