summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Schuff <dschuff@chromium.org>2017-01-24 13:44:04 -0800
committerGitHub <noreply@github.com>2017-01-24 13:44:04 -0800
commit21eb2c7cba6af6e01219f1f3b06e82dfcf2788e8 (patch)
treef16ad91e1b429ab32fc3882e9b730b770d7dfb83
parent009f172a595d5554e7e85f6acacef34e9d4e8010 (diff)
downloadbinaryen-21eb2c7cba6af6e01219f1f3b06e82dfcf2788e8.tar.gz
binaryen-21eb2c7cba6af6e01219f1f3b06e82dfcf2788e8.tar.bz2
binaryen-21eb2c7cba6af6e01219f1f3b06e82dfcf2788e8.zip
Export memalign along with malloc and friends (#888)
Emscripten's mmap2 syscall started using memalign instead of malloc with kripken/emscripten#4874, so we need to export that as well.
-rw-r--r--src/wasm-linker.cpp14
-rw-r--r--test/dot_s/export_malloc_free.s20
-rw-r--r--test/dot_s/export_malloc_free.wast7
3 files changed, 31 insertions, 10 deletions
diff --git a/src/wasm-linker.cpp b/src/wasm-linker.cpp
index a319af889..757fc88ca 100644
--- a/src/wasm-linker.cpp
+++ b/src/wasm-linker.cpp
@@ -254,20 +254,16 @@ void Linker::layout() {
}
}
- // Export malloc, realloc, and free whenever availble. JavsScript version of
+ // Export malloc/realloc/free/memalign whenever availble. JavsScript version of
// malloc has some issues and it cannot be called once _sbrk() is called, and
// JS glue code does not have realloc(). TODO This should get the list of
// exported functions from emcc.py - it has EXPORTED_FUNCTION metadata to keep
// track of this. Get the list of exported functions using a command-line
// argument from emcc.py and export all of them.
- if (out.symbolInfo.implementedFunctions.count("malloc")) {
- exportFunction("malloc", true);
- }
- if (out.symbolInfo.implementedFunctions.count("free")) {
- exportFunction("free", true);
- }
- if (out.symbolInfo.implementedFunctions.count("realloc")) {
- exportFunction("realloc", true);
+ for (auto function : {"malloc", "free", "realloc", "memalign"}) {
+ if (out.symbolInfo.implementedFunctions.count(function)) {
+ exportFunction(function, true);
+ }
}
// finalize function table
diff --git a/test/dot_s/export_malloc_free.s b/test/dot_s/export_malloc_free.s
index 2ace10db9..084ab0383 100644
--- a/test/dot_s/export_malloc_free.s
+++ b/test/dot_s/export_malloc_free.s
@@ -36,4 +36,22 @@ realloc:
i32.const $push0=, 0
.endfunc
.Lfunc_end22:
- .size realloc, .Lfunc_end22-free
+ .size realloc, .Lfunc_end22-realloc
+
+ .type memalign,@function
+memalign:
+ .param i32, i32
+ .result i32
+ i32.const $push0=, 0
+ .endfunc
+.Lfunc_end2:
+ .size memalign, .Lfunc_end2-memalign
+
+ .type not_a_malloc,@function
+not_a_malloc:
+ .param i32, i32
+ .result i32
+ i32.const $push0=, 0
+ .endfunc
+.Lfunc_end2:
+ .size not_a_malloc, .Lfunc_end2-not_a_malloc
diff --git a/test/dot_s/export_malloc_free.wast b/test/dot_s/export_malloc_free.wast
index 96bcdf4ac..89bc15b1c 100644
--- a/test/dot_s/export_malloc_free.wast
+++ b/test/dot_s/export_malloc_free.wast
@@ -5,6 +5,7 @@
(export "malloc" (func $malloc))
(export "free" (func $free))
(export "realloc" (func $realloc))
+ (export "memalign" (func $memalign))
(func $main (result i32)
(i32.const 0)
)
@@ -16,5 +17,11 @@
(func $realloc (param $0 i32) (param $1 i32) (result i32)
(i32.const 0)
)
+ (func $memalign (param $0 i32) (param $1 i32) (result i32)
+ (i32.const 0)
+ )
+ (func $not_a_malloc (param $0 i32) (param $1 i32) (result i32)
+ (i32.const 0)
+ )
)
;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] }