Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
  1. Jul 17, 2023
  2. Jul 13, 2023
  3. Jul 04, 2023
  4. Jul 02, 2023
  5. Jun 19, 2023
  6. Jun 09, 2023
  7. Jan 11, 2023
  8. Dec 14, 2022
  9. Oct 28, 2022
  10. Mar 14, 2022
  11. Feb 26, 2022
  12. Jan 01, 2022
  13. Nov 12, 2021
    • Jubilee Young's avatar
      Expose portable-simd as core::simd · 39cb8632
      Jubilee Young authored
      This enables programmers to use a safe alternative to the current
      `extern "platform-intrinsics"` API for writing portable SIMD code.
      This is `#![feature(portable_simd)]` as tracked in #86656
      39cb8632
  14. Aug 12, 2021
  15. Jul 11, 2021
  16. May 16, 2021
  17. Apr 24, 2021
    • Rich Kadel's avatar
      `test tidy` should ignore alternative `build` dir patterns · 79020a8d
      Rich Kadel authored
      I need to have multiple `build` directories, such as `build`,
      `build-fuchsia`, and `build-test`. But when I'm uploading a change, I
      run `./x.py test tidy`, and if I have a `build-something` directory with
      Rust sources, I git a bunch of formatting errors.
      
      `rustfmt.toml` only ignores the directory named `build`.
      
      This change extends the patterns to also ignore `build-*` and `*-build`.
      
      As a rustc contributor, I not only build the rust compiler to develop
      new features, but I also build alternative "distributions" (using
      secondary `*-config.toml` files with different configurations),
      including:
      
      * To occasionally rebuild a version of the compiler that `rust-analyzer`
      can use to `check` source (which fixes issues in the VS Code UI, so
      changing and rebuilding the compiler does not break VS Code editing Rust
      code).
      * To build custom distributions for Fuchsia
      * To build test distributions when working on changes to `bootstrap`
      (e.g., when I recently added `rust-demangler` to distributions)
      79020a8d
  18. Mar 12, 2021
  19. Mar 05, 2021
  20. Mar 01, 2021
  21. Feb 02, 2021
  22. Nov 22, 2020
  23. Oct 26, 2020
  24. Jul 28, 2020
    • Alex Crichton's avatar
      std: Switch from libbacktrace to gimli · 06d565c9
      Alex Crichton authored
      This commit is a proof-of-concept for switching the standard library's
      backtrace symbolication mechanism on most platforms from libbacktrace to
      gimli. The standard library's support for `RUST_BACKTRACE=1` requires
      in-process parsing of object files and DWARF debug information to
      interpret it and print the filename/line number of stack frames as part
      of a backtrace.
      
      Historically this support in the standard library has come from a
      library called "libbacktrace". The libbacktrace library seems to have
      been extracted from gcc at some point and is written in C. We've had a
      lot of issues with libbacktrace over time, unfortunately, though. The
      library does not appear to be actively maintained since we've had
      patches sit for months-to-years without comments. We have discovered a
      good number of soundness issues with the library itself, both when
      parsing valid DWARF as well as invalid DWARF. This is enough of an issue
      that the libs team has previously decided that we cannot feed untrusted
      inputs to libbacktrace. This also doesn't take into account the
      portability of libbacktrace which has been difficult to manage and
      maintain over time. While possible there are lots of exceptions and it's
      the main C dependency of the standard library right now.
      
      For years it's been the desire to switch over to a Rust-based solution
      for symbolicating backtraces. It's been assumed that we'll be using the
      Gimli family of crates for this purpose, which are targeted at safely
      and efficiently parsing DWARF debug information. I've been working
      recently to shore up the Gimli support in the `backtrace` crate. As of a
      few weeks ago the `backtrace` crate, by default, uses Gimli when loaded
      from crates.io. This transition has gone well enough that I figured it
      was time to start talking seriously about this change to the standard
      library.
      
      This commit is a preview of what's probably the best way to integrate
      the `backtrace` crate into the standard library with the Gimli feature
      turned on. While today it's used as a crates.io dependency, this commit
      switches the `backtrace` crate to a submodule of this repository which
      will need to be updated manually. This is not done lightly, but is
      thought to be the best solution. The primary reason for this is that the
      `backtrace` crate needs to do some pretty nontrivial filesystem
      interactions to locate debug information. Working without `std::fs` is
      not an option, and while it might be possible to do some sort of
      trait-based solution when prototyped it was found to be too unergonomic.
      Using a submodule allows the `backtrace` crate to build as a submodule
      of the `std` crate itself, enabling it to use `std::fs` and such.
      
      Otherwise this adds new dependencies to the standard library. This step
      requires extra attention because this means that these crates are now
      going to be included with all Rust programs by default. It's important
      to note, however, that we're already shipping libbacktrace with all Rust
      programs by default and it has a bunch of C code implementing all of
      this internally anyway, so we're basically already switching
      already-shipping functionality to Rust from C.
      
      * `object` - this crate is used to parse object file headers and
        contents. Very low-level support is used from this crate and almost
        all of it is disabled. Largely we're just using struct definitions as
        well as convenience methods internally to read bytes and such.
      
      * `addr2line` - this is the main meat of the implementation for
        symbolication. This crate depends on `gimli` for DWARF parsing and
        then provides interfaces needed by the `backtrace` crate to turn an
        address into a filename / line number. This crate is actually pretty
        small (fits in a single file almost!) and mirrors most of what
        `dwarf.c` does for libbacktrace.
      
      * `miniz_oxide` - the libbacktrace crate transparently handles
        compressed debug information which is compressed with zlib. This crate
        is used to decompress compressed debug sections.
      
      * `gimli` - not actually used directly, but a dependency of `addr2line`.
      
      * `adler32`- not used directly either, but a dependency of
        `miniz_oxide`.
      
      The goal of this change is to improve the safety of backtrace
      symbolication in the standard library, especially in the face of
      possibly malformed DWARF debug information. Even to this day we're still
      seeing segfaults in libbacktrace which could possibly become security
      vulnerabilities. This change should almost entirely eliminate this
      possibility whilc also paving the way forward to adding more features
      like split debug information.
      
      Some references for those interested are:
      
      * Original addition of libbacktrace - #12602
      * OOM with libbacktrace - #24231
      * Backtrace failure due to use of uninitialized value - #28447
      * Possibility to feed untrusted data to libbacktrace - #21889
      * Soundness fix for libbacktrace - #33729
      * Crash in libbacktrace - #39468
      * Support for macOS, never merged - ianlancetaylor/libbacktrace#2
      * Performance issues with libbacktrace - #29293, #37477
      * Update procedure is quite complicated due to how many patches we
        need to carry - #50955
      * Libbacktrace doesn't work on MinGW with dynamic libs - #71060
      * Segfault in libbacktrace on macOS - #71397
      
      Switching to Rust will not make us immune to all of these issues. The
      crashes are expected to go away, but correctness and performance may
      still have bugs arise. The gimli and `backtrace` crates, however, are
      actively maintained unlike libbacktrace, so this should enable us to at
      least efficiently apply fixes as situations come up.
      06d565c9
  25. Jul 27, 2020
  26. Jul 22, 2020
  27. Jul 17, 2020
    • Alex Crichton's avatar
      std: Switch from libbacktrace to gimli · 13db3cc1
      Alex Crichton authored
      This commit is a proof-of-concept for switching the standard library's
      backtrace symbolication mechanism on most platforms from libbacktrace to
      gimli. The standard library's support for `RUST_BACKTRACE=1` requires
      in-process parsing of object files and DWARF debug information to
      interpret it and print the filename/line number of stack frames as part
      of a backtrace.
      
      Historically this support in the standard library has come from a
      library called "libbacktrace". The libbacktrace library seems to have
      been extracted from gcc at some point and is written in C. We've had a
      lot of issues with libbacktrace over time, unfortunately, though. The
      library does not appear to be actively maintained since we've had
      patches sit for months-to-years without comments. We have discovered a
      good number of soundness issues with the library itself, both when
      parsing valid DWARF as well as invalid DWARF. This is enough of an issue
      that the libs team has previously decided that we cannot feed untrusted
      inputs to libbacktrace. This also doesn't take into account the
      portability of libbacktrace which has been difficult to manage and
      maintain over time. While possible there are lots of exceptions and it's
      the main C dependency of the standard library right now.
      
      For years it's been the desire to switch over to a Rust-based solution
      for symbolicating backtraces. It's been assumed that we'll be using the
      Gimli family of crates for this purpose, which are targeted at safely
      and efficiently parsing DWARF debug information. I've been working
      recently to shore up the Gimli support in the `backtrace` crate. As of a
      few weeks ago the `backtrace` crate, by default, uses Gimli when loaded
      from crates.io. This transition has gone well enough that I figured it
      was time to start talking seriously about this change to the standard
      library.
      
      This commit is a preview of what's probably the best way to integrate
      the `backtrace` crate into the standard library with the Gimli feature
      turned on. While today it's used as a crates.io dependency, this commit
      switches the `backtrace` crate to a submodule of this repository which
      will need to be updated manually. This is not done lightly, but is
      thought to be the best solution. The primary reason for this is that the
      `backtrace` crate needs to do some pretty nontrivial filesystem
      interactions to locate debug information. Working without `std::fs` is
      not an option, and while it might be possible to do some sort of
      trait-based solution when prototyped it was found to be too unergonomic.
      Using a submodule allows the `backtrace` crate to build as a submodule
      of the `std` crate itself, enabling it to use `std::fs` and such.
      
      Otherwise this adds new dependencies to the standard library. This step
      requires extra attention because this means that these crates are now
      going to be included with all Rust programs by default. It's important
      to note, however, that we're already shipping libbacktrace with all Rust
      programs by default and it has a bunch of C code implementing all of
      this internally anyway, so we're basically already switching
      already-shipping functionality to Rust from C.
      
      * `object` - this crate is used to parse object file headers and
        contents. Very low-level support is used from this crate and almost
        all of it is disabled. Largely we're just using struct definitions as
        well as convenience methods internally to read bytes and such.
      
      * `addr2line` - this is the main meat of the implementation for
        symbolication. This crate depends on `gimli` for DWARF parsing and
        then provides interfaces needed by the `backtrace` crate to turn an
        address into a filename / line number. This crate is actually pretty
        small (fits in a single file almost!) and mirrors most of what
        `dwarf.c` does for libbacktrace.
      
      * `miniz_oxide` - the libbacktrace crate transparently handles
        compressed debug information which is compressed with zlib. This crate
        is used to decompress compressed debug sections.
      
      * `gimli` - not actually used directly, but a dependency of `addr2line`.
      
      * `adler32`- not used directly either, but a dependency of
        `miniz_oxide`.
      
      The goal of this change is to improve the safety of backtrace
      symbolication in the standard library, especially in the face of
      possibly malformed DWARF debug information. Even to this day we're still
      seeing segfaults in libbacktrace which could possibly become security
      vulnerabilities. This change should almost entirely eliminate this
      possibility whilc also paving the way forward to adding more features
      like split debug information.
      
      Some references for those interested are:
      
      * Original addition of libbacktrace - #12602
      * OOM with libbacktrace - #24231
      * Backtrace failure due to use of uninitialized value - #28447
      * Possibility to feed untrusted data to libbacktrace - #21889
      * Soundness fix for libbacktrace - #33729
      * Crash in libbacktrace - #39468
      * Support for macOS, never merged - ianlancetaylor/libbacktrace#2
      * Performance issues with libbacktrace - #29293, #37477
      * Update procedure is quite complicated due to how many patches we
        need to carry - #50955
      * Libbacktrace doesn't work on MinGW with dynamic libs - #71060
      * Segfault in libbacktrace on macOS - #71397
      
      Switching to Rust will not make us immune to all of these issues. The
      crashes are expected to go away, but correctness and performance may
      still have bugs arise. The gimli and `backtrace` crates, however, are
      actively maintained unlike libbacktrace, so this should enable us to at
      least efficiently apply fixes as situations come up.
      13db3cc1
  28. Jul 03, 2020
    • Aleksey Kladov's avatar
      Add rust-analyzer submodule · 058c1b60
      Aleksey Kladov authored
      The current plan is that submodule tracks the `release` branch of
      rust-analyzer, which is updated once a week.
      
      rust-analyzer is a workspace (with a virtual manifest), the actual
      binary is provide by `crates/rust-analyzer` package.
      
      Note that we intentionally don't add rust-analyzer to `Kind::Test`,
      for two reasons.
      
      *First*, at the moment rust-analyzer's test suite does a couple of
      things which might not work in the context of rust repository. For
      example, it shells out directly to `rustup` and `rustfmt`. So, making
      this work requires non-trivial efforts.
      
      *Second*, it seems unlikely that running tests in rust-lang/rust repo
      would provide any additional guarantees. rust-analyzer builds with
      stable and does not depend on the specifics of the compiler, so
      changes to compiler can't break ra, unless they break stability
      guarantee. Additionally, rust-analyzer itself is gated on bors, so we
      are pretty confident that test suite passes.
      058c1b60
  29. Mar 24, 2020
  30. Feb 10, 2020
  31. Jan 31, 2020
  32. Dec 24, 2019
  33. Dec 23, 2019
  34. Dec 22, 2019
  35. Dec 21, 2019
  36. Nov 02, 2019
    • Aleksey Kladov's avatar
      Remove forcing \n via rustfmt · 7f1903ed
      Aleksey Kladov authored
      The original idea here was to make sure, on CI, that line endings are
      \n. Travis however uses autocrlf, so the check doesn't actually work,
      and forcing \n otherwise makes lives of windows folks difficult
      
      closes #2157
      7f1903ed
Loading