* Handle select relocations while generating trampolines Trampoline generation for all function signatures exposed a preexisting bug in wasmtime where trampoline generation occasionally does have relocations, but it's asserted that trampolines don't generate relocations, causing a panic. The relocation is currently primarily the probestack function which happens when functions might have a huge number of parameters, but not so huge as to blow the wasmparser limit of how many parameters are allowed. This commit fixes the issue by handling relocations for trampolines in the same manner as the rest of the code. Note that dynamically-generated trampolines via the `Func` API still panic if they have too many arguments and generate a relocation, but it seems like we can try to fix that later if the need truly arises. Closes #1322 * Log trampoline relocations
135 lines
7.7 KiB
Plaintext
135 lines
7.7 KiB
Plaintext
(module
|
|
(type (;0;) (func (param
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
i32 i32 i32 i32 i32 i32 i32 i32 i32 i32
|
|
)
|
|
|
|
(result i32)
|
|
))
|
|
(func (export "x") (type 0) local.get 0)
|
|
)
|
|
|
|
(assert_return
|
|
(invoke "x"
|
|
(i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
(i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)
|
|
)
|
|
(i32.const 1)
|
|
)
|