summary refs log tree commit diff stats
path: root/results/classifier/zero-shot/105/graphic/1623020
blob: 0587e0a3a0c510def6eaf91e9f2b862a452d2e69 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
graphic: 0.882
semantic: 0.862
instruction: 0.824
device: 0.822
other: 0.816
socket: 0.810
vnc: 0.777
network: 0.777
mistranslation: 0.771
KVM: 0.757
assembly: 0.737
boot: 0.691

emulate amd64 binary on arm7 host

I'm trying to run a Go program compiled for amd64 on a Raspberry Pi. Here is an example :

===
// main.go
package main

func main() {
	println("hello world")
}
===

Then here is the output I'm getting :

===
> GOARCH=amd64 go build main.go
> ../qemu/build/x86_64-linux-user/qemu-x86_64 -strace ./main
29213 arch_prctl(4098,4823880,0,0,0,0) = 0
29213 write(2,0,4622922)fatal error:  = 13
29213 write(2,0,4622132)bad timediv = 11
29213 write(2,0,4620094)
 = 1
29213 write(2,0,4635135)runtime: panic before malloc heap initialized
 = 46
29213 select(0,0,0,0,1082131776,0) = -1 errno=14 (Bad address)
29213 select(0,0,0,0,1082131776,0) = -1 errno=14 (Bad address)
29213 write(2,0,4623731)
runtime stack:
 = 16
29213 write(2,0,4622922)fatal error:  = 13
29213 write(2,0,4634607)gentraceback before goexitPC initialization = 43
29213 write(2,0,4620094)
 = 1
29213 write(2,0,4635135)runtime: panic before malloc heap initialized
 = 46
29213 write(2,0,4624923)panic during panic
 = 19
29213 write(2,0,4623731)
runtime stack:
 = 16
29213 write(2,0,4622922)fatal error:  = 13
29213 write(2,0,4634607)gentraceback before goexitPC initialization = 43
29213 write(2,0,4620094)
 = 1
29213 write(2,0,4635135)runtime: panic before malloc heap initialized
 = 46
29213 write(2,0,4627441)stack trace unavailable
 = 24
29213 exit_group(4)
===

I'm running the latest qemu (commit 7263da78045dc91cc207f350911efe4259e99b3c), which was compiled with "../configure --target-list=x86_64-linux-user --static".

The go version is 1.7.1, and the system "Linux raspberrypi 4.4.11-v7+ #888 SMP Mon May 23 20:10:33 BST 2016 armv7l GNU/Linux".

Unfortunately trying to emulate a 64-bit binary on a 32-bit host with QEMU's linux-user emulator will in general not work. (This is because we don't really emulate the guest CPU's MMU in linux-user mode, so we effectively require the guest page size and the host page size to be the same, which they aren't in this case.)


I see, I'll close the ticket then.

Do you have any recommandation on how I could achieve this? It is actually a 64-bit CPU (armv8 from Raspberry Pi 3) but it's running on a 32-bit OS / kernel.

On 13 September 2016 at 15:56, Bilal Amarni <email address hidden> wrote:
> I see, I'll close the ticket then.
>
> Do you have any recommandation on how I could achieve this? It is
> actually a 64-bit CPU (armv8 from Raspberry Pi 3) but it's running on a
> 32-bit OS / kernel.

Your choices are to run a 64-bit kernel (which can still support
a mostly 32-bit userspace), or run a 32-bit guest binary, I'm afraid.