ish-app / ish-app/ish

[BUG] Running Go compiled binary files results in an error.

Open
#2,179 5 comments 1 reaction 0 assignees View on GitHub
unconfirmed
Dominant language
C
Stars
20.5k
Forks
1.5k
PR merge metrics
No merged PRs in 30d

Description

I tried to compile the [`elichika`](https://github.com/YumeMichi/elichika) project, which is written in Go, into a 32-bit binary compatible with musl-libc. However, when running the binary in iSH, an error occurred.

```
~/elichika# file elichika
elichika: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-i386.so.1,
Go BuildID=XdCjPNVrkbUcTGrpoEUC/jcSBFvZ0kGW7YMfBOd9D/r99Cr6DubWvOxjI0chmv/y35asbo2kVjY6QcGmKQW,
with debug_info, not stripped
```
**First attempt at running.**
```
~/elichika# ./elichika
[xorm] [info] 2023/07/25 03:37:34.848663 PING DATABASE sqlite
fatal: morestack on g0
fatal: morestack on g0
```
```
~/elichika# dmesg
pollnval 72 flags 4 events 3 revents 32
pollnval 72 flags 4 events 3 revents 32
pollnval 72 flags 4 events 3 revents 32
FIXME socketcall 18
```
**After multiple attempts at running, different error messages appeared.**
```
~/elichika# ./elichika
[xorm] [info] 2023/07/25 03:40:16.514510 PING DATABASE sqlite
fatal error: notesleep not on g0
fatal error: unexpected signal during runtime execution

goroutine 0 [idle]:
runtime.throw({0x891ce70, 0x13})
/usr/local/go/src/runtime/panic.go:1047 +0x4d fp=0xffffdb54 sp=0xffffdb40 pc=0x808094d
runtime: g 0: unexpected return pc for runtime.notesleep called from 0x2
stack: frame={sp:0xffffdb54, fp:0xffffdb74} stack=[0x9008000,0x9010000)

runtime.notesleep(0xffffffff)
/usr/local/go/src/runtime/lock_futex.go:151 +0xec fp=0xffffdb74 sp=0xffffdb54 pc=0x805492c

goroutine 1 [runnable, locked to thread]:
syscall.write(0x8, {0x91ffe00, 0x30, 0xa0})
/usr/local/go/src/syscall/zsyscall_linux_386.go:932 +0xc9 fp=0x90a55e4 sp=0x90a55e0 pc=0x8101539
syscall.Write(...)
/usr/local/go/src/syscall/syscall_unix.go:206
internal/poll.ignoringEINTRIO(...)
/usr/local/go/src/internal/poll/fd_unix.go:794
internal/poll.(*FD).Write(0x93af340, {0x91ffe00, 0x30, 0xa0})
/usr/local/go/src/internal/poll/fd_unix.go:383 +0x2bc fp=0x90a5644 sp=0x90a55e4 pc=0x812253c
os.(*File).write(...)
/usr/local/go/src/os/file_posix.go:48
os.(*File).Write(0x93658c8, {0x91ffe00, 0x30, 0xa0})
/usr/local/go/src/os/file.go:175 +0x62 fp=0x90a5688 sp=0x90a5644 pc=0x8129ab2
github.com/syndtr/goleveldb/leveldb/storage.(*fileStorage).doLog(0x93af380, {0xc127eee828312b58, 0xc21f119, 0x8f79440}, {0x93a2840, 0x1f})
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/storage/file_storage.go:218 +0xc22 fp=0x90a580c sp=0x90a5688 pc=0x83fc272
github.com/syndtr/goleveldb/leveldb/storage.(*fileStorage).Log(0x93af380, {0x93a2840, 0x1f})
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/storage/file_storage.go:230 +0xbd fp=0x90a5858 sp=0x90a580c pc=0x83fc3cd
github.com/syndtr/goleveldb/leveldb.(*session).logf(0x914b780, {0x892c6c6, 0x1f}, {0x90a5948, 0x1, 0x1})
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/session_util.go:33 +0x65 fp=0x90a5878 sp=0x90a5858 pc=0x843ba85
github.com/syndtr/goleveldb/leveldb.(*DB).logf(...)
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/db_util.go:38
github.com/syndtr/goleveldb/leveldb.(*DB).recoverJournal(0x9387560)
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/db.go:516 +0x5cb fp=0x90a59c4 sp=0x90a5878 pc=0x842179b
github.com/syndtr/goleveldb/leveldb.openDB(0x914b780)
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/db.go:125 +0x432 fp=0x90a5a44 sp=0x90a59c4 pc=0x8420a62
github.com/syndtr/goleveldb/leveldb.Open({0x8a40dbc, 0x93af380}, 0x0)
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/db.go:197 +0x1ad fp=0x90a5a78 sp=0x90a5a44 pc=0x8420fdd
github.com/syndtr/goleveldb/leveldb.OpenFile({0x8918865, 0x10}, 0x0)
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/db.go:219 +0x88 fp=0x90a5ab0 sp=0x90a5a78 pc=0x8421118
elichika/database.(*LevelDbImpl).InitDb(0x8f76880)
/root/elichika/database/leveldb.go:24 +0x37 fp=0x90a5acc sp=0x90a5ab0 pc=0x8803c47
elichika/database.init.0()
/root/elichika/database/leveldb.go:20 +0x23 fp=0x90a5ad4 sp=0x90a5acc pc=0x8803c03
runtime.doInit(0x8f1f2f0)
/root/elichika/database/leveldb.go:24 +0x37 fp=0x90a5acc sp=0x90a5ab0 pc=0x8803c47
elichika/database.init.0()
/root/elichika/database/leveldb.go:20 +0x23 fp=0x90a5ad4 sp=0x90a5acc pc=0x8803c03
runtime.doInit(0x8f1f2f0)
/usr/local/go/src/runtime/proc.go:6525 +0xf8 fp=0x90a5c10 sp=0x90a5ad4 pc=0x8090db8
runtime.doInit(0x8f241e0)
/usr/local/go/src/runtime/proc.go:6502 +0x5b fp=0x90a5d4c sp=0x90a5c10 pc=0x8090d1b
runtime.doInit(0x8f1e830)
/usr/local/go/src/runtime/proc.go:6502 +0x5b fp=0x90a5e88 sp=0x90a5d4c pc=0x8090d1b
runtime.doInit(0x8f1e290)
/usr/local/go/src/runtime/proc.go:6502 +0x5b fp=0x90a5fc4 sp=0x90a5e88 pc=0x8090d1b
runtime.main()
/usr/local/go/src/runtime/proc.go:233 +0x207 fp=0x90a5ff0 sp=0x90a5fc4 pc=0x8083537
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x90a5ff4 sp=0x90a5ff0 pc=0x80b1591

goroutine 2 [force gc (idle)]:
runtime.gopark(0x895f10c, 0x8f78b20, 0x11, 0x14, 0x1)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x9036fdc sp=0x9036fc8 pc=0x80839e8
runtime.goparkunlock(...)
/usr/local/go/src/runtime/proc.go:387
runtime.forcegchelper()
/usr/local/go/src/runtime/proc.go:305 +0xcf fp=0x9036ff0 sp=0x9036fdc pc=0x808380f
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x9036ff4 sp=0x9036ff0 pc=0x80b1591
created by runtime.init.5
/usr/local/go/src/runtime/proc.go:293 +0x23

goroutine 18 [GC sweep wait]:
runtime.gopark(0x895f10c, 0x8f791c0, 0xc, 0x14, 0x1)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x90327cc sp=0x90327b8 pc=0x80839e8
runtime.goparkunlock(...)
/usr/local/go/src/runtime/proc.go:387
runtime.bgsweep(0x908e000)
/usr/local/go/src/runtime/mgcsweep.go:278 +0x96 fp=0x90327e8 sp=0x90327cc pc=0x806ee76
runtime.gcenable.func1()
/usr/local/go/src/runtime/mgc.go:178 +0x27 fp=0x90327f0 sp=0x90327e8 pc=0x80610b7
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x90327f4 sp=0x90327f0 pc=0x80b1591
created by runtime.gcenable
/usr/local/go/src/runtime/mgc.go:178 +0x7c
goroutine 19 [GC scavenge wait]:
runtime.gopark(0x895f10c, 0x8f79560, 0xd, 0x14, 0x2)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x9032fb8 sp=0x9032fa4 pc=0x80839e8
runtime.goparkunlock(...)
/usr/local/go/src/runtime/proc.go:387
runtime.(*scavengerState).park(0x8f79560)
/usr/local/go/src/runtime/mgcscavenge.go:400 +0x5f fp=0x9032fcc sp=0x9032fb8 pc=0x806c81f
runtime.bgscavenge(0x908e000)
/usr/local/go/src/runtime/mgcscavenge.go:633 +0x75 fp=0x9032fe8 sp=0x9032fcc pc=0x806cec5
runtime.gcenable.func2()
/usr/local/go/src/runtime/mgc.go:179 +0x27 fp=0x9032ff0 sp=0x9032fe8 pc=0x8061077
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x9032ff4 sp=0x9032ff0 pc=0x80b1591
created by runtime.gcenable
/usr/local/go/src/runtime/mgc.go:179 +0xc1

goroutine 34 [finalizer wait]:
runtime.gopark(0x895f04c, 0x8f8c794, 0x10, 0x14, 0x1)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x9036794 sp=0x9036780 pc=0x80839e8
runtime.runfinq()
/usr/local/go/src/runtime/mfinal.go:193 +0xf4 fp=0x90367f0 sp=0x9036794 pc=0x8060244
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x90367f4 sp=0x90367f0 pc=0x80b1591
created by runtime.createfing
/usr/local/go/src/runtime/mfinal.go:163 +0x60
goroutine 35 [select]:
runtime.gopark(0x895f13c, 0x0, 0x9, 0x18, 0x1)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x91c46b4 sp=0x91c46a0 pc=0x80839e8
runtime.selectgo(0x91c47cc, 0x91c47c4, 0x0, 0x0, 0x2, 0x1)
/usr/local/go/src/runtime/select.go:327 +0xbc0 fp=0x91c47a4 sp=0x91c46b4 pc=0x8093fa0
database/sql.(*DB).connectionOpener(0x9126a20, {0x8a3fa50, 0x9160210})
/usr/local/go/src/database/sql/sql.go:1218 +0xab fp=0x91c47e0 sp=0x91c47a4 pc=0x820b9eb
database/sql.OpenDB.func1()
/usr/local/go/src/database/sql/sql.go:791 +0x35 fp=0x91c47f0 sp=0x91c47e0 pc=0x8209fa5
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x91c47f4 sp=0x91c47f0 pc=0x80b1591
created by database/sql.OpenDB
/usr/local/go/src/database/sql/sql.go:791 +0x184

goroutine 36 [select]:
runtime.gopark(0x895f13c, 0x0, 0x9, 0x18, 0x1)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x91c4e8c sp=0x91c4e78 pc=0x80839e8
runtime.selectgo(0x91c4fb8, 0x91c4fa4, 0x0, 0x0, 0x2, 0x1)
/usr/local/go/src/runtime/select.go:327 +0xbc0 fp=0x91c4f7c sp=0x91c4e8c pc=0x8093fa0
github.com/syndtr/goleveldb/leveldb/util.(*BufferPool).drain(0x91d6840)
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/util/buffer_pool.go:206 +0xd9 fp=0x91c4fe8 sp=0x91c4f7c pc=0x8404869
github.com/syndtr/goleveldb/leveldb/util.NewBufferPool.func1()
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/util/buffer_pool.go:237 +0x27 fp=0x91c4ff0 sp=0x91c4fe8 pc=0x8404b37
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x91c4ff4 sp=0x91c4ff0 pc=0x80b1591
created by github.com/syndtr/goleveldb/leveldb/util.NewBufferPool
/home/go/pkg/mod/github.com/syndtr/goleveldb@v1.0.0/leveldb/util/buffer_pool.go:237 +0x17a
goroutine 37 [GC worker (idle)]:
runtime.gopark(0x895f058, 0x92e2ba0, 0x1a, 0x14, 0x0)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x91c5794 sp=0x91c5780 pc=0x80839e8
runtime.gcBgMarkWorker()
/usr/local/go/src/runtime/mgc.go:1275 +0x103 fp=0x91c57f0 sp=0x91c5794 pc=0x8063783
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x91c57f4 sp=0x91c57f0 pc=0x80b1591
created by runtime.gcBgMarkStartWorkers
/usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 3 [GC worker (idle)]:
runtime.gopark(0x895f058, 0x9020030, 0x1a, 0x14, 0x0)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x9037794 sp=0x9037780 pc=0x80839e8
runtime.gcBgMarkWorker()
/usr/local/go/src/runtime/mgc.go:1275 +0x103 fp=0x90377f0 sp=0x9037794 pc=0x8063783
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x90377f4 sp=0x90377f0 pc=0x80b1591
created by runtime.gcBgMarkStartWorkers
/usr/local/go/src/runtime/mgc.go:1199 +0x25
goroutine 38 [GC worker (idle)]:
runtime.gopark(0x895f058, 0x9020060, 0x1a, 0x14, 0x0)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x91c5f94 sp=0x91c5f80 pc=0x80839e8
runtime.gcBgMarkWorker()
/usr/local/go/src/runtime/mgc.go:1275 +0x103 fp=0x91c5ff0 sp=0x91c5f94 pc=0x8063783
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x91c5ff4 sp=0x91c5ff0 pc=0x80b1591
created by runtime.gcBgMarkStartWorkers
/usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 5 [GC worker (idle)]:
runtime.gopark(0x895f058, 0x92e2bb8, 0x1a, 0x14, 0x0)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x9038794 sp=0x9038780 pc=0x80839e8
runtime.gcBgMarkWorker()
/usr/local/go/src/runtime/mgc.go:1275 +0x103 fp=0x90387f0 sp=0x9038794 pc=0x8063783
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x90387f4 sp=0x90387f0 pc=0x80b1591
created by runtime.gcBgMarkStartWorkers
/usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 6 [runnable]:
runtime.gcMarkDone()
/usr/local/go/src/runtime/mgc.go:784 +0x335 fp=0x9038f94 sp=0x9038f90 pc=0x8062055
runtime.gcBgMarkWorker()
/usr/local/go/src/runtime/mgc.go:1407 +0x357 fp=0x9038ff0 sp=0x9038f94 pc=0x80639d7
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x9038ff4 sp=0x9038ff0 pc=0x80b1591
created by runtime.gcBgMarkStartWorkers
/usr/local/go/src/runtime/mgc.go:1199 +0x25
goroutine 7 [GC mark termination]:
runtime.systemstack_switch()
/usr/local/go/src/runtime/asm_386.s:337 fp=0x9039760 sp=0x903975c pc=0x80b00c0
runtime.gcMarkDone()
/usr/local/go/src/runtime/mgc.go:807 +0xe4 fp=0x9039794 sp=0x9039760 pc=0x8061e04
runtime.gcBgMarkWorker()
/usr/local/go/src/runtime/mgc.go:1407 +0x357 fp=0x90397f0 sp=0x9039794 pc=0x80639d7
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x90397f4 sp=0x90397f0 pc=0x80b1591
created by runtime.gcBgMarkStartWorkers
/usr/local/go/src/runtime/mgc.go:1199 +0x25
goroutine 50 [semacquire]:
runtime.gopark(0x895f10c, 0x8f7dd20, 0x12, 0x19, 0x4)
/usr/local/go/src/runtime/proc.go:381 +0x108 fp=0x91c072c sp=0x91c0718 pc=0x80839e8
runtime.goparkunlock(...)
/usr/local/go/src/runtime/proc.go:387
runtime.semacquire1(0x8f7991c, 0x0, 0x0, 0x0, 0x12)
/usr/local/go/src/runtime/sema.go:160 +0x245 fp=0x91c0760 sp=0x91c072c pc=0x8094b75
runtime.semacquire(...)
/usr/local/go/src/runtime/sema.go:111
runtime.gcMarkDone()
/usr/local/go/src/runtime/mgc.go:787 +0x41 fp=0x91c0794 sp=0x91c0760 pc=0x8061d61
runtime.gcBgMarkWorker()
/usr/local/go/src/runtime/mgc.go:1407 +0x357 fp=0x91c07f0 sp=0x91c0794 pc=0x80639d7
runtime.goexit()
/usr/local/go/src/runtime/asm_386.s:1326 +0x1 fp=0x91c07f4 sp=0x91c07f0 pc=0x80b1591
created by runtime.gcBgMarkStartWorkers
/usr/local/go/src/runtime/mgc.go:1199 +0x25
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x0]
runtime stack:
runtime.throw({0x89360c6, 0x2a})
/usr/local/go/src/runtime/panic.go:1047 +0x4d fp=0xffffdc04 sp=0xffffdbf0 pc=0x808094d
runtime: g 0: unexpected return pc for runtime.sigpanic called from 0x9028600
stack: frame={sp:0xffffdc04, fp:0xffffdc1c} stack=[0xfffded1c,0xffffdd50)
0xffffdb84: 0x080811c3 0x0808094d 0xffffdbf0 0x00000000
0xffffdb94: 0x08f79760 0x0100c701 0x0000001f 0x00000000
0xffffdba4: 0x00000000 0x00000001 0x00000002 0x0892c153
0xffffdbb4: 0x08080cb2 0x08f79760 0x0808094d 0xffffdbf0
0xffffdbc4: 0x08f8c778 0xffffdbf0 0x0808094d 0x08f79760
0xffffdbd4: 0x08080c41 0xffffdbdc 0x08080c50 0x08f79760
0xffffdbe4: 0x0808094d 0xffffdbf0 0x0808094d 0x00000002
0xffffdbf4: 0x08080960 0x089360c6 0x0000002a 0x08096ed8
0xffffdc04: <0x089360c6 0x0000002a 0x00000000 0x00000000
0xffffdc14: 0x08f79760 !0x09028600 >0x0808a16d 0x00000000
0xffffdc24: 0x00000000 0x08054710 0x08f7aa38 0x0936cb40
0xffffdc34: 0x00000002 0x0808a906 0x08f7aa38 0x00000002
0xffffdc44: 0x00000001 0x0808aaaf 0x090060f0 0x006c90f8
0xffffdc54: 0x00000000 0x018269e0 0x00000000 0x08099d14
0xffffdc64: 0x090060f0 0xfffffade 0x15a5b740 0x00000000
0xffffdc74: 0x00000000 0x0409d040 0xfffffade 0x090a55dc
0xffffdc84: 0x007ff5d0 0x00000000 0x00000007 0x00000008
0xffffdc94: 0x00000000 0x007ff5d0
runtime.sigpanic()
/usr/local/go/src/runtime/signal_unix.go:825 +0x2b8 fp=0xffffdc1c sp=0xffffdc04 pc=0x8096ed8
```
```
~/elichika# dmesg
pollnval 72 flags 4 events 3 revents 32
pollnval 72 flags 4 events 3 revents 32
pollnval 72 flags 4 events 3 revents 32
FIXME socketcall 18
pollnval 69 flags 4 events 3 revents 32
FIXME socketcall 18
pollnval 69 flags 4 events 3 revents 32
pollnval 69 flags 4 events 3 revents 32
pollnval 69 flags 4 events 3 revents 32
142 page fault on 0x0 at 0x0
stack at ffffdc18, base at 1, ip at 0
ffffdc18: 09028600 0808a16d 00000000 00000000 08054710 08f7aa38 0936cb40 00000002
ffffdc38: 0808a906 08f7aa38 00000002 00000001 0808aaaf 090060f0 006c90f8 00000000
ffffdc58: 018269e0 00000000 08099d14 090060f0 fffffade 15a5b740 00000000 00000000
ffffdc78: 0409d040 fffffade 090a55dc 007ff5d0 00000000 00000007 00000008 00000000
ffffdc98: 007ff5d0 00000000 00000000 000bbbe8 0806541b 08f8d7a0 00000000 00000001
ffffdcb8: 08064e3c 08f8d7a0 08f79760 00057c49 40057c01 08067029 08f8d7a0 1626f148
ffffdcd8: 00057c49 007ff5d0 090060f0 090a55e4 0812253c 090060f0 00000000 00000000
ffffdcf8: 00000000 00000000 00000001 08064da3 ffffffff ffffffc0 00000000 ffffdd28
```

Contributor guide

No contributing guide indexed for this repository

Research direction

The report names no iSH source file or test; start by reproducing the 32-bit musl Go binary in iSH and inspect the reported runtime frames, including /usr/local/go/src/runtime/lock_futex.go:151. Compare the failure with the dmesg diagnostics for pollnval and socketcall, then verify whether the binary can run without the fatal runtime errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, ios, linux
Domain
operating-systems
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.