Hi I managed to reproduce the problem with minimal code snippet and can confirm it's definitely the Go stdlib signal handler that messes things up. Here's the code: package main import ( bpflib "github.com/iovisor/gobpf/elf" "os/signal" "os" "fmt" ) func main() { sig := make(chan os.Signal) signal.Notify(sig, os.Kill, os.Interrupt) mod := bpflib.NewModule("/tmp/sched.o") fmt.Println("loading ebpf module") err := mod.Load(nil) if err != nil { panic(err) } err = mod.EnableKprobes(50) if err != nil { panic(err) } fmt.Println("loaded ebpf module") rxChan := make(chan []byte) lostChan := make(chan uint64) pmap, err := bpflib.InitPerfMap( mod, "sched", rxChan, lostChan, ) if err != nil { panic(err) } go func() { for { select { case pe := <-rxChan: fmt.Println(pe) case l := <-lostChan: fmt.Println(l) } } }() pmap.PollStart() fmt.Println("listening on ebpf map") <-sig } The main thread hangs right after the call to module constructor. On Tue, Oct 9, 2018 at 10:40 PM Rich Felker wrote: > On Tue, Oct 09, 2018 at 10:36:41PM +0200, Szabolcs Nagy wrote: > > * Rabbitstack [2018-10-09 21:37:06 +0200]: > > > Should we raise an issue in Go upstream repository since there is > nothing > > > actionable from musl side? > > > > > > > have you figured out where the siprocmask came from? > > it might not be the go runtime but some c lib that you linked in. > > Well the sigset_t was created in Go code or via some other code that > bypasses libc. The libc functions cannot create a sigset_t with the > implementation-internal signals masked. > > > > El vie., 5 oct. 2018 2:47, Rich Felker escribió: > > > > > > > > > > Here is the bug: > > > > > > > > > > 6208 rt_sigprocmask(SIG_SETMASK, ~[HUP INT QUIT ILL TRAP ABRT BUS > FPE > > > > SEGV TERM STKFLT CHLD PROF SYS RTMIN RT_1], > > > > the go runtime should not make this call, it probably comes from > > somewhere else. > > > > i think you should try to create a minimal reproducer go code > > that makes this syscall. > > I looked at the Go implementations of the functions for sigset_t > manipulation and sigprocmask. They all bypass libc. So either it's an > error to use them at all in programs that link with libc, or a bug in > Go that they don't respect SIGRTMIN, etc. > > Rich >