| /* go-unsafe-pointer.c -- unsafe.Pointer type descriptor for Go. | |
| Copyright 2009 The Go Authors. All rights reserved. | |
| Use of this source code is governed by a BSD-style | |
| license that can be found in the LICENSE file. */ | |
| #include <stddef.h> | |
| #include "runtime.h" | |
| /* This file provides the type descriptor for the unsafe.Pointer type. | |
| The unsafe package is defined by the compiler itself, which means | |
| that there is no package to compile to define the type | |
| descriptor. */ | |
| extern const struct _type unsafe_Pointer | |
| __asm__ (GOSYM_PREFIX "unsafe.Pointer..d"); | |
| extern const byte unsafe_Pointer_gc[] | |
| __asm__ (GOSYM_PREFIX "unsafe.Pointer..g"); | |
| /* Used to determine the field alignment. */ | |
| struct field_align | |
| { | |
| char c; | |
| void *p; | |
| }; | |
| /* The reflection string. */ | |
| #define REFLECTION "unsafe.Pointer" | |
| static const String reflection_string = | |
| { | |
| (const byte *) REFLECTION, | |
| sizeof REFLECTION - 1 | |
| }; | |
| const byte unsafe_Pointer_gc[] = { 1 }; | |
| extern const FuncVal runtime_pointerequal_descriptor | |
| __asm__ (GOSYM_PREFIX "runtime.pointerequal..f"); | |
| const struct _type unsafe_Pointer = | |
| { | |
| /* size */ | |
| sizeof (void *), | |
| /* ptrdata */ | |
| sizeof (void *), | |
| /* hash */ | |
| 78501163U, | |
| /* tflag */ | |
| tflagRegularMemory, | |
| /* align */ | |
| __alignof (void *), | |
| /* fieldAlign */ | |
| offsetof (struct field_align, p) - 1, | |
| /* kind */ | |
| kindUnsafePointer | kindDirectIface, | |
| /* equal */ | |
| &runtime_pointerequal_descriptor, | |
| /* gcdata */ | |
| unsafe_Pointer_gc, | |
| /* _string */ | |
| &reflection_string, | |
| /* uncommontype */ | |
| NULL, | |
| /* ptrToThis */ | |
| NULL | |
| }; | |
| /* We also need the type descriptor for the pointer to unsafe.Pointer, | |
| since any package which refers to that type descriptor will expect | |
| it to be defined elsewhere. */ | |
| extern const struct ptrtype pointer_unsafe_Pointer | |
| __asm__ (GOSYM_PREFIX "unsafe.Pointer..p"); | |
| /* The reflection string. */ | |
| #define PREFLECTION "*unsafe.Pointer" | |
| static const String preflection_string = | |
| { | |
| (const byte *) PREFLECTION, | |
| sizeof PREFLECTION - 1, | |
| }; | |
| extern const byte pointer_unsafe_Pointer_gc[] | |
| __asm__ (GOSYM_PREFIX "unsafe.Pointer..p..g"); | |
| const byte pointer_unsafe_Pointer_gc[] = { 1 }; | |
| const struct ptrtype pointer_unsafe_Pointer = | |
| { | |
| /* type */ | |
| { | |
| /* size */ | |
| sizeof (void *), | |
| /* ptrdata */ | |
| sizeof (void *), | |
| /* hash */ | |
| 1256018616U, | |
| /* tflag */ | |
| tflagRegularMemory, | |
| /* align */ | |
| __alignof (void *), | |
| /* fieldAlign */ | |
| offsetof (struct field_align, p) - 1, | |
| /* kind */ | |
| kindPtr | kindDirectIface, | |
| /* equalfn */ | |
| &runtime_pointerequal_descriptor, | |
| /* gcdata */ | |
| pointer_unsafe_Pointer_gc, | |
| /* _string */ | |
| &preflection_string, | |
| /* uncommontype */ | |
| NULL, | |
| /* ptrToThis */ | |
| NULL | |
| }, | |
| /* elem */ | |
| &unsafe_Pointer | |
| }; |