aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAyke van Laethem <[email protected]>2024-03-12 21:52:52 +0100
committerdeadprogram <[email protected]>2024-03-19 07:12:22 +0100
commit78775007fa475a08dd64d5bd4b0093e8ece6fc52 (patch)
tree07998052605f5fe3ae14cd42dc9cf485c11ce7ea
parentad4d722f54b1521e163ce5d0687f51817fccf617 (diff)
downloadtinygo-78775007fa475a08dd64d5bd4b0093e8ece6fc52.tar.gz
tinygo-78775007fa475a08dd64d5bd4b0093e8ece6fc52.zip
wasm: fix symbol table index for archives
The symbol table was generated incorrectly. The correct way is to use the custom linking WebAssembly section, which I implemented in go-wasm for this purpose. This fixes https://github.com/tinygo-org/tinygo/issues/4114 and is a prerequisite for https://github.com/tinygo-org/tinygo/pull/4176.
-rw-r--r--builder/ar.go22
-rw-r--r--go.mod2
-rw-r--r--go.sum4
3 files changed, 19 insertions, 9 deletions
diff --git a/builder/ar.go b/builder/ar.go
index 3f1c8c213..578b88ba5 100644
--- a/builder/ar.go
+++ b/builder/ar.go
@@ -78,17 +78,27 @@ func makeArchive(arfile *os.File, objs []string) error {
} 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
+ case *wasm.SectionLinking:
+ for _, symbol := range section.Symbols {
+ if symbol.Flags&wasm.LinkingSymbolFlagUndefined != 0 {
+ // Don't list undefined functions.
+ continue
+ }
+ if symbol.Flags&wasm.LinkingSymbolFlagBindingLocal != 0 {
+ // Don't include local symbols.
+ continue
+ }
+ if symbol.Kind != wasm.LinkingSymbolKindFunction && symbol.Kind != wasm.LinkingSymbolKindData {
+ // Link functions and data symbols.
+ // Some data symbols need to be included, such as
+ // __log_data.
continue
}
+ // Include in the archive.
symbolTable = append(symbolTable, struct {
name string
fileIndex int
- }{ln.Field, i})
+ }{symbol.Name, i})
}
}
}
diff --git a/go.mod b/go.mod
index 42a7e5f1c..aa10ee7b6 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/tinygo-org/tinygo
go 1.18
require (
- github.com/aykevl/go-wasm v0.0.2-0.20220616010729-4a0a888aebdc
+ github.com/aykevl/go-wasm v0.0.2-0.20240312204833-50275154210c
github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2
github.com/chromedp/cdproto v0.0.0-20220113222801-0725d94bb6ee
github.com/chromedp/chromedp v0.7.6
diff --git a/go.sum b/go.sum
index 28bd6e338..1fe5d7576 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,5 @@
-github.com/aykevl/go-wasm v0.0.2-0.20220616010729-4a0a888aebdc h1:Yp49g+qqgQRPk/gcRSmAsXgnT16XPJ6Y5JM1poc6gYM=
-github.com/aykevl/go-wasm v0.0.2-0.20220616010729-4a0a888aebdc/go.mod h1:7sXyiaA0WtSogCu67R2252fQpVmJMh9JWJ9ddtGkpWw=
+github.com/aykevl/go-wasm v0.0.2-0.20240312204833-50275154210c h1:4T0Vj1UkGgcpkRrmn7SbokebnlfxJcMZPgWtOYACAAA=
+github.com/aykevl/go-wasm v0.0.2-0.20240312204833-50275154210c/go.mod h1:7sXyiaA0WtSogCu67R2252fQpVmJMh9JWJ9ddtGkpWw=
github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2 h1:oMCHnXa6CCCafdPDbMh/lWRhRByN0VFLvv+g+ayx1SI=
github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI=
github.com/chromedp/cdproto v0.0.0-20211126220118-81fa0469ad77/go.mod h1:At5TxYYdxkbQL0TSefRjhLE3Q0lgvqKKMSFUglJ7i1U=