Commit 092b7cfb authored by Shenghou Ma's avatar Shenghou Ma

runtime/cgo, go/build: re-enable cgo for FreeBSD/ARM.

R=dave, rsc
CC=golang-dev
https://golang.org/cl/7970043
parent 81d26e38
......@@ -262,6 +262,7 @@ var cgoEnabled = map[string]bool{
"darwin/amd64": true,
"freebsd/386": true,
"freebsd/amd64": true,
"freebsd/arm": true,
"linux/386": true,
"linux/amd64": true,
"linux/arm": true,
......
......@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
#include <sys/types.h>
#include <machine/sysarch.h>
#include <pthread.h>
#include <string.h>
#include "libcgo.h"
......@@ -22,10 +24,20 @@ void x_cgo_load_gm(void) __attribute__((naked));
void
__aeabi_read_tp(void)
{
// read @ 0xffff1000
__asm__ __volatile__ (
#ifdef ARM_TP_ADDRESS
// ARM_TP_ADDRESS is (ARM_VECTORS_HIGH + 0x1000) or 0xffff1000
// GCC inline asm doesn't provide a way to provide a constant
// to "ldr r0, =??" pseudo instruction, so we hardcode the value
// and check it with cpp.
#if ARM_TP_ADDRESS != 0xffff1000
#error Wrong ARM_TP_ADDRESS!
#endif
"ldr r0, =0xffff1000\n\t"
"ldr r0, [r0]\n\t"
#else
"mrc p15, 0, r0, c13, c0, 3\n\t"
#endif
"mov pc, lr\n\t"
);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment