Go will print a stack backtrace on Plan 9 (I just tried it) if given half a chance.
I wonder if that suicide is sending a note or not, or it's just getting peremptorily killed. On Fri, Jan 2, 2026 at 8:59 PM <[email protected]> wrote: > > Quoth [email protected]: > > > btw, cdid you get a stack trace from the go runtime? or just that one > > > l ine diagnostic? > > > > I only get that line. The program was cross-compiled on arm, with > > Geoff's userland (a bit different from 9legacy's userland), but it > > doesn't matter, right? > > > > Currently I can't lstk() in acid, it says ``no stack frame'' > > I don't think Go generates Plan 9 debug information, so you'd have > to poke around by hand, with an understanding of the ABI. For example, > > asm(0x215443) > > will tell you the faulting instruction, for example. The caller's PC > will be at the top of the stack frame, and I don't recall the register > locations. > > Outside of that, looking at the code for 9legacy, it seems that the > default FPU settings are set up in sys/src/9k/k10/fpu.c:489: > > m->fcw = RCn|PCd|P|U|D; > > where the flags have the following meanings: > > enum { /* FCW, FSW and > MXCSR */ > I = 0x00000001, /* > Invalid-Operation */ > D = 0x00000002, /* > Denormalized-Operand */ > Z = 0x00000004, /* Zero-Divide */ > O = 0x00000008, /* Overflow */ > U = 0x00000010, /* Underflow */ > P = 0x00000020, /* Precision */ > }; > > that said, Go seems to be setting the masks it expencts, in: > > src/runtime/os_plan9.go:215: setfpmasks() > src/runtime/sys_plan9_amd64.s:220: TEXT > runtime·setfpmasks(SB),NOSPLIT,$8 > > Which t calls with the comment: > > // Mask all SSE floating-point exceptions > // when running on the 64-bit kernel. > setfpmasks() > > Interestingly, the setfpmasks() function seems to be > a no-op on 32 bit kernels, but that shouldn't be an > issue here. Go seems to be setting this correctly, > though I have only skimmed the docs for the > LDMXCSR/STMXCSR instructions. > > When testing locally (9front), I ran: > > for(i in `{seq 1000}){ { > ./https; echo killed $i} & > sleep 0.1; kill https | rc > } > > and could not reproduce; assuming that this is what > I'd normally need to reproduce your issue, it seems > that Go is likely doing the right thing here? > > > > > > > On Fri, Jan 2, 2026 at 8:19 AM ron minnich <[email protected]> wrote: > > >> > > >> I wonder why that exception is enabled? I wonder what is enabling it? > > >> Does the go runtime turn it on? > > >> > > >> on linux, mxcsr is 0x1f80, all exceptions masked, and in particular, > 0x20 is not set -- no precision exceptions. > > >> > > >> On Fri, Jan 2, 2026 at 6:23 AM <[email protected]> wrote: > > >>> > > >>> Hello, > > >>> I don't know go, just have it to compile some programs. > > >>> I cross-compiled this http server from arm for amd64: > > >>> https://mkws.sh/https/https.go > > >>> > > >>> Running it on 9legacy/amd64 (under qemu) will raise this error 50% of > > >>> the time (otherwise it works pretty well): > > >>> gohttp 177: suicide: sys: fp: Precision Exception mxcsr=0x20 > pc=0x215443 > > >>> > > >>> Plan 9 > > >>> mmuinit: vmstart 0xfffffffff0000000 vmunused 0xfffffffff03cc000 > vmunmapped 0xfffffffff0400000 vmend 0xfffffffffe000000 > > >>> sys->pd 0x108003 0x108023 > > >>> l 3 0xffffff7fbfdfeff8 107023 > > >>> l 2 0xffffff7fbfdffff8 108023 > > >>> l 1 0xffffff7fbffffc00 e3 > > >>> l 1 0xffffff7fbffffc00 e3 > > >>> base 0xfffffffff03d0000 ptr 0xfffffffff03d0000 nunits 14430208 > > >>> physalloc color=0 base=0xe000000 size=0x71fe0000 > > >>> apic0: hz 998949300 max 9989493 min 99894 div 3 > > >>> intrenable: nil handler for 11, tbdf 0xc001800 for ether0 > > >>> #l0: virtio10: 1Gbps port 0xfe000000 irq 11: 525400123456 > > >>> 2044M memory: 2800K+220M kernel, 1822M user, 0M lost > > >>> pickmethod...read #e/nobootprompt...pickmethod done > > >>> bind #æ...bind #S...partinit...part plan9 63 67103505 > > >>> p9part /dev/sdC0/data plan9 > > >>> part 9fat 63 204863 > > >>> part nvram 204863 204864 > > >>> part fossil 204864 10573102 > > >>> part arenas 10573102 62414293 > > >>> part isect 62414293 65006353 > > >>> part bloom 65006353 65530641 > > >>> auth...mount usbd...can't open /srv/usbtime... > > >>> venti...2026/0102 11:36:29 venti: conf.../boot/venti: mem 2,236,962 > bcmem 4,473,924 icmem 6,710,886...httpd tcp!127.1!8000...init...icache > 6,710,886 bytes = 66,728 entries; 4 scache > > >>> sync...announce tcp!127.1!17034...serving. > > >>> fossil(#S/sdC0/fossil)...fsys: dialing venti at tcp!127.1!17034 > > >>> version...can't stat /srv/partfs.sdXX: '/srv/partfs.sdXX' file does > not exist > > >>> > > >>> init: starting /bin/rc > > >>> secstore > > >>> mkvbe: '/dev/realmode' file does not exist > > >>> aux/vga: controller not in /lib/vgadb, not vesa > > >>> 0xC0000 55 AA 4D E9 90 55 CC 00 00 00 00 00 00 00 00 00 > U.M..U.......... > > >>> 0xC0010 00 00 00 00 00 00 00 00 5C 98 00 00 00 00 49 42 > ........\.....IB > > >>> 0xC0020 4D 00 2E 8B 16 E8 98 85 D2 74 01 EE C2 02 00 84 > M........t...... > > >>> 0xC0030 C0 74 34 66 55 66 89 E5 66 53 66 89 C3 66 B8 00 > .t4fUf..fSf..f.. > > >>> 0xC0040 40 00 00 FE CB 74 37 66 0F B7 D2 66 0F B7 C9 66 > @....t7f...f...f > > >>> 0xC0050 0F AF D1 66 C1 FA 03 66 89 D0 9C 66 05 FF 1F 00 > ...f...f...f.... > > >>> 0xC0060 00 9D 25 00 E0 EB 17 0F AF CA 66 89 C8 9C 66 D1 > ..%.......f...f. > > >>> 0xC0070 E0 66 05 FF 07 00 00 9D 25 00 F8 C2 02 00 66 5B > .f......%.....f[ > > >>> 0xC0080 66 5D C2 02 00 66 55 66 89 E5 66 56 66 53 66 89 > f]...fUf..fVfSf. > > >>> 0xC0090 C6 66 89 D3 66 89 CA 67 66 8B 4D 08 67 8A 45 0C > .f..f..gf.M.g.E. > > >>> 0xC00A0 66 C1 E6 10 66 0F B7 DB 66 09 F3 66 31 F6 8E C6 > f...f...f..f1... > > >>> 0xC00B0 26 66 89 1E 0C 01 80 F9 01 74 0D 80 F9 03 74 0C > &f.......t....t. > > >>> 0xC00C0 84 C9 74 0A B0 19 EB 06 B0 0E EB 02 B0 2B 66 B9 > ..t..........+f. > > >>> 0xC00D0 40 00 00 00 8E C1 66 48 26 A2 84 00 8E C1 66 0F > @.....fH&.....f. > > >>> 0xC00E0 B6 D2 26 89 16 85 00 66 5B 66 5E 66 5D C2 02 00 > ..&....f[f^f]... > > >>> 0xC00F0 66 55 66 89 E5 66 57 66 56 66 53 66 53 66 89 C3 > fUf..fWfVfSfSf.. > > >>> aux/vga: main: vga@1024x768x1 not in /lib/vgadb > > >>> rio: can't open display: initdisplay: /dev/draw/new: no frame buffer > > >>> init: rc exit status: rio 41: display open > > >>> > > >>> init: starting /bin/rc > > >>> term% > > >>> > > >> > > >> 9fans / 9fans / see discussions + participants + delivery options > Permalink ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/T29cfe27ef87ed9d8-M52f51a88344dccee612becb3 Delivery options: https://9fans.topicbox.com/groups/9fans/subscription
