36 lines
795 B
Go
36 lines
795 B
Go
//go:build !baremetal
|
|
|
|
package runtime
|
|
|
|
import (
|
|
c "github.com/goplus/llgo/runtime/internal/clite"
|
|
"github.com/goplus/llgo/runtime/internal/clite/debug"
|
|
"github.com/goplus/llgo/runtime/internal/clite/pthread"
|
|
)
|
|
|
|
var (
|
|
printFormatPrefixInt = c.Str("%lld")
|
|
printFormatPrefixUInt = c.Str("%llu")
|
|
printFormatPrefixHex = c.Str("%llx")
|
|
)
|
|
|
|
// Rethrow rethrows a panic.
|
|
func Rethrow(link *Defer) {
|
|
if ptr := excepKey.Get(); ptr != nil {
|
|
if link == nil {
|
|
TracePanic(*(*any)(ptr))
|
|
debug.PrintStack(2)
|
|
c.Free(ptr)
|
|
c.Exit(2)
|
|
} else {
|
|
c.Siglongjmp(link.Addr, 1)
|
|
}
|
|
} else if link == nil && goexitKey.Get() != nil {
|
|
if pthread.Equal(mainThread, pthread.Self()) != 0 {
|
|
fatal("no goroutines (main called runtime.Goexit) - deadlock!")
|
|
c.Exit(2)
|
|
}
|
|
pthread.Exit(nil)
|
|
}
|
|
}
|