This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Go patch committed: Copy runtime_panicstring from master library


This patch copies the runtime_panicstring function from the master Go
library, to simplify future merges.  The runtime_panicstring function
replaces the __go_panic_msg function.  Bootstrapped and ran Go testsuite
on x86_64-unknown-linux-gnu.  Committed to mainline.

Ian

diff -r 3992ad49b04e libgo/runtime/go-append.c
--- a/libgo/runtime/go-append.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-append.c	Tue Nov 29 16:15:43 2011 -0800
@@ -32,7 +32,7 @@
   ucount = (uintptr_t) a.__count + bcount;
   count = (int) ucount;
   if ((uintptr_t) count != ucount || count <= a.__count)
-    __go_panic_msg ("append: slice overflow");
+    runtime_panicstring ("append: slice overflow");
 
   if (count > a.__capacity)
     {
diff -r 3992ad49b04e libgo/runtime/go-close.c
--- a/libgo/runtime/go-close.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-close.c	Tue Nov 29 16:15:43 2011 -0800
@@ -18,7 +18,7 @@
   int i;
 
   if (channel == NULL)
-    __go_panic_msg ("close of nil channel");
+    runtime_panicstring ("close of nil channel");
 
   i = pthread_mutex_lock (&channel->lock);
   __go_assert (i == 0);
@@ -30,7 +30,7 @@
     {
       i = pthread_mutex_unlock (&channel->lock);
       __go_assert (i == 0);
-      __go_panic_msg ("close of closed channel");
+      runtime_panicstring ("close of closed channel");
     }
 
   channel->is_closed = 1;
diff -r 3992ad49b04e libgo/runtime/go-eface-compare.c
--- a/libgo/runtime/go-eface-compare.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-eface-compare.c	Tue Nov 29 16:15:43 2011 -0800
@@ -4,7 +4,7 @@
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.  */
 
-#include "go-panic.h"
+#include "runtime.h"
 #include "interface.h"
 
 /* Compare two interface values.  Return 0 for equal, not zero for not
@@ -20,7 +20,7 @@
 
   if (((uintptr_t) left_descriptor & reflectFlags) != 0
       || ((uintptr_t) right.__type_descriptor & reflectFlags) != 0)
-    __go_panic_msg ("invalid interface value");
+    runtime_panicstring ("invalid interface value");
 
   if (left_descriptor == NULL && right.__type_descriptor == NULL)
     return 0;
diff -r 3992ad49b04e libgo/runtime/go-eface-val-compare.c
--- a/libgo/runtime/go-eface-val-compare.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-eface-val-compare.c	Tue Nov 29 16:15:43 2011 -0800
@@ -4,7 +4,7 @@
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.  */
 
-#include "go-panic.h"
+#include "runtime.h"
 #include "go-type.h"
 #include "interface.h"
 
@@ -21,7 +21,7 @@
 
   left_descriptor = left.__type_descriptor;
   if (((uintptr_t) left_descriptor & reflectFlags) != 0)
-    __go_panic_msg ("invalid interface value");
+    runtime_panicstring ("invalid interface value");
   if (left_descriptor == NULL)
     return 1;
   if (!__go_type_descriptors_equal (left_descriptor, right_descriptor))
diff -r 3992ad49b04e libgo/runtime/go-interface-eface-compare.c
--- a/libgo/runtime/go-interface-eface-compare.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-interface-eface-compare.c	Tue Nov 29 16:15:43 2011 -0800
@@ -4,7 +4,7 @@
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.  */
 
-#include "go-panic.h"
+#include "runtime.h"
 #include "interface.h"
 
 /* Compare a non-empty interface value with an empty interface value.
@@ -18,7 +18,7 @@
   const struct __go_type_descriptor *left_descriptor;
 
   if (((uintptr_t) right.__type_descriptor & reflectFlags) != 0)
-    __go_panic_msg ("invalid interface value");
+    runtime_panicstring ("invalid interface value");
   if (left.__methods == NULL && right.__type_descriptor == NULL)
     return 0;
   if (left.__methods == NULL || right.__type_descriptor == NULL)
diff -r 3992ad49b04e libgo/runtime/go-make-slice.c
--- a/libgo/runtime/go-make-slice.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-make-slice.c	Tue Nov 29 16:15:43 2011 -0800
@@ -31,14 +31,14 @@
 
   ilen = (int) len;
   if (ilen < 0 || (uintptr_t) ilen != len)
-    __go_panic_msg ("makeslice: len out of range");
+    runtime_panicstring ("makeslice: len out of range");
 
   icap = (int) cap;
   if (cap < len
       || (uintptr_t) icap != cap
       || (std->__element_type->__size > 0
 	  && cap > (uintptr_t) -1U / std->__element_type->__size))
-    __go_panic_msg ("makeslice: cap out of range");
+    runtime_panicstring ("makeslice: cap out of range");
 
   ret.__count = ilen;
   ret.__capacity = icap;
diff -r 3992ad49b04e libgo/runtime/go-map-delete.c
--- a/libgo/runtime/go-map-delete.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-map-delete.c	Tue Nov 29 16:15:43 2011 -0800
@@ -7,9 +7,9 @@
 #include <stddef.h>
 #include <stdlib.h>
 
+#include "runtime.h"
 #include "go-alloc.h"
 #include "go-assert.h"
-#include "go-panic.h"
 #include "map.h"
 
 /* Delete the entry matching KEY from MAP.  */
@@ -27,7 +27,7 @@
   void **pentry;
 
   if (map == NULL)
-    __go_panic_msg ("deletion of entry in nil map");
+    runtime_panicstring ("deletion of entry in nil map");
 
   descriptor = map->__descriptor;
 
diff -r 3992ad49b04e libgo/runtime/go-map-index.c
--- a/libgo/runtime/go-map-index.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-map-index.c	Tue Nov 29 16:15:43 2011 -0800
@@ -7,9 +7,9 @@
 #include <stddef.h>
 #include <stdlib.h>
 
+#include "runtime.h"
 #include "go-alloc.h"
 #include "go-assert.h"
-#include "go-panic.h"
 #include "map.h"
 
 /* Rehash MAP to a larger size.  */
@@ -89,7 +89,7 @@
   if (map == NULL)
     {
       if (insert)
-	__go_panic_msg ("assignment to entry in nil map");
+	runtime_panicstring ("assignment to entry in nil map");
       return NULL;
     }
 
diff -r 3992ad49b04e libgo/runtime/go-new-channel.c
--- a/libgo/runtime/go-new-channel.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-new-channel.c	Tue Nov 29 16:15:43 2011 -0800
@@ -7,9 +7,9 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include "runtime.h"
 #include "go-alloc.h"
 #include "go-assert.h"
-#include "go-panic.h"
 #include "channel.h"
 
 struct __go_channel*
@@ -34,7 +34,7 @@
   if (ientries < 0
       || (uintptr_t) ientries != entries
       || (element_size > 0 && entries > (uintptr_t) -1 / element_size))
-    __go_panic_msg ("chan size out of range");
+    runtime_panicstring ("chan size out of range");
 
   alloc_size = (element_size + sizeof (uint64_t) - 1) / sizeof (uint64_t);
 
diff -r 3992ad49b04e libgo/runtime/go-new-map.c
--- a/libgo/runtime/go-new-map.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-new-map.c	Tue Nov 29 16:15:43 2011 -0800
@@ -4,8 +4,8 @@
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.  */
 
+#include "runtime.h"
 #include "go-alloc.h"
-#include "go-panic.h"
 #include "map.h"
 
 /* List of prime numbers, copied from libstdc++/src/hashtable.c.  */
@@ -111,7 +111,7 @@
 
   ientries = (int) entries;
   if (ientries < 0 || (uintptr_t) ientries != entries)
-    __go_panic_msg ("map size out of range");
+    runtime_panicstring ("map size out of range");
 
   if (entries == 0)
     entries = 5;
diff -r 3992ad49b04e libgo/runtime/go-panic.c
--- a/libgo/runtime/go-panic.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-panic.c	Tue Nov 29 16:15:43 2011 -0800
@@ -105,22 +105,3 @@
   __printpanics (g->panic);
   runtime_dopanic (0);
 }
