The fix for #832 was incomplete. Since we strip libgo.so, filename is always NULL. This caused the unwinder to continue through runtime_mstart which caused the same issue. --- gcc-8.5.0/libgo/runtime/go-callers.c.old 2023-01-01 17:56:27.302982459 -0600 +++ gcc-8.5.0/libgo/runtime/go-callers.c 2023-01-01 17:58:00.612903483 -0600 @@ -118,27 +118,11 @@ if (function != NULL) { if (__builtin_strcmp (function, "makecontext") == 0 - || __builtin_strcmp (function, "libucontext_makecontext") == 0) + || __builtin_strcmp (function, "libucontext_makecontext") == 0 + || __builtin_strcmp (function, "runtime_mstart") == 0 + || __builtin_strcmp (function, "runtime.kickoff") == 0 + || __builtin_strcmp (function, "runtime.main") == 0) return 1; - if (filename != NULL) - { - const char *p; - - p = strrchr (filename, '/'); - if (p == NULL) - p = filename; - if (__builtin_strcmp (p, "/proc.c") == 0) - { - if (__builtin_strcmp (function, "runtime_mstart") == 0) - return 1; - } - else if (__builtin_strcmp (p, "/proc.go") == 0) - { - if (__builtin_strcmp (function, "runtime.kickoff") == 0 - || __builtin_strcmp (function, "runtime.main") == 0) - return 1; - } - } } return arg->index >= arg->max;