don't relocate a null function constant

This commit is contained in:
Bill Currie 2003-02-24 15:33:57 +00:00
parent 38d5c8c41a
commit 5f75aa024a
2 changed files with 17 additions and 7 deletions

View File

@ -261,7 +261,8 @@ ReuseConstant (expr_t *expr, def_t *def)
reloc = new_reloc (cn->ofs, rel_def_string);
break;
case ex_func:
reloc = new_reloc (cn->ofs, rel_def_func);
if (e.e.func_val)
reloc = new_reloc (cn->ofs, rel_def_func);
break;
case ex_pointer:
if (e.e.pointer.def)

View File

@ -349,8 +349,10 @@ fixup_def (qfo_t *qfo, qfo_def_t *def, int def_num)
pr_type_t *var = DATA (def->ofs);
switch (def->basic_type) {
case ev_func:
func = funcs.funcs + var->func_var - 1;
func->def = def_num;
if (var->func_var) {
func = funcs.funcs + var->func_var - 1;
func->def = def_num;
}
break;
case ev_field:
process_field (def);
@ -506,8 +508,11 @@ fixup_relocs (void)
if (def->basic_type == ev_func
&& (def->flags & QFOD_INITIALIZED)
&& !(def->flags & (QFOD_LOCAL | QFOD_EXTERNAL | QFOD_ABSOLUTE))) {
func = funcs.funcs + DATA (def->ofs)->func_var - 1;
func->def = i;
pr_type_t *var = DATA (def->ofs);
if (var->func_var) {
func = funcs.funcs + var->func_var - 1;
func->def = i;
}
}
}
}
@ -531,8 +536,12 @@ move_def (hashtab_t *deftab, qfo_def_t *d)
}
if ((d->flags & QFOD_CONSTANT) && d->basic_type == ev_func) {
qfo_func_t *func;
func = funcs.funcs + DATA (d->ofs)->func_var - 1;
func->def = def_num;
pr_type_t *var = DATA (d->ofs);
if (var->func_var) {
func = funcs.funcs + var->func_var - 1;
func->def = def_num;
}
}
if (deftab) {
while ((_d = Hash_Del (deftab, STRING (def->name)))) {