]> Cypherpunks repositories - gostls13.git/commitdiff
print pc on faults
authorRob Pike <r@golang.org>
Tue, 17 Jun 2008 00:04:30 +0000 (17:04 -0700)
committerRob Pike <r@golang.org>
Tue, 17 Jun 2008 00:04:30 +0000 (17:04 -0700)
SVN=123030

src/runtime/rt0_amd64_darwin.s
src/runtime/rt0_amd64_linux.s
src/runtime/runtime.c
src/runtime/runtime.h

index 0d981b5818580ffe9f9a1dbf541e8c3ae8a41b21..824a602554ea38fdf580c745103aeff8eb8f95e5 100644 (file)
@@ -84,3 +84,8 @@ TEXT  sys_memclr(SB),1,$-8
        REP
        STOSQ
        RET
+
+TEXT   sys_getcallerpc+0(SB),0,$0
+       MOVQ    x+0(FP),AX
+       MOVQ    -8(AX),AX
+       RET
index 12590bd6c5a3d61ae114276fdf9839a9d3074dd9..6ad8b33d55ac6af4f5878ffc5fe7f5d7be8c1e0d 100644 (file)
@@ -94,3 +94,8 @@ TEXT  sys_memclr(SB),1,$-8
        REP
        STOSQ
        RET
+
+TEXT   sys_getcallerpc+0(SB),0,$0
+       MOVQ    x+0(FP),AX
+       MOVQ    -8(AX),AX
+       RET
index 724254a116f439b7f0a964c36c7d4278d26b5da3..9a7efc55b718a9fcdd75d1ece183259e01a7d3f1 100644 (file)
@@ -70,15 +70,6 @@ sys_printpointer(void *p)
        sys_write(1, buf+i, nelem(buf)-i);
 }
 
-void
-sys_panicl(int32 lno)
-{
-       prints("\npanic on line ");
-       sys_printint(lno);
-       prints("\n");
-       *(int32*)0 = 0;
-}
-
 void
 sys_printstring(string v)
 {
@@ -101,6 +92,24 @@ prints(int8 *s)
        sys_write(1, s, strlen(s));
 }
 
+void
+sys_printpc(void *p)
+{
+       prints("PC=0x");
+       sys_printpointer(sys_getcallerpc(p));
+}
+
+void
+sys_panicl(int32 lno)
+{
+       prints("\npanic on line ");
+       sys_printint(lno);
+       prints(" ");
+       sys_printpc(&lno);
+       prints("\n");
+       *(int32*)0 = 0;
+}
+
 dump(byte *p, int32 n)
 {
        uint32 v;
@@ -307,8 +316,11 @@ sys_slicestring(string si, int32 lindex, int32 hindex, string so)
        int32 l;
 
        if(lindex < 0 || lindex > si->len ||
-          hindex < lindex || hindex > si->len)
+          hindex < lindex || hindex > si->len) {
+               sys_printpc(&si);
+               prints(" ");
                prbounds("slice", lindex, si->len, hindex);
+       }
 
        l = hindex-lindex;
        so = mal(sizeof(so->len)+l);
@@ -320,8 +332,11 @@ sys_slicestring(string si, int32 lindex, int32 hindex, string so)
 void
 sys_indexstring(string s, int32 i, byte b)
 {
-       if(i < 0 || i >= s->len)
+       if(i < 0 || i >= s->len) {
+               sys_printpc(&s);
+               prints(" ");
                prbounds("index", 0, i, s->len);
+       }
 
        b = s->str[i];
        FLUSH(&b);
index a12ac29f5564519dada27284db845e92d385cff1..d006915730d0a391853787343c484686601eee0e 100644 (file)
@@ -91,6 +91,7 @@ void  sys_write(int32, void*, int32);
 void   sys_breakpoint(void);
 uint8* sys_mmap(byte*, uint32, int32, int32, int32, uint32);
 void   sys_memclr(byte*, uint32);
+void* sys_getcallerpc(void*);
 
 /*
  * runtime