Files
wazero/internal/gojs/custom/names.go
Crypt Keeper 6243091dc2 renames exit log scope to proc and resolves gojs files to cwd (#1223)
Many tests failed in gojs due to needing to be resolved against the CWD,
which is atypically stored host side. This fixes that and renames the
"exit" scope to "proc" so we can use it for other proc concerns besides
exit.

This reduces known failures on GOOS=js from 23 to 14:
```bash
$ wazero run -mount=/usr/local/go/src/os:/:ro -mount=/tmp:/tmp -mount=/etc:/etc:ro -mount=/usr:/usr:ro -mount=/dev:/dev:ro os.wasm |grep '^--- FAIL'|wc -l
      14
```

See #1222

Signed-off-by: Adrian Cole <adrian@tetrate.io>
2023-03-13 11:41:19 +08:00

197 lines
6.0 KiB
Go

// Package custom is similar to the WebAssembly Custom Sections. These are
// needed because `GOARCH=wasm GOOS=js` functions aren't defined naturally
// in WebAssembly. For example, every function has a single parameter "sp",
// which implicitly maps to stack parameters in this package.
package custom
const (
// NamePadding is a marker for a parameter which has no purpose, except
// padding. It should not be logged.
NamePadding = "padding"
)
type Names struct {
// Name is the WebAssembly function name.
Name string
// ParamNames are the parameters read in 8-byte strides from the stack
// pointer (SP). This may be nil or include NamePadding.
ParamNames []string
// ResultNames are the results written in 8-byte strides from the stack
// pointer (SP), after ParamNames.
ResultNames []string
}
const (
NameCallback = "callback"
NameDebug = "debug"
)
const (
NameRuntimeWasmExit = "runtime.wasmExit"
NameRuntimeWasmWrite = "runtime.wasmWrite"
NameRuntimeResetMemoryDataView = "runtime.resetMemoryDataView"
NameRuntimeNanotime1 = "runtime.nanotime1"
NameRuntimeWalltime = "runtime.walltime"
NameRuntimeScheduleTimeoutEvent = "runtime.scheduleTimeoutEvent"
NameRuntimeClearTimeoutEvent = "runtime.clearTimeoutEvent"
NameRuntimeGetRandomData = "runtime.getRandomData"
)
const (
NameSyscallFinalizeRef = "syscall/js.finalizeRef"
NameSyscallStringVal = "syscall/js.stringVal"
NameSyscallValueGet = "syscall/js.valueGet"
NameSyscallValueSet = "syscall/js.valueSet"
NameSyscallValueDelete = "syscall/js.valueDelete" // stubbed
NameSyscallValueIndex = "syscall/js.valueIndex"
NameSyscallValueSetIndex = "syscall/js.valueSetIndex" // stubbed
NameSyscallValueCall = "syscall/js.valueCall"
NameSyscallValueInvoke = "syscall/js.valueInvoke" // stubbed
NameSyscallValueNew = "syscall/js.valueNew"
NameSyscallValueLength = "syscall/js.valueLength"
NameSyscallValuePrepareString = "syscall/js.valuePrepareString"
NameSyscallValueLoadString = "syscall/js.valueLoadString"
NameSyscallValueInstanceOf = "syscall/js.valueInstanceOf" // stubbed
NameSyscallCopyBytesToGo = "syscall/js.copyBytesToGo"
NameSyscallCopyBytesToJS = "syscall/js.copyBytesToJS"
)
var NameSection = map[string]*Names{
NameDebug: {
Name: NameDebug,
ParamNames: []string{},
ResultNames: []string{},
},
NameRuntimeWasmExit: {
Name: NameRuntimeWasmExit,
ParamNames: []string{"code"},
ResultNames: []string{},
},
NameRuntimeWasmWrite: {
Name: NameRuntimeWasmWrite,
ParamNames: []string{"fd", "p", "p_len"},
ResultNames: []string{},
},
NameRuntimeResetMemoryDataView: {
Name: NameRuntimeResetMemoryDataView,
ParamNames: []string{},
ResultNames: []string{},
},
NameRuntimeNanotime1: {
Name: NameRuntimeNanotime1,
ParamNames: []string{},
ResultNames: []string{"nsec"},
},
NameRuntimeWalltime: {
Name: NameRuntimeWalltime,
ParamNames: []string{},
ResultNames: []string{"sec", "nsec"},
},
NameRuntimeScheduleTimeoutEvent: {
Name: NameRuntimeScheduleTimeoutEvent,
ParamNames: []string{"ms"},
ResultNames: []string{"id"},
},
NameRuntimeClearTimeoutEvent: {
Name: NameRuntimeClearTimeoutEvent,
ParamNames: []string{"id"},
ResultNames: []string{},
},
NameRuntimeGetRandomData: {
Name: NameRuntimeGetRandomData,
ParamNames: []string{"r", "r_len"},
ResultNames: []string{},
},
NameSyscallFinalizeRef: {
Name: NameSyscallFinalizeRef,
ParamNames: []string{"r"},
ResultNames: []string{},
},
NameSyscallStringVal: {
Name: NameSyscallStringVal,
ParamNames: []string{"x", "x_len"},
ResultNames: []string{"r"},
},
NameSyscallValueGet: {
Name: NameSyscallValueGet,
ParamNames: []string{"v", "p", "p_len"},
ResultNames: []string{"r"},
},
NameSyscallValueSet: {
Name: NameSyscallValueSet,
ParamNames: []string{"v", "p", "p_len", "x"},
ResultNames: []string{},
},
NameSyscallValueDelete: {
Name: NameSyscallValueDelete,
ParamNames: []string{"v", "p", "p_len"},
ResultNames: []string{},
},
NameSyscallValueIndex: {
Name: NameSyscallValueIndex,
ParamNames: []string{"v", "i"},
ResultNames: []string{"r"},
},
NameSyscallValueSetIndex: {
Name: NameSyscallValueSetIndex,
ParamNames: []string{"v", "i", "x"},
ResultNames: []string{},
},
NameSyscallValueCall: {
Name: NameSyscallValueCall,
ParamNames: []string{"v", "m", "m_len", "args", "args_len", NamePadding},
ResultNames: []string{"res", "ok"},
},
NameSyscallValueInvoke: {
Name: NameSyscallValueInvoke,
ParamNames: []string{"v", "args", "args_len", NamePadding},
ResultNames: []string{"res", "ok"},
},
NameSyscallValueNew: {
Name: NameSyscallValueNew,
ParamNames: []string{"v", "args", "args_len", NamePadding},
ResultNames: []string{"res", "ok"},
},
NameSyscallValueLength: {
Name: NameSyscallValueLength,
ParamNames: []string{"v"},
ResultNames: []string{"len"},
},
NameSyscallValuePrepareString: {
Name: NameSyscallValuePrepareString,
ParamNames: []string{"v"},
ResultNames: []string{"str", "length"},
},
NameSyscallValueLoadString: {
Name: NameSyscallValueLoadString,
ParamNames: []string{"v", "b", "b_len"},
ResultNames: []string{},
},
NameSyscallValueInstanceOf: {
Name: NameSyscallValueInstanceOf,
ParamNames: []string{"v", "t"},
ResultNames: []string{"ok"},
},
NameSyscallCopyBytesToGo: {
Name: NameSyscallCopyBytesToGo,
ParamNames: []string{"dst", "dst_len", NamePadding, "src"},
ResultNames: []string{"n", "ok"},
},
NameSyscallCopyBytesToJS: {
Name: NameSyscallCopyBytesToJS,
ParamNames: []string{"dst", "src", "src_len", NamePadding},
ResultNames: []string{"n", "ok"},
},
}
var NameSectionSyscallValueCall = map[string]map[string]*Names{
NameCrypto: CryptoNameSection,
NameDate: DateNameSection,
NameFs: FsNameSection,
NameProcess: ProcessNameSection,
}