Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/security/rlbox/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 3 kB image not shown  

Quelle  rlbox.mozbuild   Sprache: unbekannt

 
Spracherkennung für: .mozbuild vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.


@template
def RLBoxLibrary(name, use_segue=True):
    WASM_SOURCES += [
        "/memory/mozalloc/mozalloc.cpp",
        "/third_party/rlbox_wasm2c_sandbox/c_src/wasm2c_sandbox_wrapper.c",
    ]

    if CONFIG["DEVELOPER_OPTIONS"]:
        wasm_sources = sorted(f"!{name}.wasm_{n}.c" for n in range(16))
    else:
        wasm_sources = [f"!{name}.wasm.c"]
    SOURCES += wasm_sources
    SOURCES += ["/third_party/wasm2c/wasm2c/wasm-rt-impl.c"]
    SOURCES += ["/third_party/wasm2c/wasm2c/wasm-rt-mem-impl.c"]

    # Configuration for the wasm2c runtime used by RLBox

    # Enable SIMD autovectorization
    if CONFIG["WASM_CC_VERSION"] and int(CONFIG["WASM_CC_VERSION"].split(".")[0]) >= 11:
        WASM_CXXFLAGS += ["-msimd128"]

    # Use a mmap style allocation
    DEFINES["WASM_RT_USE_MMAP"] = 1

    # Don't use internal signal handler as Firefox already provides one
    DEFINES["WASM_RT_SKIP_SIGNAL_RECOVERY"] = 1

    # We provide a custom trap handler that calls MOZ_CRASH
    DEFINES["WASM_RT_TRAP_HANDLER"] = "moz_wasm2c_trap_handler"

    # Don't limit the nested call depth
    DEFINES["WASM_RT_NONCONFORMING_UNCHECKED_STACK_EXHAUSTION"] = 1

    # Configure the wasm runtime to invoke a callback when a Wasm memory growth
    # fails inside the sandbox. This information is used to annotate crash reports.
    DEFINES["WASM_RT_GROW_FAILED_HANDLER"] = "moz_wasm2c_memgrow_failed"

    for source in wasm_sources:
        SOURCES[source].flags += ["-Wno-unused"]

    # Use Segue optimization. Since this requires passing the "-mfsgsbase", we
    # restrict this to compilers and architectures that support this flag.
    # Manually exclude android for now due to bug in upstream wasm2c support
    if (
        use_segue
        and CONFIG["CC_TYPE"] in ("clang", "gcc")
        and CONFIG["TARGET_CPU"] == "x86_64"
        and CONFIG["OS_TARGET"] != "Android"
        # https://github.com/llvm/llvm-project/issues/124238
        and not (CONFIG["MOZ_ASAN"] or CONFIG["MOZ_TSAN"])
    ):
        # Setting WASM_RT_ALLOW_SEGUE means Segue is used on supported
        # OS/compiler/Arch combinations. For example, it is used for
        # Linux/clang/x86_64 but not on Windows
        DEFINES["WASM_RT_ALLOW_SEGUE"] = 1

        # Segue can assume there is no other use of the segment register by the
        # application. This is fine as the System V ABI for x86_64 systems does
        # not use the gs register for any other purpose.
        DEFINES["WASM_RT_SEGUE_FREE_SEGMENT"] = 1

        # Add a compiler flag for the wasm2c produced file to enable use of
        # wrgsbase64 instruction via intrinsics. While this instruction is
        # available only on CPUs starting Ivybridge, the wasm2c runtime checks for
        # support before using this instruction. Thus, enabling this flag does not
        # introduce a dependency on newer CPUs to Firefox.
        CFLAGS += ["-mfsgsbase"]

    WASM_DEFINES["MOZ_IN_WASM_SANDBOX"] = True
    if CONFIG["ENABLE_CLANG_PLUGIN"]:
        WASM_DEFINES["MOZ_CLANG_PLUGIN"] = True

    SANDBOXED_WASM_LIBRARY_NAME = f"{name}.wasm"

    # Ideally we'd also list {name}.wasm.h as an output, but that would put the
    # generation in export rather than pre-compile, and we prefer the latter.
    GeneratedFile(
        f"{name}.wasm.c",
        script="/config/wasm2c.py",
        entry_point="wasm2c",
        inputs=["!/dist/host/bin/wasm2c" + CONFIG["HOST_BIN_SUFFIX"], f"!{name}.wasm"],
        flags=["--num-outputs", len(wasm_sources)] if len(wasm_sources) > 1 else [],
    )

[ Dauer der Verarbeitung: 0.37 Sekunden  ]