mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-11-24 21:24:25 +08:00
a01dda3c23
Overhaul the mangling scheme to avoid ambiguities if the package path contains a dot. Instead of using dot both to separate components and to mangle characters, use dot only to separate components and use underscore to mangle characters. For golang/go#41862 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/271726
122 lines
2.7 KiB
C
122 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"
|
|
|
|
/* 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
|
|
};
|