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 Swift΍LLVMΛϑΥʔΫͯ͠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Ͱ͸ಈతϦϯΫͰ͖ΔΒ͍͕͠Swift͸LLVMͷ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 • ࠓճ࡞ͬͨSwift੡WasmϦϯΧ • 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