mirror of
https://github.com/golang/go
synced 2024-11-22 01:34:41 -07:00
[568]a: precise linenumbers for statements.
R=rsc, ken2, r, rsc1 CC=golang-dev https://golang.org/cl/2297042
This commit is contained in:
parent
cc5c2ee0ec
commit
2ad521c19a
@ -1,7 +1,7 @@
|
|||||||
// Inferno utils/5a/a.h
|
// Inferno utils/5a/a.h
|
||||||
// http://code.google.com/p/inferno-os/source/browse/utils/5a/a.h
|
// http://code.google.com/p/inferno-os/source/browse/utils/5a/a.h
|
||||||
//
|
//
|
||||||
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
||||||
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
||||||
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
||||||
@ -148,6 +148,7 @@ EXTERN int pass;
|
|||||||
EXTERN char* pathname;
|
EXTERN char* pathname;
|
||||||
EXTERN int32 pc;
|
EXTERN int32 pc;
|
||||||
EXTERN int peekc;
|
EXTERN int peekc;
|
||||||
|
EXTERN int32 stmtline;
|
||||||
EXTERN int sym;
|
EXTERN int sym;
|
||||||
EXTERN char* symb;
|
EXTERN char* symb;
|
||||||
EXTERN int thechar;
|
EXTERN int thechar;
|
||||||
@ -157,7 +158,7 @@ EXTERN Biobuf obuf;
|
|||||||
|
|
||||||
void* alloc(int32);
|
void* alloc(int32);
|
||||||
void* allocn(void*, int32, int32);
|
void* allocn(void*, int32, int32);
|
||||||
void ensuresymb(int32);
|
void ensuresymb(int32);
|
||||||
void errorexit(void);
|
void errorexit(void);
|
||||||
void pushio(void);
|
void pushio(void);
|
||||||
void newio(void);
|
void newio(void);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Inferno utils/5a/a.y
|
// Inferno utils/5a/a.y
|
||||||
// http://code.google.com/p/inferno-os/source/browse/utils/5a/a.y
|
// http://code.google.com/p/inferno-os/source/browse/utils/5a/a.y
|
||||||
//
|
//
|
||||||
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
||||||
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
||||||
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
||||||
@ -63,7 +63,11 @@
|
|||||||
%type <gen> imm ximm name oreg ireg nireg ioreg imsr
|
%type <gen> imm ximm name oreg ireg nireg ioreg imsr
|
||||||
%%
|
%%
|
||||||
prog:
|
prog:
|
||||||
| prog line
|
| prog
|
||||||
|
{
|
||||||
|
stmtline = lineno;
|
||||||
|
}
|
||||||
|
line
|
||||||
|
|
||||||
line:
|
line:
|
||||||
LLAB ':'
|
LLAB ':'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Inferno utils/5a/lex.c
|
// Inferno utils/5a/lex.c
|
||||||
// http://code.google.com/p/inferno-os/source/browse/utils/5a/lex.c
|
// http://code.google.com/p/inferno-os/source/browse/utils/5a/lex.c
|
||||||
//
|
//
|
||||||
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
||||||
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
||||||
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
||||||
@ -658,10 +658,10 @@ jackpot:
|
|||||||
Bputc(&obuf, a);
|
Bputc(&obuf, a);
|
||||||
Bputc(&obuf, scond);
|
Bputc(&obuf, scond);
|
||||||
Bputc(&obuf, reg);
|
Bputc(&obuf, reg);
|
||||||
Bputc(&obuf, lineno);
|
Bputc(&obuf, stmtline);
|
||||||
Bputc(&obuf, lineno>>8);
|
Bputc(&obuf, stmtline>>8);
|
||||||
Bputc(&obuf, lineno>>16);
|
Bputc(&obuf, stmtline>>16);
|
||||||
Bputc(&obuf, lineno>>24);
|
Bputc(&obuf, stmtline>>24);
|
||||||
zaddr(g1, sf);
|
zaddr(g1, sf);
|
||||||
zaddr(g2, st);
|
zaddr(g2, st);
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Inferno utils/6a/a.h
|
// Inferno utils/6a/a.h
|
||||||
// http://code.google.com/p/inferno-os/source/browse/utils/6a/a.h
|
// http://code.google.com/p/inferno-os/source/browse/utils/6a/a.h
|
||||||
//
|
//
|
||||||
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
||||||
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
||||||
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
||||||
@ -50,7 +50,7 @@ typedef struct Ref Ref;
|
|||||||
typedef struct Gen Gen;
|
typedef struct Gen Gen;
|
||||||
typedef struct Io Io;
|
typedef struct Io Io;
|
||||||
typedef struct Hist Hist;
|
typedef struct Hist Hist;
|
||||||
typedef struct Gen2 Gen2;
|
typedef struct Gen2 Gen2;
|
||||||
|
|
||||||
#define MAXALIGN 7
|
#define MAXALIGN 7
|
||||||
#define FPCHIP 1
|
#define FPCHIP 1
|
||||||
@ -161,6 +161,7 @@ EXTERN int pass;
|
|||||||
EXTERN char* pathname;
|
EXTERN char* pathname;
|
||||||
EXTERN int32 pc;
|
EXTERN int32 pc;
|
||||||
EXTERN int peekc;
|
EXTERN int peekc;
|
||||||
|
EXTERN int32 stmtline;
|
||||||
EXTERN int sym;
|
EXTERN int sym;
|
||||||
EXTERN char* symb;
|
EXTERN char* symb;
|
||||||
EXTERN int thechar;
|
EXTERN int thechar;
|
||||||
@ -168,9 +169,9 @@ EXTERN char* thestring;
|
|||||||
EXTERN int32 thunk;
|
EXTERN int32 thunk;
|
||||||
EXTERN Biobuf obuf;
|
EXTERN Biobuf obuf;
|
||||||
|
|
||||||
void* alloc(int32);
|
void* alloc(int32);
|
||||||
void* allocn(void*, int32, int32);
|
void* allocn(void*, int32, int32);
|
||||||
void ensuresymb(int32);
|
void ensuresymb(int32);
|
||||||
void errorexit(void);
|
void errorexit(void);
|
||||||
void pushio(void);
|
void pushio(void);
|
||||||
void newio(void);
|
void newio(void);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Inferno utils/6a/a.y
|
// Inferno utils/6a/a.y
|
||||||
// http://code.google.com/p/inferno-os/source/browse/utils/6a/a.y
|
// http://code.google.com/p/inferno-os/source/browse/utils/6a/a.y
|
||||||
//
|
//
|
||||||
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
||||||
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
||||||
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
||||||
@ -60,7 +60,11 @@
|
|||||||
%type <gen2> spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 spec9
|
%type <gen2> spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 spec9
|
||||||
%%
|
%%
|
||||||
prog:
|
prog:
|
||||||
| prog line
|
| prog
|
||||||
|
{
|
||||||
|
stmtline = lineno;
|
||||||
|
}
|
||||||
|
line
|
||||||
|
|
||||||
line:
|
line:
|
||||||
LLAB ':'
|
LLAB ':'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Inferno utils/6a/lex.c
|
// Inferno utils/6a/lex.c
|
||||||
// http://code.google.com/p/inferno-os/source/browse/utils/6a/lex.c
|
// http://code.google.com/p/inferno-os/source/browse/utils/6a/lex.c
|
||||||
//
|
//
|
||||||
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
||||||
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
||||||
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
||||||
@ -1260,10 +1260,10 @@ jackpot:
|
|||||||
}
|
}
|
||||||
Bputc(&obuf, a);
|
Bputc(&obuf, a);
|
||||||
Bputc(&obuf, a>>8);
|
Bputc(&obuf, a>>8);
|
||||||
Bputc(&obuf, lineno);
|
Bputc(&obuf, stmtline);
|
||||||
Bputc(&obuf, lineno>>8);
|
Bputc(&obuf, stmtline>>8);
|
||||||
Bputc(&obuf, lineno>>16);
|
Bputc(&obuf, stmtline>>16);
|
||||||
Bputc(&obuf, lineno>>24);
|
Bputc(&obuf, stmtline>>24);
|
||||||
zaddr(&g2->from, sf);
|
zaddr(&g2->from, sf);
|
||||||
zaddr(&g2->to, st);
|
zaddr(&g2->to, st);
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Inferno utils/8a/a.h
|
// Inferno utils/8a/a.h
|
||||||
// http://code.google.com/p/inferno-os/source/browse/utils/8a/a.h
|
// http://code.google.com/p/inferno-os/source/browse/utils/8a/a.h
|
||||||
//
|
//
|
||||||
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
||||||
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
||||||
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
||||||
@ -50,7 +50,7 @@ typedef struct Ref Ref;
|
|||||||
typedef struct Gen Gen;
|
typedef struct Gen Gen;
|
||||||
typedef struct Io Io;
|
typedef struct Io Io;
|
||||||
typedef struct Hist Hist;
|
typedef struct Hist Hist;
|
||||||
typedef struct Gen2 Gen2;
|
typedef struct Gen2 Gen2;
|
||||||
|
|
||||||
#define MAXALIGN 7
|
#define MAXALIGN 7
|
||||||
#define FPCHIP 1
|
#define FPCHIP 1
|
||||||
@ -162,6 +162,7 @@ EXTERN int pass;
|
|||||||
EXTERN char* pathname;
|
EXTERN char* pathname;
|
||||||
EXTERN int32 pc;
|
EXTERN int32 pc;
|
||||||
EXTERN int peekc;
|
EXTERN int peekc;
|
||||||
|
EXTERN int32 stmtline;
|
||||||
EXTERN int sym;
|
EXTERN int sym;
|
||||||
EXTERN char* symb;
|
EXTERN char* symb;
|
||||||
EXTERN int thechar;
|
EXTERN int thechar;
|
||||||
@ -169,9 +170,9 @@ EXTERN char* thestring;
|
|||||||
EXTERN int32 thunk;
|
EXTERN int32 thunk;
|
||||||
EXTERN Biobuf obuf;
|
EXTERN Biobuf obuf;
|
||||||
|
|
||||||
void* alloc(int32);
|
void* alloc(int32);
|
||||||
void* allocn(void*, int32, int32);
|
void* allocn(void*, int32, int32);
|
||||||
void ensuresymb(int32);
|
void ensuresymb(int32);
|
||||||
void errorexit(void);
|
void errorexit(void);
|
||||||
void pushio(void);
|
void pushio(void);
|
||||||
void newio(void);
|
void newio(void);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Inferno utils/8a/a.y
|
// Inferno utils/8a/a.y
|
||||||
// http://code.google.com/p/inferno-os/source/browse/utils/8a/a.y
|
// http://code.google.com/p/inferno-os/source/browse/utils/8a/a.y
|
||||||
//
|
//
|
||||||
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
||||||
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
||||||
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
||||||
@ -64,7 +64,11 @@
|
|||||||
%type <gen2> spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8
|
%type <gen2> spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8
|
||||||
%%
|
%%
|
||||||
prog:
|
prog:
|
||||||
| prog line
|
| prog
|
||||||
|
{
|
||||||
|
stmtline = lineno;
|
||||||
|
}
|
||||||
|
line
|
||||||
|
|
||||||
line:
|
line:
|
||||||
LLAB ':'
|
LLAB ':'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Inferno utils/8a/lex.c
|
// Inferno utils/8a/lex.c
|
||||||
// http://code.google.com/p/inferno-os/source/browse/utils/8a/lex.c
|
// http://code.google.com/p/inferno-os/source/browse/utils/8a/lex.c
|
||||||
//
|
//
|
||||||
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
|
||||||
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
// Portions Copyright © 1997-1999 Vita Nuova Limited
|
||||||
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
|
||||||
@ -925,10 +925,10 @@ jackpot:
|
|||||||
}
|
}
|
||||||
Bputc(&obuf, a);
|
Bputc(&obuf, a);
|
||||||
Bputc(&obuf, a>>8);
|
Bputc(&obuf, a>>8);
|
||||||
Bputc(&obuf, lineno);
|
Bputc(&obuf, stmtline);
|
||||||
Bputc(&obuf, lineno>>8);
|
Bputc(&obuf, stmtline>>8);
|
||||||
Bputc(&obuf, lineno>>16);
|
Bputc(&obuf, stmtline>>16);
|
||||||
Bputc(&obuf, lineno>>24);
|
Bputc(&obuf, stmtline>>24);
|
||||||
zaddr(&g2->from, sf);
|
zaddr(&g2->from, sf);
|
||||||
zaddr(&g2->to, st);
|
zaddr(&g2->to, st);
|
||||||
|
|
||||||
|
@ -436,7 +436,7 @@ decodez(char *s)
|
|||||||
* The line history itself
|
* The line history itself
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static char **histfile; // [0] holds the empty string.
|
static char **histfile; // [0] holds "<eof>", DW_LNS_set_file arguments must be > 0.
|
||||||
static int histfilesize;
|
static int histfilesize;
|
||||||
static int histfilecap;
|
static int histfilecap;
|
||||||
|
|
||||||
@ -445,7 +445,7 @@ clearhistfile(void)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// [0] holds the empty string.
|
// [0] holds "<eof>"
|
||||||
for (i = 1; i < histfilesize; i++)
|
for (i = 1; i < histfilesize; i++)
|
||||||
free(histfile[i]);
|
free(histfile[i]);
|
||||||
histfilesize = 0;
|
histfilesize = 0;
|
||||||
@ -756,12 +756,17 @@ writelines(void)
|
|||||||
newattr(dwinfo->child, DW_AT_low_pc, DW_CLS_ADDRESS, p->pc, 0);
|
newattr(dwinfo->child, DW_AT_low_pc, DW_CLS_ADDRESS, p->pc, 0);
|
||||||
|
|
||||||
for(q = p; q != P && (q == p || q->as != ATEXT); q = q->link) {
|
for(q = p; q != P && (q == p || q->as != ATEXT); q = q->link) {
|
||||||
epc = q->pc;
|
epc = q->pc;
|
||||||
lh = searchhist(q->line);
|
lh = searchhist(q->line);
|
||||||
if (lh == nil) {
|
if (lh == nil) {
|
||||||
diag("corrupt history or bad absolute line: %P", q);
|
diag("corrupt history or bad absolute line: %P", q);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (lh->file < 1) { // 0 is the past-EOF entry.
|
||||||
|
diag("instruction with linenumber past EOF in %s: %P", unitname, q);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
lline = lh->line + q->line - lh->absline;
|
lline = lh->line + q->line - lh->absline;
|
||||||
if (debug['v'] > 1)
|
if (debug['v'] > 1)
|
||||||
print("%6llux %s[%lld] %P\n", q->pc, histfile[lh->file], lline, q);
|
print("%6llux %s[%lld] %P\n", q->pc, histfile[lh->file], lline, q);
|
||||||
|
Loading…
Reference in New Issue
Block a user