mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-18 09:51:40 +00:00
convert the debug info, too. seems to work
This commit is contained in:
parent
a2e8080a03
commit
f87a5d14e2
1 changed files with 86 additions and 65 deletions
|
@ -92,6 +92,7 @@ static progs_t pr;
|
||||||
static void *membase;
|
static void *membase;
|
||||||
static int memsize = 1024*1024;
|
static int memsize = 1024*1024;
|
||||||
|
|
||||||
|
static pr_debug_header_t debug;
|
||||||
static qfo_t *qfo;
|
static qfo_t *qfo;
|
||||||
static dprograms_t progs;
|
static dprograms_t progs;
|
||||||
|
|
||||||
|
@ -197,10 +198,69 @@ init_qf (void)
|
||||||
Hash_SetHashCompare (func_tab, func_hash, func_compare);
|
Hash_SetHashCompare (func_tab, func_hash, func_compare);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static etype_t
|
||||||
|
get_auxtype (const char *type)
|
||||||
|
{
|
||||||
|
if (type[0] != 'F') {
|
||||||
|
return ev_void;
|
||||||
|
} else {
|
||||||
|
switch (type[1]) {
|
||||||
|
default:
|
||||||
|
case 'v':
|
||||||
|
return ev_void;
|
||||||
|
case '*':
|
||||||
|
return ev_string;
|
||||||
|
case 'f':
|
||||||
|
return ev_float;
|
||||||
|
case 'V':
|
||||||
|
return ev_vector;
|
||||||
|
case 'E':
|
||||||
|
return ev_entity;
|
||||||
|
case 'F':
|
||||||
|
return ev_field;
|
||||||
|
case '(':
|
||||||
|
return ev_func;
|
||||||
|
case ':':
|
||||||
|
return ev_sel;
|
||||||
|
case '@': // id
|
||||||
|
case '#': // class
|
||||||
|
case '^':
|
||||||
|
return ev_pointer;
|
||||||
|
case 'Q':
|
||||||
|
return ev_quaternion;
|
||||||
|
case 'i':
|
||||||
|
return ev_integer;
|
||||||
|
case 'I':
|
||||||
|
return ev_uinteger;
|
||||||
|
case 's':
|
||||||
|
return ev_short;
|
||||||
|
case '{':
|
||||||
|
return ev_struct;
|
||||||
|
case '[':
|
||||||
|
return ev_array;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
convert_def (const qfo_def_t *def, ddef_t *ddef)
|
||||||
|
{
|
||||||
|
ddef->type = def->basic_type;
|
||||||
|
ddef->ofs = def->ofs;
|
||||||
|
ddef->s_name = def->name;
|
||||||
|
if (!(def->flags & QFOD_NOSAVE)
|
||||||
|
&& !(def->flags & QFOD_CONSTANT)
|
||||||
|
&& (def->flags & QFOD_GLOBAL)
|
||||||
|
&& def->basic_type != ev_func
|
||||||
|
&& def->basic_type != ev_field)
|
||||||
|
ddef->type |= DEF_SAVEGLOBAL;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
convert_qfo (void)
|
convert_qfo (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i, j;
|
||||||
|
ddef_t *ld;
|
||||||
|
|
||||||
pr.progs = &progs;
|
pr.progs = &progs;
|
||||||
progs.version = PROG_VERSION;
|
progs.version = PROG_VERSION;
|
||||||
|
@ -220,6 +280,7 @@ convert_qfo (void)
|
||||||
progs.entityfields = 0;
|
progs.entityfields = 0;
|
||||||
pr.pr_globaldefs = calloc (qfo->num_defs, sizeof (ddef_t));
|
pr.pr_globaldefs = calloc (qfo->num_defs, sizeof (ddef_t));
|
||||||
pr.pr_fielddefs = calloc (qfo->num_defs, sizeof (ddef_t));
|
pr.pr_fielddefs = calloc (qfo->num_defs, sizeof (ddef_t));
|
||||||
|
ld = pr.local_defs = calloc (qfo->num_defs, sizeof (ddef_t));
|
||||||
for (i = 0; i < qfo->num_defs; i++) {
|
for (i = 0; i < qfo->num_defs; i++) {
|
||||||
qfo_def_t *def = qfo->defs + i;
|
qfo_def_t *def = qfo->defs + i;
|
||||||
ddef_t ddef;
|
ddef_t ddef;
|
||||||
|
@ -227,72 +288,10 @@ convert_qfo (void)
|
||||||
if ((def->flags & QFOD_LOCAL) || !def->name)
|
if ((def->flags & QFOD_LOCAL) || !def->name)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ddef.type = def->basic_type;
|
convert_def (def, &ddef);
|
||||||
ddef.ofs = def->ofs;
|
|
||||||
ddef.s_name = def->name;
|
|
||||||
if (!(def->flags & QFOD_NOSAVE)
|
|
||||||
&& !(def->flags & QFOD_CONSTANT)
|
|
||||||
&& (def->flags & QFOD_GLOBAL)
|
|
||||||
&& def->basic_type != ev_func
|
|
||||||
&& def->basic_type != ev_field)
|
|
||||||
ddef.type |= DEF_SAVEGLOBAL;
|
|
||||||
pr.pr_globaldefs[progs.numglobaldefs++] = ddef;
|
pr.pr_globaldefs[progs.numglobaldefs++] = ddef;
|
||||||
if (ddef.type == ev_field) {
|
if (ddef.type == ev_field) {
|
||||||
const char *type = qfo->types + def->full_type;
|
ddef.type = get_auxtype (qfo->types + def->full_type);
|
||||||
if (type[0] != 'F') {
|
|
||||||
ddef.type = ev_void;
|
|
||||||
} else {
|
|
||||||
switch (type[1]) {
|
|
||||||
default:
|
|
||||||
case 'v':
|
|
||||||
ddef.type = ev_void;
|
|
||||||
break;
|
|
||||||
case '*':
|
|
||||||
ddef.type = ev_string;
|
|
||||||
break;
|
|
||||||
case 'f':
|
|
||||||
ddef.type = ev_float;
|
|
||||||
break;
|
|
||||||
case 'V':
|
|
||||||
ddef.type = ev_vector;
|
|
||||||
break;
|
|
||||||
case 'E':
|
|
||||||
ddef.type = ev_entity;
|
|
||||||
break;
|
|
||||||
case 'F':
|
|
||||||
ddef.type = ev_field;
|
|
||||||
break;
|
|
||||||
case '(':
|
|
||||||
ddef.type = ev_func;
|
|
||||||
break;
|
|
||||||
case ':':
|
|
||||||
ddef.type = ev_sel;
|
|
||||||
break;
|
|
||||||
case '@': // id
|
|
||||||
case '#': // class
|
|
||||||
case '^':
|
|
||||||
ddef.type = ev_pointer;
|
|
||||||
break;
|
|
||||||
case 'Q':
|
|
||||||
ddef.type = ev_quaternion;
|
|
||||||
break;
|
|
||||||
case 'i':
|
|
||||||
ddef.type = ev_integer;
|
|
||||||
break;
|
|
||||||
case 'I':
|
|
||||||
ddef.type = ev_uinteger;
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
ddef.type = ev_short;
|
|
||||||
break;
|
|
||||||
case '{':
|
|
||||||
ddef.type = ev_struct;
|
|
||||||
break;
|
|
||||||
case '[':
|
|
||||||
ddef.type = ev_array;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
progs.entityfields += pr_type_size[ddef.type];
|
progs.entityfields += pr_type_size[ddef.type];
|
||||||
ddef.ofs = G_INT (&pr, ddef.ofs);
|
ddef.ofs = G_INT (&pr, ddef.ofs);
|
||||||
pr.pr_fielddefs[progs.numfielddefs++] = ddef;
|
pr.pr_fielddefs[progs.numfielddefs++] = ddef;
|
||||||
|
@ -302,6 +301,9 @@ convert_qfo (void)
|
||||||
|
|
||||||
progs.numfunctions = qfo->num_funcs;
|
progs.numfunctions = qfo->num_funcs;
|
||||||
pr.pr_functions = calloc (qfo->num_funcs, sizeof (dfunction_t));
|
pr.pr_functions = calloc (qfo->num_funcs, sizeof (dfunction_t));
|
||||||
|
pr.pr_functions = calloc (qfo->num_funcs, sizeof (dfunction_t));
|
||||||
|
pr.auxfunctions = calloc (qfo->num_funcs, sizeof (pr_auxfunction_t));
|
||||||
|
pr.auxfunction_map = calloc (qfo->num_funcs, sizeof (pr_auxfunction_t *));
|
||||||
for (i = 0; i < qfo->num_funcs; i++) {
|
for (i = 0; i < qfo->num_funcs; i++) {
|
||||||
qfo_func_t *func = qfo->funcs + i;
|
qfo_func_t *func = qfo->funcs + i;
|
||||||
dfunction_t df;
|
dfunction_t df;
|
||||||
|
@ -316,7 +318,26 @@ convert_qfo (void)
|
||||||
memcpy (df.parm_size, func->parm_size, sizeof (df.parm_size));
|
memcpy (df.parm_size, func->parm_size, sizeof (df.parm_size));
|
||||||
|
|
||||||
pr.pr_functions[i] = df;
|
pr.pr_functions[i] = df;
|
||||||
|
|
||||||
|
pr.auxfunction_map[i] = pr.auxfunctions + i;
|
||||||
|
pr.auxfunctions[i].function = i;
|
||||||
|
pr.auxfunctions[i].source_line = func->line;
|
||||||
|
pr.auxfunctions[i].line_info = func->line_info;
|
||||||
|
pr.auxfunctions[i].local_defs = ld - pr.local_defs;
|
||||||
|
pr.auxfunctions[i].num_locals = func->num_local_defs;
|
||||||
|
|
||||||
|
for (j = 0; j < func->num_local_defs; j++)
|
||||||
|
convert_def (qfo->defs + func->local_defs, ld++);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pr.linenos = qfo->lines;
|
||||||
|
debug.num_auxfunctions = qfo->num_funcs;
|
||||||
|
debug.num_linenos = qfo->num_lines;
|
||||||
|
debug.num_locals = ld - pr.local_defs;
|
||||||
|
|
||||||
|
if (verbosity)
|
||||||
|
pr.debug = &debug;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
Loading…
Reference in a new issue