Implemented experimental stack switch for current genode 21.08/gcc10.3 (by opaque structure Thread rewriting) during setcontext()
Works for many CPU, with gcc optimization turned on (tested on 4) on NOVA and linux x86_64, sometimes works on sel4
To run need 2 repos: https://github.com/tor-m6/genode.git (Need to checkout 21.08 branch) https://github.com/tor-m6/genode-world.git (Need to checkout 21.08experimental)
I successfully run some tests with channels/async goroutines - some of them (Like Hanoi towers or barber serving) inside https://github.com/tor-m6/genode-world/blob/21.08experimental/src/test/go_ap...
All of them commented out - you can compile any between «package main» lines, or try your own
More details in https://github.com/tor-m6/genode-world/blob/21.08experimental/src/test/go_ap...
Note 1: As pointed by Use, I know that potentially it could fail if you try to acquire genode resources/caps directly from go code, while all tests and anything backend by libc port should work.
Note 2: sel4 problem: on my working copy it works always, while fresh rebuild fail during golang stack unwind - because of guard page «edge» access. Still not able to debug… Question: how to print call stack from page fault? Error message below, I need to understand a reason, not just place - I know it inside function _Unwind_GetGR(): /genodelabs-genode-c0150f9/contrib/gcc-bc8a730adbf377de2c449d222a0df0ba7096a4b8/src/noux-pkg/gcc/libgcc/unwind-dw2.c:234
Warning: page-fault, pager_object: pd='init -> test-go' thread='ep' ip=0x112938f pf-addr=0x403ff008
Sincerely, Alexander