diff --git a/go/ssa/interp/external.go b/go/ssa/interp/external.go index 34442caece..2c4dcc76dc 100644 --- a/go/ssa/interp/external.go +++ b/go/ssa/interp/external.go @@ -32,118 +32,119 @@ var externals = make(map[string]externalFn) func init() { // That little dot ۰ is an Arabic zero numeral (U+06F0), categories [Nd]. for k, v := range map[string]externalFn{ - "(*sync.Pool).Get": ext۰sync۰Pool۰Get, - "(*sync.Pool).Put": ext۰nop, - "(reflect.Value).Bool": ext۰reflect۰Value۰Bool, - "(reflect.Value).CanAddr": ext۰reflect۰Value۰CanAddr, - "(reflect.Value).CanInterface": ext۰reflect۰Value۰CanInterface, - "(reflect.Value).Elem": ext۰reflect۰Value۰Elem, - "(reflect.Value).Field": ext۰reflect۰Value۰Field, - "(reflect.Value).Float": ext۰reflect۰Value۰Float, - "(reflect.Value).Index": ext۰reflect۰Value۰Index, - "(reflect.Value).Int": ext۰reflect۰Value۰Int, - "(reflect.Value).Interface": ext۰reflect۰Value۰Interface, - "(reflect.Value).IsNil": ext۰reflect۰Value۰IsNil, - "(reflect.Value).IsValid": ext۰reflect۰Value۰IsValid, - "(reflect.Value).Kind": ext۰reflect۰Value۰Kind, - "(reflect.Value).Len": ext۰reflect۰Value۰Len, - "(reflect.Value).MapIndex": ext۰reflect۰Value۰MapIndex, - "(reflect.Value).MapKeys": ext۰reflect۰Value۰MapKeys, - "(reflect.Value).NumField": ext۰reflect۰Value۰NumField, - "(reflect.Value).NumMethod": ext۰reflect۰Value۰NumMethod, - "(reflect.Value).Pointer": ext۰reflect۰Value۰Pointer, - "(reflect.Value).Set": ext۰reflect۰Value۰Set, - "(reflect.Value).String": ext۰reflect۰Value۰String, - "(reflect.Value).Type": ext۰reflect۰Value۰Type, - "(reflect.Value).Uint": ext۰reflect۰Value۰Uint, - "(reflect.error).Error": ext۰reflect۰error۰Error, - "(reflect.rtype).Bits": ext۰reflect۰rtype۰Bits, - "(reflect.rtype).Elem": ext۰reflect۰rtype۰Elem, - "(reflect.rtype).Field": ext۰reflect۰rtype۰Field, - "(reflect.rtype).In": ext۰reflect۰rtype۰In, - "(reflect.rtype).Kind": ext۰reflect۰rtype۰Kind, - "(reflect.rtype).NumField": ext۰reflect۰rtype۰NumField, - "(reflect.rtype).NumIn": ext۰reflect۰rtype۰NumIn, - "(reflect.rtype).NumMethod": ext۰reflect۰rtype۰NumMethod, - "(reflect.rtype).NumOut": ext۰reflect۰rtype۰NumOut, - "(reflect.rtype).Out": ext۰reflect۰rtype۰Out, - "(reflect.rtype).Size": ext۰reflect۰rtype۰Size, - "(reflect.rtype).String": ext۰reflect۰rtype۰String, - "bytes.init": ext۰nop, // avoid asm dependency - "bytes.Equal": ext۰bytes۰Equal, - "bytes.IndexByte": ext۰bytes۰IndexByte, - "hash/crc32.haveSSE42": ext۰crc32۰haveSSE42, - "internal/cpu.cpuid": ext۰cpu۰cpuid, - "math.Abs": ext۰math۰Abs, - "math.Exp": ext۰math۰Exp, - "math.Float32bits": ext۰math۰Float32bits, - "math.Float32frombits": ext۰math۰Float32frombits, - "math.Float64bits": ext۰math۰Float64bits, - "math.Float64frombits": ext۰math۰Float64frombits, - "math.Ldexp": ext۰math۰Ldexp, - "math.Log": ext۰math۰Log, - "math.Min": ext۰math۰Min, - "math.hasSSE4": ext۰math۰hasSSE4, - "math.hasVectorFacility": ext۰math۰hasVectorFacility, - "os.runtime_args": ext۰os۰runtime_args, - "os.runtime_beforeExit": ext۰nop, - "os/signal.init": ext۰nop, - "reflect.New": ext۰reflect۰New, - "reflect.SliceOf": ext۰reflect۰SliceOf, - "reflect.TypeOf": ext۰reflect۰TypeOf, - "reflect.ValueOf": ext۰reflect۰ValueOf, - "reflect.Zero": ext۰reflect۰Zero, - "reflect.init": ext۰reflect۰Init, - "reflect.valueInterface": ext۰reflect۰valueInterface, - "runtime.Breakpoint": ext۰runtime۰Breakpoint, - "runtime.Caller": ext۰runtime۰Caller, - "runtime.Callers": ext۰runtime۰Callers, - "runtime.FuncForPC": ext۰runtime۰FuncForPC, - "runtime.GC": ext۰runtime۰GC, - "runtime.GOMAXPROCS": ext۰runtime۰GOMAXPROCS, - "runtime.Goexit": ext۰runtime۰Goexit, - "runtime.Gosched": ext۰runtime۰Gosched, - "runtime.init": ext۰nop, - "runtime.KeepAlive": ext۰nop, - "runtime.NumCPU": ext۰runtime۰NumCPU, - "runtime.NumGoroutine": ext۰runtime۰NumGoroutine, - "runtime.ReadMemStats": ext۰runtime۰ReadMemStats, - "runtime.SetFinalizer": ext۰nop, // ignore - "(*runtime.Func).Entry": ext۰runtime۰Func۰Entry, - "(*runtime.Func).FileLine": ext۰runtime۰Func۰FileLine, - "(*runtime.Func).Name": ext۰runtime۰Func۰Name, - "runtime.environ": ext۰runtime۰environ, - "runtime.getgoroot": ext۰runtime۰getgoroot, - "strings.init": ext۰nop, // avoid asm dependency - "strings.Count": ext۰strings۰Count, - "strings.Index": ext۰strings۰Index, - "strings.IndexByte": ext۰strings۰IndexByte, - "sync.runtime_Semacquire": ext۰nop, // unimplementable - "sync.runtime_Semrelease": ext۰nop, // unimplementable - "sync.runtime_Syncsemcheck": ext۰nop, // unimplementable - "sync.runtime_notifyListCheck": ext۰nop, - "sync.runtime_registerPoolCleanup": ext۰nop, - "sync/atomic.AddInt32": ext۰atomic۰AddInt32, - "sync/atomic.AddUint32": ext۰atomic۰AddUint32, - "sync/atomic.CompareAndSwapInt32": ext۰atomic۰CompareAndSwapInt32, - "sync/atomic.CompareAndSwapUint32": ext۰atomic۰CompareAndSwapUint32, - "sync/atomic.LoadInt32": ext۰atomic۰LoadInt32, - "sync/atomic.LoadUint32": ext۰atomic۰LoadUint32, - "sync/atomic.StoreInt32": ext۰atomic۰StoreInt32, - "sync/atomic.StoreUint32": ext۰atomic۰StoreUint32, - "sync/atomic.AddInt64": ext۰atomic۰AddInt64, - "sync/atomic.AddUint64": ext۰atomic۰AddUint64, - "sync/atomic.CompareAndSwapInt64": ext۰atomic۰CompareAndSwapInt64, - "sync/atomic.CompareAndSwapUint64": ext۰atomic۰CompareAndSwapUint64, - "sync/atomic.LoadInt64": ext۰atomic۰LoadInt64, - "sync/atomic.LoadUint64": ext۰atomic۰LoadUint64, - "sync/atomic.StoreInt64": ext۰atomic۰StoreInt64, - "sync/atomic.StoreUint64": ext۰atomic۰StoreUint64, - "(*sync/atomic.Value).Load": ext۰atomic۰ValueLoad, - "(*sync/atomic.Value).Store": ext۰atomic۰ValueStore, - "testing.MainStart": ext۰testing۰MainStart, - "time.Sleep": ext۰time۰Sleep, - "time.now": ext۰time۰now, + "(*sync.Pool).Get": ext۰sync۰Pool۰Get, + "(*sync.Pool).Put": ext۰nop, + "(reflect.Value).Bool": ext۰reflect۰Value۰Bool, + "(reflect.Value).CanAddr": ext۰reflect۰Value۰CanAddr, + "(reflect.Value).CanInterface": ext۰reflect۰Value۰CanInterface, + "(reflect.Value).Elem": ext۰reflect۰Value۰Elem, + "(reflect.Value).Field": ext۰reflect۰Value۰Field, + "(reflect.Value).Float": ext۰reflect۰Value۰Float, + "(reflect.Value).Index": ext۰reflect۰Value۰Index, + "(reflect.Value).Int": ext۰reflect۰Value۰Int, + "(reflect.Value).Interface": ext۰reflect۰Value۰Interface, + "(reflect.Value).IsNil": ext۰reflect۰Value۰IsNil, + "(reflect.Value).IsValid": ext۰reflect۰Value۰IsValid, + "(reflect.Value).Kind": ext۰reflect۰Value۰Kind, + "(reflect.Value).Len": ext۰reflect۰Value۰Len, + "(reflect.Value).MapIndex": ext۰reflect۰Value۰MapIndex, + "(reflect.Value).MapKeys": ext۰reflect۰Value۰MapKeys, + "(reflect.Value).NumField": ext۰reflect۰Value۰NumField, + "(reflect.Value).NumMethod": ext۰reflect۰Value۰NumMethod, + "(reflect.Value).Pointer": ext۰reflect۰Value۰Pointer, + "(reflect.Value).Set": ext۰reflect۰Value۰Set, + "(reflect.Value).String": ext۰reflect۰Value۰String, + "(reflect.Value).Type": ext۰reflect۰Value۰Type, + "(reflect.Value).Uint": ext۰reflect۰Value۰Uint, + "(reflect.error).Error": ext۰reflect۰error۰Error, + "(reflect.rtype).Bits": ext۰reflect۰rtype۰Bits, + "(reflect.rtype).Elem": ext۰reflect۰rtype۰Elem, + "(reflect.rtype).Field": ext۰reflect۰rtype۰Field, + "(reflect.rtype).In": ext۰reflect۰rtype۰In, + "(reflect.rtype).Kind": ext۰reflect۰rtype۰Kind, + "(reflect.rtype).NumField": ext۰reflect۰rtype۰NumField, + "(reflect.rtype).NumIn": ext۰reflect۰rtype۰NumIn, + "(reflect.rtype).NumMethod": ext۰reflect۰rtype۰NumMethod, + "(reflect.rtype).NumOut": ext۰reflect۰rtype۰NumOut, + "(reflect.rtype).Out": ext۰reflect۰rtype۰Out, + "(reflect.rtype).Size": ext۰reflect۰rtype۰Size, + "(reflect.rtype).String": ext۰reflect۰rtype۰String, + "bytes.init": ext۰nop, // avoid asm dependency + "bytes.Equal": ext۰bytes۰Equal, + "bytes.IndexByte": ext۰bytes۰IndexByte, + "hash/crc32.haveSSE42": ext۰crc32۰haveSSE42, + "internal/cpu.cpuid": ext۰cpu۰cpuid, + "internal/syscall/unix.syscall_fcntl": ext۰syscall۰unix۰syscall_fcntl, + "math.Abs": ext۰math۰Abs, + "math.Exp": ext۰math۰Exp, + "math.Float32bits": ext۰math۰Float32bits, + "math.Float32frombits": ext۰math۰Float32frombits, + "math.Float64bits": ext۰math۰Float64bits, + "math.Float64frombits": ext۰math۰Float64frombits, + "math.Ldexp": ext۰math۰Ldexp, + "math.Log": ext۰math۰Log, + "math.Min": ext۰math۰Min, + "math.hasSSE4": ext۰math۰hasSSE4, + "math.hasVectorFacility": ext۰math۰hasVectorFacility, + "os.runtime_args": ext۰os۰runtime_args, + "os.runtime_beforeExit": ext۰nop, + "os/signal.init": ext۰nop, + "reflect.New": ext۰reflect۰New, + "reflect.SliceOf": ext۰reflect۰SliceOf, + "reflect.TypeOf": ext۰reflect۰TypeOf, + "reflect.ValueOf": ext۰reflect۰ValueOf, + "reflect.Zero": ext۰reflect۰Zero, + "reflect.init": ext۰reflect۰Init, + "reflect.valueInterface": ext۰reflect۰valueInterface, + "runtime.Breakpoint": ext۰runtime۰Breakpoint, + "runtime.Caller": ext۰runtime۰Caller, + "runtime.Callers": ext۰runtime۰Callers, + "runtime.FuncForPC": ext۰runtime۰FuncForPC, + "runtime.GC": ext۰runtime۰GC, + "runtime.GOMAXPROCS": ext۰runtime۰GOMAXPROCS, + "runtime.Goexit": ext۰runtime۰Goexit, + "runtime.Gosched": ext۰runtime۰Gosched, + "runtime.init": ext۰nop, + "runtime.KeepAlive": ext۰nop, + "runtime.NumCPU": ext۰runtime۰NumCPU, + "runtime.NumGoroutine": ext۰runtime۰NumGoroutine, + "runtime.ReadMemStats": ext۰runtime۰ReadMemStats, + "runtime.SetFinalizer": ext۰nop, // ignore + "(*runtime.Func).Entry": ext۰runtime۰Func۰Entry, + "(*runtime.Func).FileLine": ext۰runtime۰Func۰FileLine, + "(*runtime.Func).Name": ext۰runtime۰Func۰Name, + "runtime.environ": ext۰runtime۰environ, + "runtime.getgoroot": ext۰runtime۰getgoroot, + "strings.init": ext۰nop, // avoid asm dependency + "strings.Count": ext۰strings۰Count, + "strings.Index": ext۰strings۰Index, + "strings.IndexByte": ext۰strings۰IndexByte, + "sync.runtime_Semacquire": ext۰nop, // unimplementable + "sync.runtime_Semrelease": ext۰nop, // unimplementable + "sync.runtime_Syncsemcheck": ext۰nop, // unimplementable + "sync.runtime_notifyListCheck": ext۰nop, + "sync.runtime_registerPoolCleanup": ext۰nop, + "sync/atomic.AddInt32": ext۰atomic۰AddInt32, + "sync/atomic.AddUint32": ext۰atomic۰AddUint32, + "sync/atomic.CompareAndSwapInt32": ext۰atomic۰CompareAndSwapInt32, + "sync/atomic.CompareAndSwapUint32": ext۰atomic۰CompareAndSwapUint32, + "sync/atomic.LoadInt32": ext۰atomic۰LoadInt32, + "sync/atomic.LoadUint32": ext۰atomic۰LoadUint32, + "sync/atomic.StoreInt32": ext۰atomic۰StoreInt32, + "sync/atomic.StoreUint32": ext۰atomic۰StoreUint32, + "sync/atomic.AddInt64": ext۰atomic۰AddInt64, + "sync/atomic.AddUint64": ext۰atomic۰AddUint64, + "sync/atomic.CompareAndSwapInt64": ext۰atomic۰CompareAndSwapInt64, + "sync/atomic.CompareAndSwapUint64": ext۰atomic۰CompareAndSwapUint64, + "sync/atomic.LoadInt64": ext۰atomic۰LoadInt64, + "sync/atomic.LoadUint64": ext۰atomic۰LoadUint64, + "sync/atomic.StoreInt64": ext۰atomic۰StoreInt64, + "sync/atomic.StoreUint64": ext۰atomic۰StoreUint64, + "(*sync/atomic.Value).Load": ext۰atomic۰ValueLoad, + "(*sync/atomic.Value).Store": ext۰atomic۰ValueStore, + "testing.MainStart": ext۰testing۰MainStart, + "time.Sleep": ext۰time۰Sleep, + "time.now": ext۰time۰now, } { externals[k] = v } @@ -500,6 +501,10 @@ func ext۰cpu۰cpuid(fr *frame, args []value) value { return tuple{uint32(0), uint32(0), uint32(0), uint32(0)} } +func ext۰syscall۰unix۰syscall_fcntl(fr *frame, args []value) value { + return tuple{int(0), wrapError(nil)} +} + // Pretend: type runtime.Func struct { entry *ssa.Function } func ext۰runtime۰Func۰FileLine(fr *frame, args []value) value {