annotate libgo/runtime/go-unsafe-pointer.c @ 138:fc828634a951

merge
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 08 Nov 2018 14:17:14 +0900
parents 84e7813d76e9
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* go-unsafe-pointer.c -- unsafe.Pointer type descriptor for Go.
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 Copyright 2009 The Go Authors. All rights reserved.
kono
parents:
diff changeset
4 Use of this source code is governed by a BSD-style
kono
parents:
diff changeset
5 license that can be found in the LICENSE file. */
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 #include <stddef.h>
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 #include "runtime.h"
kono
parents:
diff changeset
10 #include "go-type.h"
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 /* This file provides the type descriptor for the unsafe.Pointer type.
kono
parents:
diff changeset
13 The unsafe package is defined by the compiler itself, which means
kono
parents:
diff changeset
14 that there is no package to compile to define the type
kono
parents:
diff changeset
15 descriptor. */
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 extern const struct __go_type_descriptor unsafe_Pointer
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
18 __asm__ (GOSYM_PREFIX "unsafe.Pointer..d");
111
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 extern const byte unsafe_Pointer_gc[]
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
21 __asm__ (GOSYM_PREFIX "unsafe.Pointer..g");
111
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 /* Used to determine the field alignment. */
kono
parents:
diff changeset
24 struct field_align
kono
parents:
diff changeset
25 {
kono
parents:
diff changeset
26 char c;
kono
parents:
diff changeset
27 void *p;
kono
parents:
diff changeset
28 };
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 /* The reflection string. */
kono
parents:
diff changeset
31 #define REFLECTION "unsafe.Pointer"
kono
parents:
diff changeset
32 static const String reflection_string =
kono
parents:
diff changeset
33 {
kono
parents:
diff changeset
34 (const byte *) REFLECTION,
kono
parents:
diff changeset
35 sizeof REFLECTION - 1
kono
parents:
diff changeset
36 };
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 const byte unsafe_Pointer_gc[] = { 1 };
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 extern const FuncVal runtime_pointerhash_descriptor
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
41 __asm__ (GOSYM_PREFIX "runtime.pointerhash..f");
111
kono
parents:
diff changeset
42 extern const FuncVal runtime_pointerequal_descriptor
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
43 __asm__ (GOSYM_PREFIX "runtime.pointerequal..f");
111
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 const struct __go_type_descriptor unsafe_Pointer =
kono
parents:
diff changeset
46 {
kono
parents:
diff changeset
47 /* __size */
kono
parents:
diff changeset
48 sizeof (void *),
kono
parents:
diff changeset
49 /* __ptrdata */
kono
parents:
diff changeset
50 sizeof (void *),
kono
parents:
diff changeset
51 /* __hash */
kono
parents:
diff changeset
52 78501163U,
kono
parents:
diff changeset
53 /* __code */
kono
parents:
diff changeset
54 GO_UNSAFE_POINTER | GO_DIRECT_IFACE,
kono
parents:
diff changeset
55 /* __align */
kono
parents:
diff changeset
56 __alignof (void *),
kono
parents:
diff changeset
57 /* __field_align */
kono
parents:
diff changeset
58 offsetof (struct field_align, p) - 1,
kono
parents:
diff changeset
59 /* __hashfn */
kono
parents:
diff changeset
60 &runtime_pointerhash_descriptor,
kono
parents:
diff changeset
61 /* __equalfn */
kono
parents:
diff changeset
62 &runtime_pointerequal_descriptor,
kono
parents:
diff changeset
63 /* __gcdata */
kono
parents:
diff changeset
64 unsafe_Pointer_gc,
kono
parents:
diff changeset
65 /* __reflection */
kono
parents:
diff changeset
66 &reflection_string,
kono
parents:
diff changeset
67 /* __uncommon */
kono
parents:
diff changeset
68 NULL,
kono
parents:
diff changeset
69 /* __pointer_to_this */
kono
parents:
diff changeset
70 NULL
kono
parents:
diff changeset
71 };
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 /* We also need the type descriptor for the pointer to unsafe.Pointer,
kono
parents:
diff changeset
74 since any package which refers to that type descriptor will expect
kono
parents:
diff changeset
75 it to be defined elsewhere. */
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77 extern const struct __go_ptr_type pointer_unsafe_Pointer
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
78 __asm__ (GOSYM_PREFIX "type...1unsafe.Pointer");
111
kono
parents:
diff changeset
79
kono
parents:
diff changeset
80 /* The reflection string. */
kono
parents:
diff changeset
81 #define PREFLECTION "*unsafe.Pointer"
kono
parents:
diff changeset
82 static const String preflection_string =
kono
parents:
diff changeset
83 {
kono
parents:
diff changeset
84 (const byte *) PREFLECTION,
kono
parents:
diff changeset
85 sizeof PREFLECTION - 1,
kono
parents:
diff changeset
86 };
kono
parents:
diff changeset
87
kono
parents:
diff changeset
88 extern const byte pointer_unsafe_Pointer_gc[]
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
89 __asm__ (GOSYM_PREFIX "type...1unsafe.Pointer..g");
111
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 const byte pointer_unsafe_Pointer_gc[] = { 1 };
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 const struct __go_ptr_type pointer_unsafe_Pointer =
kono
parents:
diff changeset
94 {
kono
parents:
diff changeset
95 /* __common */
kono
parents:
diff changeset
96 {
kono
parents:
diff changeset
97 /* __size */
kono
parents:
diff changeset
98 sizeof (void *),
kono
parents:
diff changeset
99 /* __ptrdata */
kono
parents:
diff changeset
100 sizeof (void *),
kono
parents:
diff changeset
101 /* __hash */
kono
parents:
diff changeset
102 1256018616U,
kono
parents:
diff changeset
103 /* __code */
kono
parents:
diff changeset
104 GO_PTR | GO_DIRECT_IFACE,
kono
parents:
diff changeset
105 /* __align */
kono
parents:
diff changeset
106 __alignof (void *),
kono
parents:
diff changeset
107 /* __field_align */
kono
parents:
diff changeset
108 offsetof (struct field_align, p) - 1,
kono
parents:
diff changeset
109 /* __hashfn */
kono
parents:
diff changeset
110 &runtime_pointerhash_descriptor,
kono
parents:
diff changeset
111 /* __equalfn */
kono
parents:
diff changeset
112 &runtime_pointerequal_descriptor,
kono
parents:
diff changeset
113 /* __gcdata */
kono
parents:
diff changeset
114 pointer_unsafe_Pointer_gc,
kono
parents:
diff changeset
115 /* __reflection */
kono
parents:
diff changeset
116 &preflection_string,
kono
parents:
diff changeset
117 /* __uncommon */
kono
parents:
diff changeset
118 NULL,
kono
parents:
diff changeset
119 /* __pointer_to_this */
kono
parents:
diff changeset
120 NULL
kono
parents:
diff changeset
121 },
kono
parents:
diff changeset
122 /* __element_type */
kono
parents:
diff changeset
123 &unsafe_Pointer
kono
parents:
diff changeset
124 };