Commit f419b563 authored by Elias Naur's avatar Elias Naur

runtime: skip floating point hardware check on Android

CL 33652 removed the fake auxv for Android, and replaced it with
a /proc/self/auxv fallback. When /proc/self/auxv is unreadable,
however, hardware capabilities detection won't work and the runtime
will mistakenly think that floating point hardware is unavailable.

Fix this by always assuming floating point hardware on Android.

Manually tested on a Nexus 5 running Android 6.0.1. I suspect the
android/arm builder has a readable /proc/self/auxv and therefore
does not trigger the failure mode.

Change-Id: I95c3873803f9e17333c6cb8b9ff2016723104085
Reviewed-on: https://go-review.googlesource.com/34641Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: 's avatarMinux Ma <minux@golang.org>
Run-TryBot: Elias Naur <elias.naur@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 17190343
...@@ -18,6 +18,12 @@ var armArch uint8 = 6 // we default to ARMv6 ...@@ -18,6 +18,12 @@ var armArch uint8 = 6 // we default to ARMv6
var hwcap uint32 // set by setup_auxv var hwcap uint32 // set by setup_auxv
func checkgoarm() { func checkgoarm() {
// On Android, /proc/self/auxv might be unreadable and hwcap won't
// reflect the CPU capabilities. Assume that every Android arm device
// has the necessary floating point hardware available.
if GOOS == "android" {
return
}
if goarm > 5 && hwcap&_HWCAP_VFP == 0 { if goarm > 5 && hwcap&_HWCAP_VFP == 0 {
print("runtime: this CPU has no floating point hardware, so it cannot run\n") print("runtime: this CPU has no floating point hardware, so it cannot run\n")
print("this GOARM=", goarm, " binary. Recompile using GOARM=5.\n") print("this GOARM=", goarm, " binary. Recompile using GOARM=5.\n")
......
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