From 5b581d83b379d77472405ffc1296939b7af409d4 Mon Sep 17 00:00:00 2001 From: Charlie Haley Date: Wed, 26 Jul 2023 18:22:49 +0100 Subject: [PATCH] compiler: add compiler-rt and wasm symbols to table --- builder/ar.go | 20 +++++++++++++++++++- targets/wasi.json | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/builder/ar.go b/builder/ar.go index c3aad171..3f1c8c21 100644 --- a/builder/ar.go +++ b/builder/ar.go @@ -12,6 +12,7 @@ import ( "path/filepath" "time" + wasm "github.com/aykevl/go-wasm" "github.com/blakesmith/ar" ) @@ -74,8 +75,25 @@ func makeArchive(arfile *os.File, objs []string) error { fileIndex int }{symbol.Name, i}) } + } else if dbg, err := wasm.Parse(objfile); err == nil { + for _, s := range dbg.Sections { + switch section := s.(type) { + case *wasm.SectionImport: + for _, ln := range section.Entries { + + if ln.Kind != wasm.ExtKindFunction { + // Not a function + continue + } + symbolTable = append(symbolTable, struct { + name string + fileIndex int + }{ln.Field, i}) + } + } + } } else { - return fmt.Errorf("failed to open file %s as ELF or PE/COFF: %w", objpath, err) + return fmt.Errorf("failed to open file %s as WASM, ELF or PE/COFF: %w", objpath, err) } // Close file, to avoid issues with too many open files (especially on diff --git a/targets/wasi.json b/targets/wasi.json index f55c7c1f..83f808e8 100644 --- a/targets/wasi.json +++ b/targets/wasi.json @@ -7,6 +7,7 @@ "goarch": "arm", "linker": "wasm-ld", "libc": "wasi-libc", + "rtlib": "compiler-rt", "scheduler": "asyncify", "default-stack-size": 16384, "cflags": [