summaryrefslogtreecommitdiffstats
path: root/src/test/run-make/wasm-custom-section
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/run-make/wasm-custom-section')
-rw-r--r--src/test/run-make/wasm-custom-section/Makefile8
-rw-r--r--src/test/run-make/wasm-custom-section/bar.rs13
-rw-r--r--src/test/run-make/wasm-custom-section/foo.js36
-rw-r--r--src/test/run-make/wasm-custom-section/foo.rs8
4 files changed, 65 insertions, 0 deletions
diff --git a/src/test/run-make/wasm-custom-section/Makefile b/src/test/run-make/wasm-custom-section/Makefile
new file mode 100644
index 000000000..2f48b8525
--- /dev/null
+++ b/src/test/run-make/wasm-custom-section/Makefile
@@ -0,0 +1,8 @@
+-include ../../run-make-fulldeps/tools.mk
+
+# only-wasm32-bare
+
+all:
+ $(RUSTC) foo.rs --target wasm32-unknown-unknown
+ $(RUSTC) bar.rs -C lto -O --target wasm32-unknown-unknown
+ $(NODE) foo.js $(TMPDIR)/bar.wasm
diff --git a/src/test/run-make/wasm-custom-section/bar.rs b/src/test/run-make/wasm-custom-section/bar.rs
new file mode 100644
index 000000000..c95f3e143
--- /dev/null
+++ b/src/test/run-make/wasm-custom-section/bar.rs
@@ -0,0 +1,13 @@
+#![crate_type = "cdylib"]
+#![deny(warnings)]
+
+extern crate foo;
+
+#[link_section = "foo"]
+pub static A: [u8; 2] = [5, 6];
+
+#[link_section = "baz"]
+pub static B: [u8; 2] = [7, 8];
+
+#[no_mangle]
+pub extern fn foo() {}
diff --git a/src/test/run-make/wasm-custom-section/foo.js b/src/test/run-make/wasm-custom-section/foo.js
new file mode 100644
index 000000000..57a0f5073
--- /dev/null
+++ b/src/test/run-make/wasm-custom-section/foo.js
@@ -0,0 +1,36 @@
+const fs = require('fs');
+const process = require('process');
+const assert = require('assert');
+const buffer = fs.readFileSync(process.argv[2]);
+
+let m = new WebAssembly.Module(buffer);
+let sections = WebAssembly.Module.customSections(m, "baz");
+console.log('section baz', sections);
+assert.strictEqual(sections.length, 1);
+let section = new Uint8Array(sections[0]);
+console.log('contents', section);
+assert.strictEqual(section.length, 2);
+assert.strictEqual(section[0], 7);
+assert.strictEqual(section[1], 8);
+
+sections = WebAssembly.Module.customSections(m, "bar");
+console.log('section bar', sections);
+assert.strictEqual(sections.length, 1, "didn't pick up `bar` section from dependency");
+section = new Uint8Array(sections[0]);
+console.log('contents', section);
+assert.strictEqual(section.length, 2);
+assert.strictEqual(section[0], 3);
+assert.strictEqual(section[1], 4);
+
+sections = WebAssembly.Module.customSections(m, "foo");
+console.log('section foo', sections);
+assert.strictEqual(sections.length, 1, "didn't create `foo` section");
+section = new Uint8Array(sections[0]);
+console.log('contents', section);
+assert.strictEqual(section.length, 4, "didn't concatenate `foo` sections");
+assert.strictEqual(section[0], 5);
+assert.strictEqual(section[1], 6);
+assert.strictEqual(section[2], 1);
+assert.strictEqual(section[3], 2);
+
+process.exit(0);
diff --git a/src/test/run-make/wasm-custom-section/foo.rs b/src/test/run-make/wasm-custom-section/foo.rs
new file mode 100644
index 000000000..61f81f024
--- /dev/null
+++ b/src/test/run-make/wasm-custom-section/foo.rs
@@ -0,0 +1,8 @@
+#![crate_type = "rlib"]
+#![deny(warnings)]
+
+#[link_section = "foo"]
+pub static A: [u8; 2] = [1, 2];
+
+#[link_section = "bar"]
+pub static B: [u8; 2] = [3, 4];