From 1e49f0d0c37bc35ff3f4bc5f16f881b05993dc17 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Tue, 23 Jul 2002 05:44:45 +0000 Subject: [PATCH] fix a segfault (what was I thinking when I wrote that line?) --- tools/qfcc/source/obj_file.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/tools/qfcc/source/obj_file.c b/tools/qfcc/source/obj_file.c index f768401d3..24639f5ec 100644 --- a/tools/qfcc/source/obj_file.c +++ b/tools/qfcc/source/obj_file.c @@ -134,14 +134,20 @@ flags (def_t *d) return flags; } +static void +write_one_reloc (reloc_t *r, qfo_reloc_t **reloc, int def) +{ + (*reloc)->ofs = LittleLong (r->ofs); + (*reloc)->type = LittleLong (r->type); + (*reloc)->def = LittleLong (def); + (*reloc)++; +} + static void write_relocs (reloc_t *r, qfo_reloc_t **reloc, int def) { while (r) { - (*reloc)->ofs = LittleLong (r->ofs); - (*reloc)->type = LittleLong (r->type); - (*reloc)->def = LittleLong (def); - (*reloc)++; + write_one_reloc (r, reloc, def); r = r->next; } } @@ -170,6 +176,7 @@ setup_data (void) qfo_func_t *func = funcs; function_t *f; qfo_reloc_t *reloc = relocs; + reloc_t *r; dstatement_t *st; pr_type_t *var; pr_lineno_t *line; @@ -204,7 +211,11 @@ setup_data (void) for (d = f->scope->head; d; d = d->def_next) write_def (d, def++, &reloc); } - write_relocs (pr.relocs, &reloc, G_INT (reloc->ofs)); + for (r = pr.relocs; r; r = r->next) + if (r->type == rel_def_op) + write_one_reloc (r, &reloc, G_INT (r->ofs)); + else + write_one_reloc (r, &reloc, 0); for (st = pr.code->code; st - pr.code->code < pr.code->size; st++) { st->op = LittleLong (st->op); st->a = LittleLong (st->a);