-
-/* This is used by the runtime library.  */
-
-void
-__go_panic_msg (const char* msg)
-{
-  size_t len;
-  unsigned char *sdata;
-  struct __go_string s;
-  struct __go_empty_interface arg;
-
-  len = __builtin_strlen (msg);
-  sdata = runtime_mallocgc (len, FlagNoPointers, 0, 0);
-  __builtin_memcpy (sdata, msg, len);
-  s.__data = sdata;
-  s.__length = len;
-  newErrorString(s, &arg);
-  __go_panic (arg);
-}
diff -r 3992ad49b04e libgo/runtime/go-panic.h
--- a/libgo/runtime/go-panic.h	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-panic.h	Tue Nov 29 16:15:43 2011 -0800
@@ -34,9 +34,6 @@
 extern void __go_panic (struct __go_empty_interface)
   __attribute__ ((noreturn));
 
-extern void __go_panic_msg (const char* msg)
-  __attribute__ ((noreturn));
-
 extern void __go_print_string (struct __go_string);
 
 extern struct __go_empty_interface __go_recover (void);
@@ -55,7 +52,8 @@
 				  struct __go_empty_interface *ret)
   __asm__ ("libgo_runtime.runtime.NewTypeAssertionError");
 
-extern void newErrorString(struct __go_string, struct __go_empty_interface *)
+extern void runtime_newErrorString(struct __go_string,
+				   struct __go_empty_interface *)
   __asm__ ("libgo_runtime.runtime.NewErrorString");
 
 extern void printany(struct __go_empty_interface)
