* initial commit for WASI support
* merge "time" package with wasi build tag
* override syscall package with wasi build tag
* create runtime_wasm_{js,wasi}.go files
* create syscall_wasi.go file
* create time/zoneinfo_wasi.go file as the replacement of zoneinfo_js.go
* add targets/wasi.json target
* set visbility hidden for runtime extern variables
Accodring to the WASI docs (https://github.com/WebAssembly/WASI/blob/master/design/application-abi.md#current-unstable-abi),
none of exports of WASI executable(Command) should no be accessed.
v0.19.0 of bytecodealliance/wasmetime, which is often refered to as the reference implementation of WASI,
does not accept any exports except functions and the only limited variables like "table", "memory".
* merge syscall_{baremetal,wasi}.go
* fix js target build
* mv wasi functions to syscall/wasi && implement sleepTicks
* WASI: set visibility hidden for globals variables
* mv back syscall/wasi/* to runtime package
* WASI: add test
* unexport wasi types
* WASI test: fix wasmtime path
* stop changing visibility of runtime.alloc
* use GOOS=linux, GOARCH=arm for wasi target
Signed-off-by: mathetake <takeshi@tetrate.io>
* WASI: fix build tags for os/runtime packages
Signed-off-by: mathetake <takeshi@tetrate.io>
* run WASI test only on Linux
Signed-off-by: mathetake <takeshi@tetrate.io>
* set InternalLinkage instead of changing visibility
Signed-off-by: mathetake <takeshi@tetrate.io>
31 строка
1,6 КиБ
LLVM
31 строка
1,6 КиБ
LLVM
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
|
|
target triple = "wasm32-unknown-unknown-wasm"
|
|
|
|
%runtime._string = type { i8*, i32 }
|
|
%runtime._interface = type { i32, i8* }
|
|
|
|
@globalInt = global i32 5
|
|
@constString = constant %runtime._string zeroinitializer
|
|
@constInterface = constant %runtime._interface zeroinitializer
|
|
@runtime.trackedGlobalsLength = internal global i32 4
|
|
@runtime.trackedGlobalsBitmap = external global [0 x i8]
|
|
@runtime.trackedGlobalsStart = internal global i32 ptrtoint ({ %runtime._string, %runtime._interface }* @tinygo.trackedGlobals to i32)
|
|
@tinygo.trackedGlobals = internal unnamed_addr global { %runtime._string, %runtime._interface } zeroinitializer
|
|
@runtime.trackedGlobalsBitmap.1 = internal global [1 x i8] c"\09"
|
|
|
|
define void @main() {
|
|
%1 = load i32, i32* @globalInt
|
|
%2 = load %runtime._string, %runtime._string* getelementptr inbounds ({ %runtime._string, %runtime._interface }, { %runtime._string, %runtime._interface }* @tinygo.trackedGlobals, i32 0, i32 0)
|
|
%3 = load %runtime._interface, %runtime._interface* getelementptr inbounds ({ %runtime._string, %runtime._interface }, { %runtime._string, %runtime._interface }* @tinygo.trackedGlobals, i32 0, i32 1)
|
|
%4 = load %runtime._string, %runtime._string* @constString
|
|
%5 = load %runtime._interface, %runtime._interface* @constInterface
|
|
ret void
|
|
}
|
|
|
|
define void @runtime.markGlobals() {
|
|
%1 = load i32, i32* @runtime.trackedGlobalsStart
|
|
%2 = load i32, i32* @runtime.trackedGlobalsLength
|
|
%3 = getelementptr inbounds [0 x i8], [0 x i8]* bitcast ([1 x i8]* @runtime.trackedGlobalsBitmap.1 to [0 x i8]*), i32 0, i32 0
|
|
%4 = load i8, i8* %3
|
|
ret void
|
|
}
|