docs(android): an arm64 image will not run on an x86_64 host
Build & publish Arch package / arch-package (push) Successful in 2m32s
Search index maintenance / maintain-index (push) Successful in 7s
Sync Homebrew formula / sync-formula (push) Successful in 6s
CI / e2e (push) Successful in 5m42s
CI / check (push) Successful in 2m22s
Build & publish the Android APK / apk (push) Failing after 50s
Build & publish Arch package / arch-package (push) Successful in 2m32s
Search index maintenance / maintain-index (push) Successful in 7s
Sync Homebrew formula / sync-formula (push) Successful in 6s
CI / e2e (push) Successful in 5m42s
CI / check (push) Successful in 2m22s
Build & publish the Android APK / apk (push) Failing after 50s
Emulator 37 refuses cross-architecture emulation outright -- "Avd's CPU Architecture 'arm64' is not supported by the QEMU2 emulator on x86_64 host" -- and there is no flag for it. Google dropped it. That matters because the previous commit's finding points at arm64 as the ABI that works, so the obvious next move is to boot an arm64 AVD, and the obvious next move costs a 3.8 GB download before it fails. Written down so the next session does not spend it. The consequence is stated rather than hidden: the claim that arm64 avoids the seccomp trap rests on reading modernc's two code paths, not on having run it. Verifying it needs an arm64 host, a physical device or adb connect.
This commit is contained in:
@@ -118,10 +118,22 @@ Android permits. `grep -c SYS_LSTAT ccgo_linux_arm64.go` is 0. Go's own
|
||||
`syscall` package already uses `fstatat` on both architectures, which
|
||||
is why this is *only* the modernc path.
|
||||
|
||||
So: **verify on arm64, not on the default emulator.** Use an
|
||||
`arm64-v8a` system image (slow on an x86_64 host — it is full software
|
||||
emulation) or a real device. `make android-smoke` on an x86_64 AVD will
|
||||
report a `SIGSYS` tombstone that says nothing about your change.
|
||||
So: **verify on arm64, and on this machine that means a real device.**
|
||||
`make android-smoke` on an x86_64 AVD reports a `SIGSYS` tombstone that
|
||||
says nothing about your change.
|
||||
|
||||
**Do not reach for an arm64 system image — it will not run here, and
|
||||
finding that out costs a 3.8 GB download.** Emulator 37 refuses
|
||||
outright:
|
||||
|
||||
```
|
||||
FATAL | Avd's CPU Architecture 'arm64' is not supported by the QEMU2
|
||||
emulator on x86_64 host. System image must match the host
|
||||
architecture.
|
||||
```
|
||||
|
||||
Google dropped cross-architecture emulation; there is no flag. The
|
||||
options are an arm64 host, a physical device, or `adb connect` to one.
|
||||
|
||||
Two consequences worth holding onto. The x86_64 half of the fat APK is
|
||||
*only* useful for emulators, and cannot work on any Android until
|
||||
|
||||
@@ -2643,3 +2643,19 @@ Three consequences:
|
||||
Worth knowing for anything else that reaches for a pure-Go C library:
|
||||
this class of bug is invisible to every build and every desktop test,
|
||||
and appears only under a platform's syscall filter.
|
||||
|
||||
### …and the arm64 emulator is not an option on an x86_64 host
|
||||
|
||||
Emulator 37.1.11 refuses outright, after the 3.8 GB image download:
|
||||
|
||||
```
|
||||
FATAL | Avd's CPU Architecture 'arm64' is not supported by the QEMU2
|
||||
emulator on x86_64 host. System image must match the host
|
||||
architecture.
|
||||
```
|
||||
|
||||
Google dropped cross-architecture emulation and there is no flag for
|
||||
it. So the arm64 claim above rests on reading modernc's two code paths,
|
||||
not on having run it: verifying the shipped ABI needs an arm64 host, a
|
||||
physical device, or `adb connect` to one. The image was deleted again;
|
||||
do not re-download it.
|
||||
|
||||
Reference in New Issue
Block a user