diff -r 3992ad49b04e libgo/runtime/go-reflect-map.c
--- a/libgo/runtime/go-reflect-map.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-reflect-map.c	Tue Nov 29 16:15:43 2011 -0800
@@ -7,9 +7,9 @@
 #include <stdlib.h>
 #include <stdint.h>
 
+#include "runtime.h"
 #include "go-alloc.h"
 #include "go-assert.h"
-#include "go-panic.h"
 #include "go-type.h"
 #include "map.h"
 
@@ -90,7 +90,7 @@
   __go_assert (mt->__common.__code == GO_MAP);
 
   if (map == NULL)
-    __go_panic_msg ("assignment to entry in nil map");
+    runtime_panicstring ("assignment to entry in nil map");
 
   key_descriptor = mt->__key_type;
   if (__go_is_pointer_type (key_descriptor))
diff -r 3992ad49b04e libgo/runtime/go-reflect.c
--- a/libgo/runtime/go-reflect.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-reflect.c	Tue Nov 29 16:15:43 2011 -0800
@@ -7,9 +7,9 @@
 #include <stdlib.h>
 #include <stdint.h>
 
+#include "runtime.h"
 #include "interface.h"
 #include "go-alloc.h"
-#include "go-panic.h"
 #include "go-string.h"
 #include "go-type.h"
 
@@ -122,7 +122,7 @@
   struct reflect_ret ret;
 
   if (((uintptr_t) e.__type_descriptor & reflectFlags) != 0)
