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