]> Cypherpunks repositories - gostls13.git/commitdiff
[568]a: precise linenumbers for statements.
authorLuuk van Dijk <lvd@golang.org>
Thu, 7 Oct 2010 09:13:06 +0000 (11:13 +0200)
committerLuuk van Dijk <lvd@golang.org>
Thu, 7 Oct 2010 09:13:06 +0000 (11:13 +0200)
R=rsc, ken2, r, rsc1
CC=golang-dev
https://golang.org/cl/2297042

src/cmd/5a/a.h
src/cmd/5a/a.y
src/cmd/5a/lex.c
src/cmd/6a/a.h
src/cmd/6a/a.y
src/cmd/6a/lex.c
src/cmd/8a/a.h
src/cmd/8a/a.y
src/cmd/8a/lex.c
src/cmd/ld/dwarf.c

index 6cd5af8c6b31bc145c48a6458b72643eafb022b0..bc4f433e130454a4491b0ddd9bc91429c69da1f3 100644 (file)
@@ -1,7 +1,7 @@
 // Inferno 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 © 1997-1999 Vita Nuova Limited
 //     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
@@ -148,6 +148,7 @@ EXTERN      int     pass;
 EXTERN char*   pathname;
 EXTERN int32   pc;
 EXTERN int     peekc;
+EXTERN int32   stmtline;
 EXTERN int     sym;
 EXTERN char*   symb;
 EXTERN int     thechar;
@@ -157,7 +158,7 @@ EXTERN      Biobuf  obuf;
 
 void*  alloc(int32);
 void*  allocn(void*, int32, int32);
-void    ensuresymb(int32);
+void   ensuresymb(int32);
 void   errorexit(void);
 void   pushio(void);
 void   newio(void);
index bb30ac698a456cd78e1261b32a28d6fbe30bc583..b39c916ab1e3d723f89bb66d4a1e0c15c95bf7bd 100644 (file)
@@ -1,7 +1,7 @@
 // Inferno 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 © 1997-1999 Vita Nuova Limited
 //     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
 %type  <gen>   imm ximm name oreg ireg nireg ioreg imsr
 %%
 prog:
-|      prog line
+|      prog
+       {
+               stmtline = lineno;
+       }
+       line
 
 line:
        LLAB ':'
index 2cc0993e4717b14bb12a207ab0e3147a996a11e1..b36094a784f7cb46ace4c32e87787fd50337184e 100644 (file)
@@ -1,7 +1,7 @@
 // Inferno 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 © 1997-1999 Vita Nuova Limited
 //     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
@@ -658,10 +658,10 @@ jackpot:
        Bputc(&obuf, a);
        Bputc(&obuf, scond);
        Bputc(&obuf, reg);
-       Bputc(&obuf, lineno);
-       Bputc(&obuf, lineno>>8);
-       Bputc(&obuf, lineno>>16);
-       Bputc(&obuf, lineno>>24);
+       Bputc(&obuf, stmtline);
+       Bputc(&obuf, stmtline>>8);
+       Bputc(&obuf, stmtline>>16);
+       Bputc(&obuf, stmtline>>24);
        zaddr(g1, sf);
        zaddr(g2, st);
 
index a713acc9f2b21930380e1283d93f565fcec7cda4..9030081ca048563d28d2e85cf2ff303bb1b96a01 100644 (file)
@@ -1,7 +1,7 @@
 // Inferno 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 © 1997-1999 Vita Nuova Limited
 //     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  Io      Io;
 typedef        struct  Hist    Hist;
-typedef        struct  Gen2    Gen2;
+typedef        struct  Gen2    Gen2;
 
 #define        MAXALIGN        7
 #define        FPCHIP          1
@@ -161,6 +161,7 @@ EXTERN      int     pass;
 EXTERN char*   pathname;
 EXTERN int32   pc;
 EXTERN int     peekc;
+EXTERN int32   stmtline;
 EXTERN int     sym;
 EXTERN char*   symb;
 EXTERN int     thechar;
@@ -168,9 +169,9 @@ EXTERN      char*   thestring;
 EXTERN int32   thunk;
 EXTERN Biobuf  obuf;
 
-void*   alloc(int32);
+void*  alloc(int32);
 void*  allocn(void*, int32, int32);
-void    ensuresymb(int32);
+void   ensuresymb(int32);
 void   errorexit(void);
 void   pushio(void);
 void   newio(void);
index 6341ba7462409ba4a12fe4de2091699b47c4136b..770f676fe5a56fdcee73926959b638782c0da874 100644 (file)
@@ -1,7 +1,7 @@
 // Inferno 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 © 1997-1999 Vita Nuova Limited
 //     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
 %type  <gen2>  spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 spec9
 %%
 prog:
