Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
WasmϦϯΧͷͭ͘Γ͔ͨ @kateinoigakukun WebAssembly Night #10 1
Slide 2
Slide 2 text
ࣗݾհ @kateinoigakukun • Πϯλʔϯ at ϝϧϖΠ ΤΩεύʔτνʔϜ • SwiftͷWebAssemblyରԠͳͲ • ڵຯ: ݴޠॲཧܥ, Swift 2
Slide 3
Slide 3 text
ϦϯΧΛ࡞ΔϞνϕʔγϣϯ 3
Slide 4
Slide 4 text
SwiftWasmϓϩδΣΫτ https://swiftwasm.org SwiftLLVMΛϑΥʔΫͯ͠SwiftͷWebAssemblyରԠΛਐΊΔ ϓϩδΣΫτɻ πʔϧνΣʔϯͷJavaScriptͱͷ࿈ܞϥΠϒϥϦͷ։ൃͳ ͲͬͯΔɻ 4
Slide 5
Slide 5 text
ϒϥβͰࢼͤ·͢ https://pad.swiftwasm.org/ 5
Slide 6
Slide 6 text
ҎલͷSwiftWasm PadͷΞʔΩςΫνϟ 6
Slide 7
Slide 7 text
• Swiftͷඪ४ϥΠϒϥϦα Πζ͕େ͖͍ • αʔόͰඪ४ϥΠϒϥϦ͕ ϦϯΫ͞Ε͍ͯΔͷͰμ ϯϩʔυαΠζ͕େ͖͘ͳ Δ 7
Slide 8
Slide 8 text
ݱࡏͷSwiftWasm PadͷΞʔΩςΫνϟ 8
Slide 9
Slide 9 text
WasmͷಈతϦϯΫ ٞWebAssembly/module-linking ͰਐΜͰ͍Δ͕ɺStable ͳAPI·ͩແ͍ɻ EmscriptenͰಈతϦϯΫͰ͖ΔΒ͍͕͠SwiftLLVMͷWasm όοΫΤϯυΛ͍ͬͯΔͷͰͦͷ··͑ͳ͍ɻ 9
Slide 10
Slide 10 text
ϒϥβͰಈ͘WasmϦϯΧΛ࡞Ζ͏ʂ 10
Slide 11
Slide 11 text
WebAssemblyͷϦϯΧࣄ • ίϯύΠϥͱϦϯΧͷؒʹඪ४ͷ༷͕ແ͍1 • ΦϒδΣΫτϑΝΠϧͷϑΥʔϚοτͳͲ • πʔϧνΣʔϯ͝ͱʹίϯϕϯγϣϯ͕͋Δ • lld (wasm-ld)͕LLVMͷίϯϕϯγϣϯΛຬͨ͢།Ұͷ࣮ ʢଞʹ͋Εڭ͑ͯԼ͍͞ʣ 1 ҰԠυΩϡϝϯτ͋Δ https://github.com/WebAssembly/tool-conventions/blob/master/Linking.md 11
Slide 12
Slide 12 text
ϦϯΧͷࣄ • ಉ͡ηΫγϣϯΛϚʔδ • γϯϘϧͷղܾ • ࠶ஔ 12
Slide 13
Slide 13 text
ಉ͡ηΫγϣϯΛϚʔδ • ࣈͷ͝ͱ͘Ϛʔδ͢Δ • ϦϯΧ͕ੜ͢Δؔ σʔλྖҬ͓ࠞͥͯ͘ • ελοΫྖҬ (__stack_pointer) • ίϯετϥΫλ (__wasm_call_ctors) 13
Slide 14
Slide 14 text
γϯϘϧͷղܾ // lib.c int add(int a, int b) { return a + b; } // main.c int add(int a, int b); int main(void) { return add(1, -1); } 14
Slide 15
Slide 15 text
࠶ஔ ࠶ஔϨίʔυͱγϯϘϧςʔϒϧΛݩʹϦϯΫޙͷγϯϘϧ ͷΞυϨεΛॻ͖ࠐΉ // main.c int add(int a, int b); int main(void) { return add(1, -1); // addؔͷϦϯΫޙͷΞυϨεΛΓ͍ͨ } 15
Slide 16
Slide 16 text
$ wasm-objdump --details --section=reloc.CODE main.o main.o: file format wasm 0x1 Section Details: Custom: - name: "reloc.CODE" - relocations for section: 3 (Code) [5] - R_WASM_GLOBAL_INDEX_LEB offset=0x000006(file=0x00008f) symbol=1 - R_WASM_GLOBAL_INDEX_LEB offset=0x00001b(file=0x0000a4) symbol=1 - R_WASM_FUNCTION_INDEX_LEB offset=0x000038(file=0x0000c1) symbol=2 - R_WASM_GLOBAL_INDEX_LEB offset=0x00004d(file=0x0000d6) symbol=1 - R_WASM_FUNCTION_INDEX_LEB offset=0x00005b(file=0x0000e4) symbol=0 <__original_main> 16
Slide 17
Slide 17 text
$ wasm-objdump --details --section=reloc.CODE main.o main.o: file format wasm 0x1 Section Details: Custom: - name: "reloc.CODE" - relocations for section: 3 (Code) [5] - R_WASM_GLOBAL_INDEX_LEB offset=0x000006(file=0x00008f) symbol=1 - R_WASM_GLOBAL_INDEX_LEB offset=0x00001b(file=0x0000a4) symbol=1 - R_WASM_FUNCTION_INDEX_LEB offset=0x000038(file=0x0000c1) symbol=2 - R_WASM_GLOBAL_INDEX_LEB offset=0x00004d(file=0x0000d6) symbol=1 - R_WASM_FUNCTION_INDEX_LEB offset=0x00005b(file=0x0000e4) symbol=0 <__original_main> 16
Slide 18
Slide 18 text
kateinoigakukun/chibi-link • ࠓճ࡞ͬͨSwiftWasmϦϯΧ • SwiftΛϦϯΫ͢Δͷʹ࠷খݶͳػೳ • ϦϯΧຊମ3000ߦ͘Β͍Ͱখ͞Ί $ wasmtime run --mapdir=/var/tmp::$(pwd) chibi-link.wasm -- \ /var/tmp/lib.o /var/tmp/main.o -o /var/tmp/output.wasm 17
Slide 19
Slide 19 text
͕͜͜ਏ͍ΑϦϯΧ։ൃ • ίϯύΠϥͱϦϯΧͷࡉʑͨ͠ଋ͕໌จԽ͞Ε͍ͯͳ͍ • σʔληάϝϯτͷ։࢝ͱऴΘΓͷΞυϨεΛ__start_/ __stop_{{segment_name}}ͷγϯϘϧͰެ։͠ͳ͍ͱ͍͚ͳ͍ • ؔςʔϒϧͷ0൪τϥοϓͷͨΊʹ֬อ͢Δ • etc... • σόοά͕େม • ϦϯΫ݁Ռ͕յΕ͍ͯΔͱɺϝϞϦΛഁյ͠ͳ͕Βಈ͍ͪΌ͏ 18
Slide 20
Slide 20 text
·ͱΊ • ΫϥΠΞϯταΠυϦϯΧ͕https://pad.swiftwasm.org/ Ͱ ΘΕͯΔ • ϦϯΧͷΔ͜ͱҙ֎ͱগͳ͍ • Wasm༷͕·ͩখ͍͞ͷͰϦϯΧΛॻ͘ͷʹ͓͢͢Ίʂ 19