Commit | Line | Data |
---|---|---|
82704155 | 1 | @c Copyright (C) 2017-2019 Free Software Foundation, Inc. |
f96bd6c2 PC |
2 | @c This is part of the GAS manual. |
3 | @c For copying conditions, see the file as.texinfo. | |
4 | @c man end | |
5 | ||
6 | @ifset GENERIC | |
7 | @page | |
8 | @node WebAssembly-Dependent | |
9 | @chapter WebAssembly Dependent Features | |
10 | @end ifset | |
11 | ||
12 | @ifclear GENERIC | |
13 | @node Machine Dependencies | |
14 | @chapter WebAssembly Dependent Features | |
15 | @end ifclear | |
16 | ||
17 | @cindex WebAssembly support | |
18 | @menu | |
19 | * WebAssembly-Notes:: Notes | |
20 | * WebAssembly-Syntax:: Syntax | |
21 | * WebAssembly-Floating-Point:: Floating Point | |
22 | * WebAssembly-Opcodes:: Opcodes | |
23 | * WebAssembly-module-layout:: Module Layout | |
24 | @end menu | |
25 | ||
26 | @node WebAssembly-Notes | |
27 | @section Notes | |
28 | @cindex WebAssembly notes | |
29 | @cindex notes for WebAssembly | |
30 | ||
31 | While WebAssembly provides its own module format for executables, this | |
32 | documentation describes how to use @code{@value{AS}} to produce | |
33 | intermediate ELF object format files. | |
34 | ||
35 | @node WebAssembly-Syntax | |
36 | @section Syntax | |
37 | @cindex WebAssembly Syntax | |
38 | The assembler syntax directly encodes sequences of opcodes as defined | |
39 | in the WebAssembly binary encoding specification at | |
40 | https://github.com/webassembly/spec/BinaryEncoding.md. Structured | |
41 | sexp-style expressions are not supported as input. | |
42 | ||
43 | @menu | |
44 | * WebAssembly-Chars:: Special Characters | |
45 | * WebAssembly-Relocs:: Relocations | |
46 | * WebAssembly-Signatures:: Signatures | |
47 | @end menu | |
48 | ||
49 | @node WebAssembly-Chars | |
50 | @subsection Special Characters | |
51 | ||
52 | @cindex line comment character, WebAssembly | |
53 | @cindex WebAssembly line comment character | |
54 | @samp{#} and @samp{;} are the line comment characters. Note that if | |
55 | @samp{#} is the first character on a line then it can also be a | |
56 | logical line number directive (@pxref{Comments}) or a preprocessor | |
57 | control command (@pxref{Preprocessing}). | |
58 | ||
59 | @node WebAssembly-Relocs | |
60 | @subsection Relocations | |
61 | @cindex WebAssembly relocations | |
62 | @cindex relocations, WebAssembly | |
63 | ||
64 | Special relocations are available by using the @samp{@@@var{plt}}, | |
65 | @samp{@@@var{got}}, or @samp{@@@var{got}} suffixes after a constant | |
66 | expression, which correspond to the R_ASMJS_LEB128_PLT, | |
67 | R_ASMJS_LEB128_GOT, and R_ASMJS_LEB128_GOT_CODE relocations, | |
68 | respectively. | |
69 | ||
70 | The @samp{@@@var{plt}} suffix is followed by a symbol name in braces; | |
71 | the symbol value is used to determine the function signature for which | |
72 | a PLT stub is generated. Currently, the symbol @emph{name} is parsed | |
73 | from its last @samp{F} character to determine the argument count of | |
74 | the function, which is also necessary for generating a PLT stub. | |
75 | ||
76 | @node WebAssembly-Signatures | |
77 | @subsection Signatures | |
78 | @cindex WebAssembly signatures | |
79 | @cindex signatures, WebAssembly | |
80 | ||
81 | Function signatures are specified with the @code{signature} | |
82 | pseudo-opcode, followed by a simple function signature imitating a | |
83 | C++-mangled function type: @code{F} followed by an optional @code{v}, | |
84 | then a sequence of @code{i}, @code{l}, @code{f}, and @code{d} | |
85 | characters to mark i32, i64, f32, and f64 parameters, respectively; | |
86 | followed by a final @code{E} to mark the end of the function | |
87 | signature. | |
88 | ||
89 | @node WebAssembly-Floating-Point | |
90 | @section Floating Point | |
91 | @cindex floating point, WebAssembly (@sc{ieee}) | |
92 | @cindex WebAssembly floating point (@sc{ieee}) | |
93 | WebAssembly uses little-endian @sc{ieee} floating-point numbers. | |
94 | ||
95 | @node WebAssembly-Opcodes | |
96 | @section Regular Opcodes | |
97 | @cindex opcodes, WebAssembly | |
98 | @cindex WebAssembly opcodes | |
99 | Ordinary instructions are encoded with the WebAssembly mnemonics as | |
100 | listed at: | |
101 | @url{https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md}. | |
102 | ||
103 | Opcodes are written directly in the order in which they are encoded, | |
104 | without going through an intermediate sexp-style expression as in the | |
105 | @code{was} format. | |
106 | ||
107 | For ``typed'' opcodes (block, if, etc.), the type of the block is | |
108 | specified in square brackets following the opcode: @code{if[i]}, | |
109 | @code{if[]}. | |
110 | ||
111 | @node WebAssembly-module-layout | |
112 | @section WebAssembly Module Layout | |
113 | @cindex module layout, WebAssembly | |
114 | @cindex WebAssembly module layout | |
115 | @code{@value{AS}} will only produce ELF output, not a valid | |
116 | WebAssembly module. It is possible to make @code{@value{AS}} produce | |
117 | output in a single ELF section which becomes a valid WebAssembly | |
118 | module, but a linker script to do so may be preferrable, as it doesn't | |
119 | require running the entire module through the assembler at once. |