diff options
author | Shenghou Ma <minux.ma@gmail.com> | 2014-04-21 00:08:59 -0400 |
---|---|---|
committer | Shenghou Ma <minux.ma@gmail.com> | 2014-04-21 00:08:59 -0400 |
commit | f87c24c8d5844b3eee18d95988ffc61eb5d64204 (patch) | |
tree | 684c0040a649b36fd85e96c6528d29a60a5de463 | |
parent | 211545311415e5a3d05c8253eef64e822fdd34a9 (diff) | |
download | go-f87c24c8d5844b3eee18d95988ffc61eb5d64204.tar.gz |
runtime, cmd/ld, cmd/5l, run.bash: enable external linking on FreeBSD/ARM.
Update issue 7331
LGTM=dave, iant
R=golang-codereviews, dave, gobot, iant
CC=golang-codereviews
https://codereview.appspot.com/89520043
-rw-r--r-- | src/cmd/5l/obj.c | 1 | ||||
-rw-r--r-- | src/cmd/ld/elf.c | 4 | ||||
-rw-r--r-- | src/pkg/runtime/rt0_freebsd_arm.s | 5 | ||||
-rwxr-xr-x | src/run.bash | 7 |
4 files changed, 14 insertions, 3 deletions
diff --git a/src/cmd/5l/obj.c b/src/cmd/5l/obj.c index a866b1f69..86a0ece2e 100644 --- a/src/cmd/5l/obj.c +++ b/src/cmd/5l/obj.c @@ -62,6 +62,7 @@ archinit(void) sysfatal("cannot use -linkmode=external with -H %s", headstr(HEADTYPE)); break; case Hlinux: + case Hfreebsd: break; } diff --git a/src/cmd/ld/elf.c b/src/cmd/ld/elf.c index 3b0f57881..785949759 100644 --- a/src/cmd/ld/elf.c +++ b/src/cmd/ld/elf.c @@ -55,8 +55,8 @@ elfinit(void) // 32-bit architectures case '5': - // we only use EABI on linux/arm - if(HEADTYPE == Hlinux) + // we use EABI on both linux/arm and freebsd/arm. + if(HEADTYPE == Hlinux || HEADTYPE == Hfreebsd) hdr.flags = 0x5000002; // has entry point, Version5 EABI // fallthrough default: diff --git a/src/pkg/runtime/rt0_freebsd_arm.s b/src/pkg/runtime/rt0_freebsd_arm.s index d11087639..56219f899 100644 --- a/src/pkg/runtime/rt0_freebsd_arm.s +++ b/src/pkg/runtime/rt0_freebsd_arm.s @@ -11,3 +11,8 @@ TEXT _rt0_arm_freebsd(SB),NOSPLIT,$-4 MOVW $4(R13), R1 // argv MOVM.DB.W [R0-R1], (R13) B _rt0_go(SB) + +TEXT main(SB),NOSPLIT,$-4 + MOVM.DB.W [R0-R1], (R13) + MOVW $_rt0_go(SB), R4 + B (R4) diff --git a/src/run.bash b/src/run.bash index f0fb928b2..0f3e4e0f3 100755 --- a/src/run.bash +++ b/src/run.bash @@ -127,13 +127,18 @@ darwin-386 | darwin-amd64) *) go test -ldflags '-linkmode=external' || exit 1;; esac ;; -dragonfly-386 | dragonfly-amd64 | freebsd-386 | freebsd-amd64 | linux-386 | linux-amd64 | linux-arm | netbsd-386 | netbsd-amd64) +dragonfly-386 | dragonfly-amd64 | freebsd-386 | freebsd-amd64 | freebsd-arm | linux-386 | linux-amd64 | linux-arm | netbsd-386 | netbsd-amd64) go test -ldflags '-linkmode=external' || exit 1 go test -ldflags '-linkmode=auto' ../testtls || exit 1 go test -ldflags '-linkmode=external' ../testtls || exit 1 case "$GOHOSTOS-$GOARCH" in netbsd-386 | netbsd-amd64) ;; # no static linking + freebsd-arm) ;; # -fPIC compiled tls code will use __tls_get_addr instead + # of __aeabi_read_tp, however, on FreeBSD/ARM, __tls_get_addr + # is implemented in rtld-elf, so -fPIC isn't compatible with + # static linking on FreeBSD/ARM with clang. (cgo depends on + # -fPIC fundamentally.) *) go test -ldflags '-linkmode=external -extldflags "-static -pthread"' ../testtls || exit 1 ;; |