1
0
mirror of https://github.com/golang/go synced 2024-10-04 00:31:23 -06:00
go/src/runtime/cgo
Dave Cheney d1b2913710 runtime/cgo: encode BLX directly, fixes one clang build error on arm
Fixes #8348.

Trying to work around clang's dodgy support for .arch by reverting to the external assembler didn't work out so well. Minux had a much better solution to encode the instructions we need as .word directives which avoids .arch altogether.

I've confirmed with gdb that this form produces the expected machine code

Dump of assembler code for function crosscall_arm1:
   0x00000000 <+0>:	push	{r4, r5, r6, r7, r8, r9, r10, r11, r12, lr}
   0x00000004 <+4>:	mov	r4, r0
   0x00000008 <+8>:	mov	r5, r1
   0x0000000c <+12>:	mov	r0, r2
   0x00000010 <+16>:	blx	r5
   0x00000014 <+20>:	blx	r4
   0x00000018 <+24>:	pop	{r4, r5, r6, r7, r8, r9, r10, r11, r12, pc}

There is another compilation failure that blocks building Go with clang on arm

# ../misc/cgo/test
# _/home/dfc/go/misc/cgo/test
/tmp/--407b12.s: Assembler messages:
/tmp/--407b12.s:59: Error: selected processor does not support ARM mode `blx r0'
clang: error: assembler command failed with exit code 1 (use -v to see invocation)
FAIL	_/home/dfc/go/misc/cgo/test [build failed]

I'll open a new issue for that

LGTM=iant
R=iant, minux
CC=golang-codereviews
https://golang.org/cl/158180047
2014-10-22 12:30:15 +11:00
..
asm_386.s
asm_amd64.s
asm_arm.s
asm_nacl_amd64p32.s
callbacks.c runtime: add load_g call in arm callback. 2014-09-25 08:37:04 -07:00
cgo.go
dragonfly.c runtime: more NOPTR 2014-09-24 17:50:44 -04:00
freebsd.c runtime: more NOPTR 2014-09-24 17:50:44 -04:00
gcc_386.S
gcc_amd64.S
gcc_android_arm.c
gcc_android.c
gcc_arm.S runtime/cgo: encode BLX directly, fixes one clang build error on arm 2014-10-22 12:30:15 +11:00
gcc_darwin_386.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_darwin_amd64.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_dragonfly_386.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_dragonfly_amd64.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_fatalf.c
gcc_freebsd_386.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_freebsd_amd64.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_freebsd_arm.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_linux_386.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_linux_amd64.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_linux_arm.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_netbsd_386.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_netbsd_amd64.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_netbsd_arm.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_openbsd_386.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_openbsd_amd64.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_setenv.c os, syscall: add Unsetenv 2014-10-01 11:17:15 -07:00
gcc_util.c
gcc_windows_386.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
gcc_windows_amd64.c runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
iscgo.c
libcgo.h runtime: assume precisestack, copystack, StackCopyAlways, ScanStackByFrames 2014-09-09 13:39:57 -04:00
netbsd.c runtime: more NOPTR 2014-09-24 17:50:44 -04:00
openbsd.c runtime: more NOPTR 2014-09-24 17:50:44 -04:00
setenv.c os, syscall: add Unsetenv 2014-10-01 11:17:15 -07:00