diff --git a/tools/qfcc/include/reloc.h b/tools/qfcc/include/reloc.h index 0c370dd3f..99d4992a1 100644 --- a/tools/qfcc/include/reloc.h +++ b/tools/qfcc/include/reloc.h @@ -51,6 +51,8 @@ typedef struct reloc_s { struct reloc_s *next; int ofs; reloc_type type; + int line; + string_t file; } reloc_t; struct statement_s; diff --git a/tools/qfcc/source/reloc.c b/tools/qfcc/source/reloc.c index 284807c91..ade3d7da5 100644 --- a/tools/qfcc/source/reloc.c +++ b/tools/qfcc/source/reloc.c @@ -100,9 +100,10 @@ relocate_refs (reloc_t *refs, int ofs) pr.code->code[refs->ofs].c = o; break; case rel_def_op: - if (ofs >= pr.code->size) - error (0, "invalid statement offset"); - else + if (ofs > pr.code->size) { + error (0, "invalid statement offset: %d >= %d, %d", + ofs, pr.code->size, refs->ofs); + } else G_INT (refs->ofs) = ofs; break; case rel_def_def: @@ -126,6 +127,8 @@ new_reloc (int ofs, reloc_type type) ALLOC (16384, reloc_t, refs, ref); ref->ofs = ofs; ref->type = type; + ref->line = pr.source_line; + ref->file = pr.source_file; return ref; }