[qfcc] Correct xdef structures and usage in test

Attempting to add ev_ushort caused ptraliasenc to break, but that was
because it was already broken: I had implemented the scan of the xdef
table incorrectly, thus adding only 1 ev type resulted in the walked
pointer being out of phase with its data due to it first passing over
the type encodings (which is why adding long and ulong didn't cause any
obvious trouble).
This commit is contained in:
Bill Currie 2022-01-18 21:42:53 +09:00
parent 5b97aa3897
commit 6df79b2b06
2 changed files with 13 additions and 7 deletions

View file

@ -1210,7 +1210,7 @@ init_types (void)
};
static struct_def_t type_encoding_struct[] = {
{"types", &type_pointer},
{"size", &type_int},
{"size", &type_uint},
{0, 0}
};
static struct_def_t xdef_struct[] = {
@ -1220,7 +1220,7 @@ init_types (void)
};
static struct_def_t xdefs_struct[] = {
{"xdefs", &type_xdef_pointer},
{"num_xdefs", &type_pointer},
{"num_xdefs", &type_uint},
{0, 0}
};
static struct_def_t va_list_struct[] = {

View file

@ -10,16 +10,22 @@ typedef struct xdef_s {
void *ofs; ///< 32-bit version of ddef_t.ofs
} xdef_t;
typedef struct xdefs_s {
xdef_t *xdefs;
unsigned num_xdefs;
} xdefs_t;
void *PR_FindGlobal (string name) = #0;
int
main (void)
{
//FIXME need a simple way to get at a def's meta-data
xdef_t *xdefs = PR_FindGlobal (".xdefs");
while (xdefs.ofs != &int32_ptr) {
xdefs++;
xdefs_t *xdefs = PR_FindGlobal (".xdefs");
xdef_t *xdef = xdefs.xdefs;
while (xdef - xdefs.xdefs < xdefs.num_xdefs && xdef.ofs != &int32_ptr) {
xdef++;
}
printf ("int32_ptr: %s\n", xdefs.type.encoding);
return xdefs.type.encoding != "{>^i}";
printf ("int32_ptr: %s\n", xdef.type.encoding);
return xdef.type.encoding != "{>^i}";
}