mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			119 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.7 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"
 | 
						|
#include "mgc0.h"
 | 
						|
 | 
						|
/* A pointer with a zero value.  */
 | 
						|
static void *zero_pointer;
 | 
						|
 | 
						|
/* 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 "__go_tdn_unsafe.Pointer");
 | 
						|
 | 
						|
extern const uintptr unsafe_Pointer_gc[]
 | 
						|
  __asm__ (GOSYM_PREFIX "__go_tdn_unsafe.Pointer$gc");
 | 
						|
 | 
						|
/* 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 uintptr unsafe_Pointer_gc[] = {sizeof(void*), GC_APTR, 0, GC_END};
 | 
						|
 | 
						|
const struct __go_type_descriptor unsafe_Pointer =
 | 
						|
{
 | 
						|
  /* __code */
 | 
						|
  GO_UNSAFE_POINTER | GO_DIRECT_IFACE,
 | 
						|
  /* __align */
 | 
						|
  __alignof (void *),
 | 
						|
  /* __field_align */
 | 
						|
  offsetof (struct field_align, p) - 1,
 | 
						|
  /* __size */
 | 
						|
  sizeof (void *),
 | 
						|
  /* __hash */
 | 
						|
  78501163U,
 | 
						|
  /* __hashfn */
 | 
						|
  __go_type_hash_identity,
 | 
						|
  /* __equalfn */
 | 
						|
  __go_type_equal_identity,
 | 
						|
  /* __gc */
 | 
						|
  unsafe_Pointer_gc,
 | 
						|
  /* __reflection */
 | 
						|
  &reflection_string,
 | 
						|
  /* __uncommon */
 | 
						|
  NULL,
 | 
						|
  /* __pointer_to_this */
 | 
						|
  NULL,
 | 
						|
  /* __zero */
 | 
						|
  &zero_pointer
 | 
						|
};
 | 
						|
 | 
						|
/* 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 "__go_td_pN14_unsafe.Pointer");
 | 
						|
 | 
						|
/* The reflection string.  */
 | 
						|
#define PREFLECTION "*unsafe.Pointer"
 | 
						|
static const String preflection_string =
 | 
						|
{
 | 
						|
  (const byte *) PREFLECTION,
 | 
						|
  sizeof PREFLECTION - 1,
 | 
						|
};
 | 
						|
 | 
						|
const struct __go_ptr_type pointer_unsafe_Pointer =
 | 
						|
{
 | 
						|
  /* __common */
 | 
						|
  {
 | 
						|
    /* __code */
 | 
						|
    GO_PTR | GO_DIRECT_IFACE,
 | 
						|
    /* __align */
 | 
						|
    __alignof (void *),
 | 
						|
    /* __field_align */
 | 
						|
    offsetof (struct field_align, p) - 1,
 | 
						|
    /* __size */
 | 
						|
    sizeof (void *),
 | 
						|
    /* __hash */
 | 
						|
    1256018616U,
 | 
						|
    /* __hashfn */
 | 
						|
    __go_type_hash_identity,
 | 
						|
    /* __equalfn */
 | 
						|
    __go_type_equal_identity,
 | 
						|
    /* __gc */
 | 
						|
    unsafe_Pointer_gc,
 | 
						|
    /* __reflection */
 | 
						|
    &preflection_string,
 | 
						|
    /* __uncommon */
 | 
						|
    NULL,
 | 
						|
    /* __pointer_to_this */
 | 
						|
    NULL,
 | 
						|
    /* __zero */
 | 
						|
    &zero_pointer
 | 
						|
  },
 | 
						|
  /* __element_type */
 | 
						|
  &unsafe_Pointer
 | 
						|
};
 |