-|      prog line
+|      prog 
+       {
+               stmtline = lineno;
+       }
+       line
 
 line:
        LLAB ':'
index 81273b29756dd3e99391c5c196441837d183558f..1b8bb63445e62c23d3b6d58b3aa2c7417b8213d4 100644 (file)
@@ -1,7 +1,7 @@
 // Inferno 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 © 1997-1999 Vita Nuova Limited
 //     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
@@ -1260,10 +1260,10 @@ jackpot:
        }
        Bputc(&obuf, a);
        Bputc(&obuf, a>>8);
-       Bputc(&obuf, lineno);
-       Bputc(&obuf, lineno>>8);
-       Bputc(&obuf, lineno>>16);
-       Bputc(&obuf, lineno>>24);
+       Bputc(&obuf, stmtline);
+       Bputc(&obuf, stmtline>>8);
+       Bputc(&obuf, stmtline>>16);
+       Bputc(&obuf, stmtline>>24);
        zaddr(&g2->from, sf);
        zaddr(&g2->to, st);
 
index 035db25514d2974173a43d7db4203c469be05392..fe6b172802eeb5890d5258063e8c52d792c27f58 100644 (file)
@@ -1,7 +1,7 @@
 // Inferno 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 © 1997-1999 Vita Nuova Limited
 //     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  Io      Io;
 typedef        struct  Hist    Hist;
-typedef        struct  Gen2    Gen2;
+typedef        struct  Gen2    Gen2;
 
 #define        MAXALIGN        7
 #define        FPCHIP          1
@@ -162,6 +162,7 @@ EXTERN      int     pass;
 EXTERN char*   pathname;
 EXTERN int32   pc;
 EXTERN int     peekc;
+EXTERN int32   stmtline;
 EXTERN int     sym;
 EXTERN char*   symb;
 EXTERN int     thechar;
@@ -169,9 +170,9 @@ EXTERN      char*   thestring;
 EXTERN int32   thunk;
 EXTERN Biobuf  obuf;
 
-void*   alloc(int32);
+void*  alloc(int32);
 void*  allocn(void*, int32, int32);
-void    ensuresymb(int32);
+void   ensuresymb(int32);
 void   errorexit(void);
 void   pushio(void);
 void   newio(void);
index 8bc96cce53080e8410f40fd096eda6e55b73b8a8..04662f83d0ce96f391eaaec9f8a5f9b12836a9ca 100644 (file)
@@ -1,7 +1,7 @@
 // Inferno 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 © 1997-1999 Vita Nuova Limited
 //     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
 %type  <gen2>  spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8
 %%
 prog:
-|      prog line
+|      prog
+       {
+               stmtline = lineno;
+       }
+       line
 
 line:
        LLAB ':'
index c8127bde9c565929bb1da7e323fc7b57084bb401..bf298b26659d91eefc9031ce9eb515090bb10352 100644 (file)
@@ -1,7 +1,7 @@
 // Inferno 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 © 1997-1999 Vita Nuova Limited
 //     Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
@@ -925,10 +925,10 @@ jackpot:
        }
        Bputc(&obuf, a);
        Bputc(&obuf, a>>8);
-       Bputc(&obuf, lineno);
-       Bputc(&obuf, lineno>>8);
-       Bputc(&obuf, lineno>>16);
-       Bputc(&obuf, lineno>>24);
+       Bputc(&obuf, stmtline);
+       Bputc(&obuf, stmtline>>8);
+       Bputc(&obuf, stmtline>>16);
+       Bputc(&obuf, stmtline>>24);
        zaddr(&g2->from, sf);
        zaddr(&g2->to, st);
 
index 0c255544dec2d6967cdfc4d349d559199780dbb2..500c2fea80b2791a864e15b731780b66f74bfe38 100644 (file)
@@ -436,7 +436,7 @@ decodez(char *s)
  * 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  histfilecap;
 
@@ -445,7 +445,7 @@ clearhistfile(void)
 {
        int i;
 
-       // [0] holds the empty string.
+       // [0] holds "<eof>"
        for (i = 1; i < histfilesize; i++)
                free(histfile[i]);
        histfilesize = 0;
@@ -756,12 +756,17 @@ writelines(void)
                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) {
-                        epc = q->pc;
+                       epc = q->pc;
                        lh = searchhist(q->line);
                        if (lh == nil) {
                                diag("corrupt history or bad absolute line: %P", q);
                                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;
                        if (debug['v'] > 1)
                                print("%6llux %s[%lld] %P\n", q->pc, histfile[lh->file], lline, q);