dbgloc: add column argument

dbgloc line [col]

This is implemented in a backwards-compatible manner.
This commit is contained in:
Drew DeVault 2024-01-02 11:09:18 +01:00 committed by Quentin Carbonneaux
parent 24d68e841f
commit 85287081c4
7 changed files with 18 additions and 7 deletions

2
all.h
View file

@ -569,7 +569,7 @@ void rega(Fn *);
void emitfnlnk(char *, Lnk *, FILE *);
void emitdat(Dat *, FILE *);
void emitdbgfile(char *, FILE *);
void emitdbgloc(uint, FILE *);
void emitdbgloc(uint, uint, FILE *);
int stashbits(void *, int);
void elf_emitfnfin(char *, FILE *);
void elf_emitfin(FILE *);

View file

@ -548,7 +548,7 @@ emitins(Ins i, Fn *fn, FILE *f)
emitcopy(i.arg[1], TMP(XMM0+15), i.cls, fn, f);
break;
case Odbgloc:
emitdbgloc(i.arg[0].val, f);
emitdbgloc(i.arg[0].val, i.arg[1].val, f);
break;
}
}

View file

@ -447,7 +447,7 @@ emitins(Ins *i, E *e)
emitf("mov %=, sp", i, e);
break;
case Odbgloc:
emitdbgloc(i->arg[0].val, e->f);
emitdbgloc(i->arg[0].val, i->arg[1].val, e->f);
break;
}
}

7
emit.c
View file

@ -235,7 +235,10 @@ emitdbgfile(char *fn, FILE *f)
}
void
emitdbgloc(uint loc, FILE *f)
emitdbgloc(uint line, uint col, FILE *f)
{
fprintf(f, "\t.loc %u %u\n", curfile, loc);
if (col != 0)
fprintf(f, "\t.loc %u %u %u\n", curfile, line, col);
else
fprintf(f, "\t.loc %u %u\n", curfile, line);
}

2
ops.h
View file

@ -122,7 +122,7 @@ O(vastart, T(m,e,e,e, x,e,e,e), 0) X(0, 0, 0) V(0)
O(copy, T(w,l,s,d, x,x,x,x), 0) X(0, 0, 1) V(0)
/* Debug */
O(dbgloc, T(w,l,s,d, x,x,x,x), 0) X(0, 0, 1) V(0)
O(dbgloc, T(w,e,e,e, w,e,e,e), 0) X(0, 0, 1) V(0)
/****************************************/
/* INTERNAL OPERATIONS (keep nop first) */

View file

@ -669,6 +669,14 @@ parseline(PState ps)
arg[0] = INT(tokval.num);
if (arg[0].val != tokval.num)
err("line number too big");
if (peek() == Tcomma) {
next();
expect(Tint);
arg[1] = INT(tokval.num);
if (arg[1].val != tokval.num)
err("column number too big");
} else
arg[1] = INT(0);
goto Ins;
}
if (op == Tcall) {

View file

@ -406,7 +406,7 @@ emitins(Ins *i, Fn *fn, FILE *f)
emitf("mv %=, sp", i, fn, f);
break;
case Odbgloc:
emitdbgloc(i->arg[0].val, f);
emitdbgloc(i->arg[0].val, i->arg[1].val, f);
break;
}
}