Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rustc: Update wasm32 support for LLVM 9 #62809

Merged
merged 2 commits into from
Jul 29, 2019
Merged

Commits on Jul 25, 2019

  1. rustc: Update wasm32 support for LLVM 9

    This commit brings in a number of minor updates for rustc's support for
    the wasm target which has changed in the LLVM 9 update. Notable updates
    include:
    
    * The compiler now no longer manually inserts the `producers` section,
      instead relying on LLVM to do so. LLVM uses the `llvm.ident` metadata
      for the `processed-by` directive (which is now emitted on the wasm
      target in this PR) and it uses debuginfo to figure out what `language`
      to put in the `producers` section.
    
    * Threaded WebAssembly code now requires different flags to be passed
      with LLD. In LLD we now pass:
    
      * `--shared-memory` - required since objects are compiled with
        atomics. This also means that the generated memory will be marked as
        `shared`.
      * `--max-memory=1GB` - required with the `--shared-memory` argument
        since shared memories in WebAssembly must have a maximum size. The
        1GB number is intended to be a conservative estimate for rustc, but
        it should be overridable with `-C link-arg` if necessary.
      * `--passive-segments` - this has become the default for multithreaded
        memory, but when compiling a threaded module all data segments need
        to be marked as passive to ensure they don't re-initialize memory
        for each thread. This will also cause LLD to emit a synthetic
        function to initialize memory which users will have to arrange to
        call.
      * The `__heap_base` and `__data_end` globals are explicitly exported
        since they're now hidden by default due to the `--export` flags we
        pass to LLD.
    alexcrichton committed Jul 25, 2019
    Configuration menu
    Copy the full SHA
    a120caf View commit details
    Browse the repository at this point in the history
  2. std: Use native #[thread_local] TLS on wasm

    This commit moves `thread_local!` on WebAssembly targets to using the
    `#[thread_local]` attribute in LLVM. This was recently implemented
    upstream and is [in the process of being documented][dox]. This change
    only takes affect if modules are compiled with `+atomics` which is
    currently unstable and a pretty esoteric method of compiling wasm
    artifacts.
    
    This "new power" of the wasm toolchain means that the old
    `wasm-bindgen-threads` feature of the standard library can be removed
    since it should now be possible to create a fully functioning threaded
    wasm module without intrusively dealing with libstd symbols or
    intrinsics. Yay!
    
    [dox]: WebAssembly/tool-conventions#116
    alexcrichton committed Jul 25, 2019
    Configuration menu
    Copy the full SHA
    dc50a63 View commit details
    Browse the repository at this point in the history