Skip to content

What is realloc-via-memory-grow on wasm-tools component new supposed to do? #2404

@arjunr2

Description

@arjunr2

When trying to use wasm-tools component new, I noticed the realloc-via-memory-grow option.

My intuition was that this provides a default cabi_realloc implementation if the module doesn't contain one. However, I notice that it basically errors out if no cabi_realloc export is provided? (and if one is provided, it just uses that). Am I correct on the purpose of this flag? Not sure exactly what it's supposed to do.

Reproducing the Setup

Here is a simple test for what I'm trying:

A component string.wat

(module
    (type (;0;) (func (param i32 i32 i32)))
    (type (;1;) (func (result i32)))
    (type (;2;) (func (param i32 i64) (result i64)))
    (import "component:test-package/env" "reverse-string" (func $reverse_import (type 0)))
    (global $bump (mut i32) (i32.const 4096))
    (func $main (export "main") (param i32 i32) (result i32)
        (local $str_ptr i32)
        i32.const 100
        local.set $str_ptr
        local.get 0
        local.get 1
        local.get $str_ptr
        call $reverse_import
        local.get $str_ptr
    )
    (memory (export "memory") 1)
)

A WIT file string.wit

package root:component;

world root {
  import component:test-package/env;

  export main: func(x: string) -> string;
}
package component:test-package {
  interface env {
    reverse-string: func(s: string) -> string;
  }
}

Running the following commands:

wasm-tools component embed -t -o string-cc.wat string.wat string.wit
wasm-tools component new --realloc-via-memory-grow -t -o string-component.wat string-cc.wat

produces this:

error: failed to encode a component from module

Caused by:
    0: module does not export a function named `cabi_realloc`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions