| /* 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" |
| #include "go-type.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 __go_type_descriptor 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_pointerhash_descriptor |
| __asm__ (GOSYM_PREFIX "runtime.pointerhash..f"); |
| extern const FuncVal runtime_pointerequal_descriptor |
| __asm__ (GOSYM_PREFIX "runtime.pointerequal..f"); |
| |
| const struct __go_type_descriptor unsafe_Pointer = |
| { |
| /* __size */ |
| sizeof (void *), |
| /* __ptrdata */ |
| sizeof (void *), |
| /* __hash */ |
| 78501163U, |
| /* __code */ |
| GO_UNSAFE_POINTER | GO_DIRECT_IFACE, |
| /* __align */ |
| __alignof (void *), |
| /* __field_align */ |
| offsetof (struct field_align, p) - 1, |
| /* __hashfn */ |
| &runtime_pointerhash_descriptor, |
| /* __equalfn */ |
| &runtime_pointerequal_descriptor, |
| /* __gcdata */ |
| unsafe_Pointer_gc, |
| /* __reflection */ |
| &reflection_string, |
| /* __uncommon */ |
| NULL, |
| /* __pointer_to_this */ |
| 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 __go_ptr_type pointer_unsafe_Pointer |
| __asm__ (GOSYM_PREFIX "type...1unsafe.Pointer"); |
| |
| /* 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 "type...1unsafe.Pointer..g"); |
| |
| const byte pointer_unsafe_Pointer_gc[] = { 1 }; |
| |
| const struct __go_ptr_type pointer_unsafe_Pointer = |
| { |
| /* __common */ |
| { |
| /* __size */ |
| sizeof (void *), |
| /* __ptrdata */ |
| sizeof (void *), |
| /* __hash */ |
| 1256018616U, |
| /* __code */ |
| GO_PTR | GO_DIRECT_IFACE, |
| /* __align */ |
| __alignof (void *), |
| /* __field_align */ |
| offsetof (struct field_align, p) - 1, |
| /* __hashfn */ |
| &runtime_pointerhash_descriptor, |
| /* __equalfn */ |
| &runtime_pointerequal_descriptor, |
| /* __gcdata */ |
| pointer_unsafe_Pointer_gc, |
| /* __reflection */ |
| &preflection_string, |
| /* __uncommon */ |
| NULL, |
| /* __pointer_to_this */ |
| NULL |
| }, |
| /* __element_type */ |
| &unsafe_Pointer |
| }; |