Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  cargo-linker

  Sprache: C
 

#!/usr/bin/env python3

# If you want to use a custom linker with Cargo, Cargo requires that you
# specify it in Cargo.toml or via the matching environment variable.
# Passing extra options to the linker is possible with Cargo via
# RUSTFLAGS='-C link-args', but testing showed that doing this reliably
# was difficult.
#
# Our solution to these problems is to use this wrapper script.  We pass
# in the LD and the LDFLAGS to use via environment variables.
#
# * MOZ_CARGO_WRAP_LD is equivalent to CC on Unix-y platforms, and CC
#   frequently has additional arguments in addition to the compiler
#   itself.
#
# * MOZ_CARGO_WRAP_LDFLAGS contains space-separated arguments to pass,
#   and not quoting it ensures that each of those arguments is passed
#   as a separate argument to the actual LD.
#
# * In rare cases, we also need MOZ_CARGO_WRAP_LD_CXX, which is the
#   equivalent of CXX, when linking C++ code. Usually, this should
#   simply work by the use of CC and -lstdc++ (added by cc-rs).
#   However, in the case of sanitizer runtimes, there is a separate
#   runtime for C and C++ and linking C++ code with the C runtime can
#   fail if the requested feature is in the C++ runtime only (bug 1747298).

import os
import sys

# This is not necessarily run with a virtualenv python, so add
# the necessary directory for the shellutil module.
base_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
sys.path.insert(0, os.path.join(base_dir, "python", "mozbuild"))
from mozbuild.shellutil import split


SANITIZERS = {
    "asan": "address",
    "hwasan": "hwaddress",
    "lsan": "leak",
    "msan": "memory",
    "tsan": "thread",
}

use_clang_sanitizer = os.environ.get("MOZ_CLANG_NEWER_THAN_RUSTC_LLVM")
wrap_ld = os.environ["MOZ_CARGO_WRAP_LD"]
args = []
for arg in sys.argv[1:]:
    if arg in ["-lc++", "-lstdc++"]:
        wrap_ld = os.environ["MOZ_CARGO_WRAP_LD_CXX"]
    elif use_clang_sanitizer and arg.endswith("san.a"):
        # When clang is newer than rustc's LLVM, we replace rust's sanitizer
        # runtimes with clang's.
        filename = os.path.basename(arg)
        prefix, dot, suffix = filename[:-2].rpartition(".")
        if (
            prefix.startswith("librustc-")
            and prefix.endswith("_rt") and dot == "."
        ):
            args.append(f"-fsanitize={SANITIZERS[suffix]}")
            continue
    args.append(arg)
args.extend(split(os.environ["MOZ_CARGO_WRAP_LDFLAGS"]))

wrap_ld = split(wrap_ld)
os.execvp(wrap_ld[0], wrap_ld + args)

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet am  2026-04-26) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge