aboutsummaryrefslogtreecommitdiffstats
path: root/community/go-bootstrap/fix-arm-hackery.patch
diff options
context:
space:
mode:
authorEivind Uggedal <eivind@uggedal.com>2015-09-30 08:31:12 +0000
committerEivind Uggedal <eivind@uggedal.com>2015-09-30 08:31:12 +0000
commitd241a682bb4bff9b2247c8003e3f086ffb92cd6e (patch)
tree652696333c77c864936204de3dd32505f9d26b83 /community/go-bootstrap/fix-arm-hackery.patch
parent394aeb733e12eef9fc309fb8753c28d6095f4551 (diff)
downloadaports-d241a682bb4bff9b2247c8003e3f086ffb92cd6e.tar.bz2
aports-d241a682bb4bff9b2247c8003e3f086ffb92cd6e.tar.xz
community/go-bootstrap: moved from main
Diffstat (limited to 'community/go-bootstrap/fix-arm-hackery.patch')
-rw-r--r--community/go-bootstrap/fix-arm-hackery.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/community/go-bootstrap/fix-arm-hackery.patch b/community/go-bootstrap/fix-arm-hackery.patch
new file mode 100644
index 0000000000..f5a447264c
--- /dev/null
+++ b/community/go-bootstrap/fix-arm-hackery.patch
@@ -0,0 +1,98 @@
+--- go/src/cmd/dist/arm.c
++++ go.fixed/src/cmd/dist/arm.c
+@@ -11,8 +11,8 @@
+ return "6";
+ }
+ #else
+-static void useVFPv3(void);
+-static void useVFPv1(void);
++void useVFPv3(void);
++void useVFPv1(void);
+
+ char *
+ xgetgoarm(void)
+@@ -26,46 +26,6 @@
+ else if(xtryexecfunc(useVFPv1))
+ return "6";
+ return "5";
+-}
+-
+-static void
+-useVFPv3(void)
+-{
+- // try to run VFPv3-only "vmov.f64 d0, #112" instruction
+- // we can't use that instruction directly, because we
+- // might be compiling with a soft-float only toolchain.
+- //
+- // some newer toolchains are configured to use thumb
+- // by default, so we need to do some mode changing magic
+- // here.
+- // We can use "bx pc; nop" here, but GNU as(1) insists
+- // on warning us
+- // "use of r15 in bx in ARM mode is not really useful"
+- // so we workaround that by using "bx r0"
+- __asm__ __volatile__ ("mov r0, pc");
+- __asm__ __volatile__ ("bx r0");
+- __asm__ __volatile__ (".word 0xeeb70b00"); // vmov.f64 d0, #112
+- __asm__ __volatile__ (".word 0xe12fff1e"); // bx lr
+-}
+-
+-static void
+-useVFPv1(void)
+-{
+- // try to run "vmov.f64 d0, d0" instruction
+- // we can't use that instruction directly, because we
+- // might be compiling with a soft-float only toolchain
+- //
+- // some newer toolchains are configured to use thumb
+- // by default, so we need to do some mode changing magic
+- // here.
+- // We can use "bx pc; nop" here, but GNU as(1) insists
+- // on warning us
+- // "use of r15 in bx in ARM mode is not really useful"
+- // so we workaround that by using "bx r0"
+- __asm__ __volatile__ ("mov r0, pc");
+- __asm__ __volatile__ ("bx r0");
+- __asm__ __volatile__ (".word 0xeeb00b40"); // vomv.f64 d0, d0
+- __asm__ __volatile__ (".word 0xe12fff1e"); // bx lr
+ }
+
+ #endif
+--- go/src/make.bash
++++ go.fixed/src/make.bash
+@@ -129,7 +132,7 @@
+ if [ -z "$CC" -a -z "$(type -t gcc)" -a -n "$(type -t clang)" ]; then
+ export CC=clang CXX=clang++
+ fi
+-${CC:-gcc} $mflag -O2 -Wall -Werror -o cmd/dist/dist -Icmd/dist "$DEFGOROOT" cmd/dist/*.c
++${CC:-gcc} $mflag -O2 -Wall -Werror -o cmd/dist/dist -Icmd/dist "$DEFGOROOT" cmd/dist/*.c cmd/dist/*.S
+
+ # -e doesn't propagate out of eval, so check success by hand.
+ eval $(./cmd/dist/dist env -p || echo FAIL=true)
+--- /dev/null 2014-12-09 07:52:31.203329541 -0200
++++ go.fixed/src/cmd/dist/arm.S 2014-12-09 10:29:34.149969243 -0200
+@@ -0,0 +1,24 @@
++#ifdef __ARMEL__
++
++.text
++
++.global useVFPv3
++.hidden useVFPv3
++.type useVFPv3,%function
++useVFPv3:
++ mov r0, pc
++ bx r0
++ .word 0xeeb70b00 // vmov.f64 d0, #112
++ .word 0xe12fff1e // bx lr
++
++
++.global useVFPv1
++.hidden useVFPv1
++.type useVFPv1,%function
++useVFPv1:
++ mov r0, pc
++ bx r0
++ .word 0xeeb00b40 // vomv.f64 d0, d0
++ .word 0xe12fff1e // bx lr
++
++#endif