Skip to content

Commit

Permalink
runtime, cmd/ld, cmd/5l, run.bash: enable external linking on FreeBSD…
Browse files Browse the repository at this point in the history
…/ARM.

Update #7331

LGTM=dave, iant
R=golang-codereviews, dave, gobot, iant
CC=golang-codereviews
https://golang.org/cl/89520043
  • Loading branch information
minux committed Apr 21, 2014
1 parent 9ba153e commit d31d197
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 3 deletions.
1 change: 1 addition & 0 deletions src/cmd/5l/obj.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ archinit(void)
sysfatal("cannot use -linkmode=external with -H %s", headstr(HEADTYPE));
break;
case Hlinux:
case Hfreebsd:
break;
}

Expand Down
4 changes: 2 additions & 2 deletions src/cmd/ld/elf.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
5 changes: 5 additions & 0 deletions src/pkg/runtime/rt0_freebsd_arm.s
Original file line number Diff line number Diff line change
Expand Up @@ -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)
7 changes: 6 additions & 1 deletion src/run.bash
Original file line number Diff line number Diff line change
Expand Up @@ -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
;;
Expand Down

0 comments on commit d31d197

Please sign in to comment.