-    __go_panic_msg ("invalid interface value");
+    runtime_panicstring ("invalid interface value");
 
   if (e.__type_descriptor == NULL)
     {
@@ -170,7 +170,7 @@
   struct __go_empty_interface ret;
 
   if (((uintptr_t) e.__type_descriptor & reflectFlags) != 0)
-    __go_panic_msg ("invalid interface value");
+    runtime_panicstring ("invalid interface value");
 
   if (e.__type_descriptor == NULL)
     {
diff -r 3992ad49b04e libgo/runtime/go-runtime-error.c
--- a/libgo/runtime/go-runtime-error.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-runtime-error.c	Tue Nov 29 16:15:43 2011 -0800
@@ -4,7 +4,7 @@
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.  */
 
-#include "go-panic.h"
+#include "runtime.h"
 
 /* The compiler generates calls to this function.  This enum values
    are known to the compiler and used by compiled code.  Any change
@@ -59,26 +59,26 @@
     case SLICE_INDEX_OUT_OF_BOUNDS:
     case ARRAY_INDEX_OUT_OF_BOUNDS:
     case STRING_INDEX_OUT_OF_BOUNDS:
-      __go_panic_msg ("index out of range");
+      runtime_panicstring ("index out of range");
 
     case SLICE_SLICE_OUT_OF_BOUNDS:
     case ARRAY_SLICE_OUT_OF_BOUNDS:
     case STRING_SLICE_OUT_OF_BOUNDS:
-      __go_panic_msg ("slice bounds out of range");
+      runtime_panicstring ("slice bounds out of range");
 
     case NIL_DEREFERENCE:
-      __go_panic_msg ("nil pointer dereference");
+      runtime_panicstring ("nil pointer dereference");
 
     case MAKE_SLICE_OUT_OF_BOUNDS:
-      __go_panic_msg ("make slice len or cap out of range");
+      runtime_panicstring ("make slice len or cap out of range");
 
     case MAKE_MAP_OUT_OF_BOUNDS:
-      __go_panic_msg ("make map len out of range");
+      runtime_panicstring ("make map len out of range");
 
     case MAKE_CHAN_OUT_OF_BOUNDS:
-      __go_panic_msg ("make chan len out of range");
+      runtime_panicstring ("make chan len out of range");
 
     default:
-      __go_panic_msg ("unknown runtime error");
+      runtime_panicstring ("unknown runtime error");
     }
 }
diff -r 3992ad49b04e libgo/runtime/go-send-nb-small.c
--- a/libgo/runtime/go-send-nb-small.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-send-nb-small.c	Tue Nov 29 16:15:43 2011 -0800
@@ -31,7 +31,7 @@
     {
       i = pthread_mutex_unlock (&channel->lock);
       __go_assert (i == 0);
-      __go_panic_msg ("send on closed channel");
+      runtime_panicstring ("send on closed channel");
     }
 
   if (channel->num_entries > 0)
diff -r 3992ad49b04e libgo/runtime/go-send-small.c
--- a/libgo/runtime/go-send-small.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-send-small.c	Tue Nov 29 16:15:43 2011 -0800
@@ -31,7 +31,7 @@
 	    channel->selected_for_send = 0;
 	  i = pthread_mutex_unlock (&channel->lock);
 	  __go_assert (i == 0);
-	  __go_panic_msg ("send on closed channel");
+	  runtime_panicstring ("send on closed channel");
 	}
 
       /* If somebody else has the channel locked for sending, we have
diff -r 3992ad49b04e libgo/runtime/go-signal.c
--- a/libgo/runtime/go-signal.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-signal.c	Tue Nov 29 16:15:43 2011 -0800
@@ -178,7 +178,7 @@
       i = sigprocmask (SIG_UNBLOCK, &clear, NULL);
       __go_assert (i == 0);
 
-      __go_panic_msg (msg);
+      runtime_panicstring (msg);
     }
 
   for (i = 0; signals[i].sig != -1; ++i)
diff -r 3992ad49b04e libgo/runtime/go-strslice.c
--- a/libgo/runtime/go-strslice.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-strslice.c	Tue Nov 29 16:15:43 2011 -0800
@@ -20,7 +20,7 @@
   if (end == -1)
     end = len;
   if (start > len || end < start || end > len)
-    __go_panic_msg ("string index out of bounds");
+    runtime_panicstring ("string index out of bounds");
   ret.__data = s.__data + start;
   ret.__length = end - start;
   return ret;
diff -r 3992ad49b04e libgo/runtime/go-type-eface.c
--- a/libgo/runtime/go-type-eface.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-type-eface.c	Tue Nov 29 16:15:43 2011 -0800
@@ -4,8 +4,8 @@
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.  */
 
+#include "runtime.h"
 #include "interface.h"
-#include "go-panic.h"
 #include "go-type.h"
 
 /* A hash function for an empty interface.  */
@@ -46,7 +46,7 @@
   v2_descriptor = v2->__type_descriptor;
   if (((uintptr_t) v1_descriptor & reflectFlags) != 0
       || ((uintptr_t) v2_descriptor & reflectFlags) != 0)
-    __go_panic_msg ("invalid interface value");
+    runtime_panicstring ("invalid interface value");
   if (v1_descriptor == NULL || v2_descriptor == NULL)
     return v1_descriptor == v2_descriptor;
   if (!__go_type_descriptors_equal (v1_descriptor, v2_descriptor))
diff -r 3992ad49b04e libgo/runtime/go-type-error.c
--- a/libgo/runtime/go-type-error.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-type-error.c	Tue Nov 29 16:15:43 2011 -0800
@@ -4,8 +4,8 @@
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.  */
 
+#include "runtime.h"
 #include "go-type.h"
-#include "go-panic.h"
 
 /* A hash function used for a type which does not support hash
    functions.  */
@@ -14,7 +14,7 @@
 __go_type_hash_error (const void *val __attribute__ ((unused)),
 		      size_t key_size __attribute__ ((unused)))
 {
-  __go_panic_msg ("hash of unhashable type");
+  runtime_panicstring ("hash of unhashable type");
 }
 
 /* An equality function for an interface.  */
@@ -24,5 +24,5 @@
 		       const void *v2 __attribute__ ((unused)),
 		       size_t key_size __attribute__ ((unused)))
 {
-  __go_panic_msg ("comparing uncomparable types");
+  runtime_panicstring ("comparing uncomparable types");
 }
diff -r 3992ad49b04e libgo/runtime/go-unreflect.c
--- a/libgo/runtime/go-unreflect.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-unreflect.c	Tue Nov 29 16:15:43 2011 -0800
@@ -4,8 +4,8 @@
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.  */
 
+#include "runtime.h"
 #include "go-alloc.h"
-#include "go-panic.h"
 #include "go-type.h"
 #include "interface.h"
 
@@ -21,7 +21,7 @@
   struct __go_empty_interface ret;
 
   if (((uintptr_t) type.__type_descriptor & reflectFlags) != 0)
-    __go_panic_msg ("invalid interface value");
+    runtime_panicstring ("invalid interface value");
 
   /* FIXME: We should check __type_descriptor to verify that this is
      really a type descriptor.  */
diff -r 3992ad49b04e libgo/runtime/go-unsafe-new.c
--- a/libgo/runtime/go-unsafe-new.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-unsafe-new.c	Tue Nov 29 16:15:43 2011 -0800
@@ -4,8 +4,8 @@
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.  */
 
+#include "runtime.h"
 #include "go-alloc.h"
-#include "go-panic.h"
 #include "go-type.h"
 #include "interface.h"
 
@@ -22,7 +22,7 @@
   const struct __go_type_descriptor *descriptor;
 
   if (((uintptr_t) type.__type_descriptor & reflectFlags) != 0)
-    __go_panic_msg ("invalid interface value");
+    runtime_panicstring ("invalid interface value");
 
   /* FIXME: We should check __type_descriptor to verify that this is
      really a type descriptor.  */
diff -r 3992ad49b04e libgo/runtime/go-unsafe-newarray.c
--- a/libgo/runtime/go-unsafe-newarray.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/go-unsafe-newarray.c	Tue Nov 29 16:15:43 2011 -0800
@@ -4,8 +4,8 @@
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.  */
 
+#include "runtime.h"
 #include "go-alloc.h"
-#include "go-panic.h"
 #include "go-type.h"
 #include "interface.h"
 
@@ -23,7 +23,7 @@
   const struct __go_type_descriptor *descriptor;
 
   if (((uintptr_t) type.__type_descriptor & reflectFlags) != 0)
-    __go_panic_msg ("invalid interface value");
+    runtime_panicstring ("invalid interface value");
 
   /* FIXME: We should check __type_descriptor to verify that this is
      really a type descriptor.  */
diff -r 3992ad49b04e libgo/runtime/iface.goc
--- a/libgo/runtime/iface.goc	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/iface.goc	Tue Nov 29 16:15:43 2011 -0800
@@ -3,12 +3,10 @@
 // license that can be found in the LICENSE file.
 
 package runtime
-#include "go-panic.h"
+#include "runtime.h"
 #include "go-type.h"
 #include "interface.h"
-#define nil NULL
 
-typedef _Bool bool;
 typedef struct __go_type_descriptor descriptor;
 typedef const struct __go_type_descriptor const_descriptor;
 typedef struct __go_interface interface;
@@ -35,7 +33,7 @@
 // Convert an empty interface to an empty interface.
 func ifaceE2E2(e empty_interface) (ret empty_interface, ok bool) {
 	if(((uintptr_t)e.__type_descriptor&reflectFlags) != 0)
-		__go_panic_msg("invalid interface value");
+		runtime_panicstring("invalid interface value");
 	ret = e;
 	ok = ret.__type_descriptor != nil;
 }
@@ -56,7 +54,7 @@
 // Convert an empty interface to a non-empty interface.
 func ifaceE2I2(inter *descriptor, e empty_interface) (ret interface, ok bool) {
 	if(((uintptr_t)e.__type_descriptor&reflectFlags) != 0)
-		__go_panic_msg("invalid interface value");
+		runtime_panicstring("invalid interface value");
 	if (e.__type_descriptor == nil) {
 		ret.__methods = nil;
 		ret.__object = nil;
@@ -87,7 +85,7 @@
 // Convert an empty interface to a pointer type.
 func ifaceE2T2P(inter *descriptor, e empty_interface) (ret *void, ok bool) {
 	if(((uintptr_t)e.__type_descriptor&reflectFlags) != 0)
-		__go_panic_msg("invalid interface value");
+		runtime_panicstring("invalid interface value");
 	if (!__go_type_descriptors_equal(inter, e.__type_descriptor)) {
 		ret = nil;
 		ok = 0;
@@ -112,7 +110,7 @@
 // Convert an empty interface to a non-pointer type.
 func ifaceE2T2(inter *descriptor, e empty_interface, ret *void) (ok bool) {
 	if(((uintptr_t)e.__type_descriptor&reflectFlags) != 0)
-		__go_panic_msg("invalid interface value");
+		runtime_panicstring("invalid interface value");
 	if (!__go_type_descriptors_equal(inter, e.__type_descriptor)) {
 		__builtin_memset(ret, 0, inter->__size);
 		ok = 0;
diff -r 3992ad49b04e libgo/runtime/malloc.goc
--- a/libgo/runtime/malloc.goc	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/malloc.goc	Tue Nov 29 16:15:43 2011 -0800
@@ -17,9 +17,6 @@
 #include "go-string.h"
 #include "interface.h"
 #include "go-type.h"
-typedef struct __go_empty_interface Eface;
-typedef struct __go_type_descriptor Type;
-typedef struct __go_func_type FuncType;
 
 MHeap runtime_mheap;
 extern MStats mstats;	// defined in extern.go
diff -r 3992ad49b04e libgo/runtime/map.goc
--- a/libgo/runtime/map.goc	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/map.goc	Tue Nov 29 16:15:43 2011 -0800
@@ -3,13 +3,9 @@
 // license that can be found in the LICENSE file.
 
 package runtime
+#include "runtime.h"
 #include "map.h"
-#define nil NULL
 
-typedef unsigned char byte;
-typedef _Bool bool;
-
-typedef struct __go_map_type MapType;
 typedef struct __go_map Hmap;
 typedef struct __go_hash_iter hiter;
 
diff -r 3992ad49b04e libgo/runtime/reflect.goc
--- a/libgo/runtime/reflect.goc	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/reflect.goc	Tue Nov 29 16:15:43 2011 -0800
@@ -8,10 +8,6 @@
 #include "runtime.h"
 #include "go-panic.h"
 
-typedef struct __go_type_descriptor Type;
-typedef struct __go_interface Iface;
-typedef struct __go_empty_interface Eface;
-
 func ifaceE2I(inter *Type, e Eface, ret *Iface) {
 	const Type *t;
 	Eface err;
diff -r 3992ad49b04e libgo/runtime/runtime.c
--- a/libgo/runtime/runtime.c	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/runtime.c	Tue Nov 29 16:15:43 2011 -0800
@@ -70,6 +70,19 @@
 	runtime_exit(1);	// even more not reached
 }
 
+void
+runtime_panicstring(const char *s)
+{
+	Eface err;
+	
+	if(runtime_m()->gcing) {
+		runtime_printf("panic: %s\n", s);
+		runtime_throw("panic during gc");
+	}
+	runtime_newErrorString(runtime_gostringnocopy((const byte*)s), &err);
+	runtime_panic(err);
+}
+
 static int32	argc;
 static byte**	argv;
 
@@ -95,7 +108,7 @@
 
 	s = runtime_malloc(argc*sizeof s[0]);
 	for(i=0; i<argc; i++)
-		s[i] = runtime_gostringnocopy((byte*)argv[i]);
+		s[i] = runtime_gostringnocopy((const byte*)argv[i]);
 	os_Args.__values = (void*)s;
 	os_Args.__count = argc;
 	os_Args.__capacity = argc;
diff -r 3992ad49b04e libgo/runtime/runtime.h
--- a/libgo/runtime/runtime.h	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/runtime.h	Tue Nov 29 16:15:43 2011 -0800
@@ -57,10 +57,16 @@
 typedef struct	FixAlloc	FixAlloc;
 
 typedef	struct	__go_defer_stack	Defer;
+typedef struct	__go_interface		Iface;
+typedef	struct	__go_empty_interface	Eface;
+typedef	struct	__go_type_descriptor	Type;
 typedef	struct	__go_panic_stack	Panic;
 typedef	struct	__go_open_array		Slice;
 typedef	struct	__go_string		String;
 
+typedef struct	__go_func_type		FuncType;
+typedef struct	__go_map_type		MapType;
+
 /*
  * per-cpu declaration.
  */
@@ -211,10 +217,11 @@
 void	runtime_goargs(void);
 void	runtime_goenvs(void);
 void	runtime_throw(const char*);
+void	runtime_panicstring(const char*) __attribute__ ((noreturn));
 void*	runtime_mal(uintptr);
 void	runtime_schedinit(void);
 void	runtime_initsig(int32);
-String	runtime_gostringnocopy(byte*);
+String	runtime_gostringnocopy(const byte*);
 void*	runtime_mstart(void*);
 G*	runtime_malg(int32, byte**, size_t*);
 void	runtime_minit(void);
@@ -274,8 +281,13 @@
 void	runtime_futexsleep(uint32*, uint32, int64);
 void	runtime_futexwakeup(uint32*, uint32);
 
+/*
+ * runtime go-called
+ */
+void	runtime_panic(Eface);
 
 /* Functions.  */
+#define runtime_panic __go_panic
 #define runtime_printf printf
 #define runtime_malloc(s) __go_alloc(s)
 #define runtime_free(p) __go_free(p)
diff -r 3992ad49b04e libgo/runtime/string.goc
--- a/libgo/runtime/string.goc	Tue Nov 29 15:00:02 2011 -0800
+++ b/libgo/runtime/string.goc	Tue Nov 29 16:15:43 2011 -0800
@@ -15,7 +15,7 @@
 }
 
 String
-runtime_gostringnocopy(byte *str)
+runtime_gostringnocopy(const byte *str)
 {
 	String s;
 	

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]