OSDN Git Service

2012-05-12 Tobias Burnus <burnus@net-b.de>
[pf3gnuchains/gcc-fork.git] / libgo / runtime / go-cgo.c
1 /* go-cgo.c -- SWIG support routines for libgo.
2
3    Copyright 2011 The Go Authors. All rights reserved.
4    Use of this source code is governed by a BSD-style
5    license that can be found in the LICENSE file.  */
6
7 #include "go-alloc.h"
8 #include "interface.h"
9 #include "go-panic.h"
10 #include "go-string.h"
11
12 /* These are routines used by SWIG.  The gc runtime library provides
13    the same routines under the same name, though in that case the code
14    is required to import runtime/cgo.  */
15
16 void *
17 _cgo_allocate (size_t n)
18 {
19   return __go_alloc (n);
20 }
21
22 extern const struct __go_type_descriptor string_type_descriptor
23   asm ("__go_tdn_string");
24
25 void
26 _cgo_panic (const char *p)
27 {
28   int len;
29   unsigned char *data;
30   struct __go_string *ps;
31   struct __go_empty_interface e;
32
33   len = __builtin_strlen (p);
34   data = __go_alloc (len);
35   __builtin_memcpy (data, p, len);
36   ps = __go_alloc (sizeof *ps);
37   ps->__data = data;
38   ps->__length = len;
39   e.__type_descriptor = &string_type_descriptor;
40   e.__object = ps;
41   __go_panic (e);
42 }