mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			125 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
| /* 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
 | |
| };
 |