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

make it easy to resolve symbols by frame #526

Merged
merged 1 commit into from
Mar 9, 2024

Conversation

fraillt
Copy link
Contributor

@fraillt fraillt commented May 18, 2023

Hello,

Resolving backtrace (at least for the first time) is very slow, but this is not something that can be solved (I guess).
However, not all frames are equally useful, and at least in the code base that I'm working on, we simply ignore bunch of them.
We have code something like this:

let mut bt = Backtrace::new_unresolved();
// ...
bt.resolve();
let bt: Vec<String> = bt.frames()
    .iter()
    .flat_map(BacktraceFrame::symbols)
    .take_while(is_not_async_stuff)
    .map(format_symbols)
    .collect();

For us, it takes takes around ~700ms (sometimes even ~1.5s) to resolve whole backtrace.

With this PR we're able to write like this:

let bt: Vec<String> = bt.frames_mut()
    .iter_mut()
    .flat_map(BacktraceFrame::symbols_resolved)
    .take_while(is_not_async_stuff)
    .map(format_symbols)
    .collect();

And it takes around 25ms to resolve the frames that we actually need.

I'm aware of low level utils backtrace::trace and backtrace::resolve_frame, but this would basically mean that I would basically need to reimplement Backtrace, including Serialize/Deserialize capability, which is too much.

@workingjubilee
Copy link
Contributor

workingjubilee commented Jun 22, 2023

I think the motivation you have is good. But I feel slightly nervous about exposing &'a mut [BacktraceFrame] and thus &'a mut BacktraceFrame, allowing mutations that can make the backtrace inconsistent. This is partly because I've noticed the problems you observe, and I think your direction overall is a good idea: making this crate's backtrace lazier is clearly the "way to go".

But exposing the entire slice mutably, and without resolving first, is potentially problematic for later optimizations and better interfaces that might rely on internally avoiding doing work where unnecessary, but now would have to account for "you might have called frames_mut and done something with them first". So I think addressing the needs you've cited might be better done by adding a function to Backtrace that returns an iterator that lazily resolves a BacktraceFrame on iteration.

@workingjubilee workingjubilee self-assigned this Jun 22, 2023
@fraillt fraillt force-pushed the master branch 2 times, most recently from e9d63c6 to a1fb68b Compare July 7, 2023 18:07
@fraillt
Copy link
Contributor Author

fraillt commented Jul 7, 2023

@workingjubilee Thanks for your insights, it makes sense.
I tried to implement lazy iterator, but it's not straightforward as it requires interior mutability.
I noticed that we already have From and Into<Vec<BacktraceFrame>> for Backtrace so I guess we can simply provide a way to resolve each frame manually.
(I updated revision with minimum changes)

@github-actions
Copy link

Below is the size of a hello-world Rust program linked with libstd with backtrace.

Original binary size: 518984B
Updated binary size: 519008B
Difference: +24B (0.00%)

@fraillt
Copy link
Contributor Author

fraillt commented Jul 27, 2023

Summary of all changes so far:

  • provided new public function BacktraceFrame::resolve(&mut self) (this is the essence of the PR)
  • replaced impl Into<Vec<BacktraceFrame>> for Backtrace with impl From<Backtrace> for Vec<BacktraceFrame>

One should avoid implementing Into and implement From instead. (source)

  • don't expose/store backtrace implementation frames. Now Backtrace::frames(&self) returns same frames as in impl From<Backtrace> for Vec<BacktraceFrame>.

@workingjubilee
Copy link
Contributor

replaced impl Into<Vec<BacktraceFrame>> for Backtrace with impl From<Backtrace> for Vec<BacktraceFrame>

I know that's the "correct" style, but we've had several breakages due to "fixing" this, because this crate gets included directly into std, and sometimes rustc gets confused as to whether impls in this crate are publicly accessible, especially when it comes to resolving type inference.

So,
unfortunately,
I must tell you:
Do it wrong.

@fraillt
Copy link
Contributor Author

fraillt commented Jul 28, 2023

Thanks for fast replay! but I really thing that impl From<Backtrace> for Vec<BacktraceFrame> is not an issue. There's my reasoning.
There's conversion only from Backtrace to BacktraceFrame:

  • both are local types, and not widely used.
  • both are not generic "container like types", so there's no transitive converions (e.g. impl From<Vec> for Backtrace) or something)
    Type inference here should be pretty easy here, and there are a lot of code like this in the the wild.
    I really cannot see how this could interfere with other type coercions... :(

If this is really a problem, then:
a) I think the problem is elsewhere, and we should fix that problem instead :)
b) we should be able to "proof" that there's a problem, revert it back and add big comment in code, explaining exactly that is the issue.

@workingjubilee
Copy link
Contributor

Type inference here should be pretty easy here, and there are a lot of code like this in the the wild.
I really cannot see how this could interfere with other type coercions... :(

Part of why it is not disruptive "in the wild" is because there either already is two implementations to infer types from, or all the types to infer based on local implementations are local and it resolves one of those. There is an unfortunate quirk where if there is only one implementation it is always inferred by default, even though it would be ambiguous if there were two in scope. Thus adding additional directions for Vec<T> can weaken type inference even though, by all rights, if the type inference algorithm did not have this quirk, it would not infer in the first place (and possibly instead use some other information to guide inference).

std is unique in appearing in what rounds off to every single crate.
Specifically, Vec<T> is in scope in every single crate.

@workingjubilee
Copy link
Contributor

So I agree the problem is elsewhere, but I did not want to block accepting this PR on landing a new type inference algorithm in rustc, or making sure type resolution + inference never can "leak" in a more "by construction" manner than how it is currently done.

Copy link

github-actions bot commented Mar 8, 2024

Code size changes for a hello-world Rust program linked with libstd with backtrace:

On platform windows-latest:

  • Original binary size: 140,800 B
  • Updated binary size: 138,752 B
  • Difference: -2,048 B (-1.45%)

@workingjubilee workingjubilee merged commit 4dea00c into rust-lang:master Mar 9, 2024
69 of 72 checks passed
kodiakhq bot pushed a commit to X-oss-byte/Canary-nextjs that referenced this pull request May 1, 2024
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [backtrace](https://togithub.com/rust-lang/backtrace-rs) | dependencies | patch | `0.3` -> `0.3.71` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency Dashboard for more information.

---

### Release Notes

<details>
<summary>rust-lang/backtrace-rs (backtrace)</summary>

### [`v0.3.71`](https://togithub.com/rust-lang/backtrace-rs/releases/tag/0.3.71)

[Compare Source](https://togithub.com/rust-lang/backtrace-rs/compare/0.3.70...0.3.71)

This is mostly CI changes, with a very mild bump to our effective cc crate version recorded, and a small modification to a previous changeset to allow backtrace to run at its current checked-in MSRV on Windows. Sorry about that! We will be getting 0.3.70 yanked shortly.

##### What's Changed

-   Make sgx functions exist with cfg(miri) by [@&#8203;saethlin](https://togithub.com/saethlin) in [rust-lang/backtrace-rs#591
-   Update version of cc crate by [@&#8203;jfgoog](https://togithub.com/jfgoog) in [rust-lang/backtrace-rs#592
-   Pull back MSRV on Windows by [@&#8203;workingjubilee](https://togithub.com/workingjubilee) in [rust-lang/backtrace-rs#598
-   Force frame pointers on all i686 tests by [@&#8203;workingjubilee](https://togithub.com/workingjubilee) in [rust-lang/backtrace-rs#601
-   Use rustc from stage0 instead of stage0-sysroot by [@&#8203;Nilstrieb](https://togithub.com/Nilstrieb) in [rust-lang/backtrace-rs#602
-   Cut backtrace 0.3.71 by [@&#8203;workingjubilee](https://togithub.com/workingjubilee) in [rust-lang/backtrace-rs#599

##### New Contributors

-   [@&#8203;jfgoog](https://togithub.com/jfgoog) made their first contribution in [rust-lang/backtrace-rs#592
-   [@&#8203;Nilstrieb](https://togithub.com/Nilstrieb) made their first contribution in [rust-lang/backtrace-rs#602

**Full Changelog**: rust-lang/backtrace-rs@0.3.70...0.3.71

### [`v0.3.70`](https://togithub.com/rust-lang/backtrace-rs/releases/tag/0.3.70)

[Compare Source](https://togithub.com/rust-lang/backtrace-rs/compare/0.3.69...0.3.70)

##### New API

-   A `BacktraceFrame` can now have `resolve(&mut self)` called on it thanks to [@&#8203;fraillt](https://togithub.com/fraillt) in [rust-lang/backtrace-rs#526

##### Platform Support

We added support for new platforms in this release!

-   Thanks to [@&#8203;bzEq](https://togithub.com/bzEq) in [rust-lang/backtrace-rs#508 we now have AIX support!
-   Thanks to [@&#8203;sthibaul](https://togithub.com/sthibaul) in [rust-lang/backtrace-rs#567 we now have GNU/Hurd support!
-   Thanks to [@&#8203;dpaoliello](https://togithub.com/dpaoliello) in [rust-lang/backtrace-rs#587 we now support "emulation-compatible" AArch64 Windows (aka arm64ec)

##### Windows

-   Rewrite msvc backtrace support to be much faster on 64-bit platforms by [@&#8203;wesleywiser](https://togithub.com/wesleywiser) in [rust-lang/backtrace-rs#569
-   Fix i686-pc-windows-gnu missing dbghelp module by [@&#8203;wesleywiser](https://togithub.com/wesleywiser) in [rust-lang/backtrace-rs#571
-   Fix build errors on `thumbv7a-*-windows-msvc` targets by [@&#8203;kleisauke](https://togithub.com/kleisauke) in [rust-lang/backtrace-rs#573
-   Fix panic in backtrace symbolication on win7 by [@&#8203;roblabla](https://togithub.com/roblabla) in [rust-lang/backtrace-rs#578
-   remove few unused windows ffi fn by [@&#8203;klensy](https://togithub.com/klensy) in [rust-lang/backtrace-rs#576
-   Make dbghelp look for PDBs next to their exe/dll. by [@&#8203;michaelwoerister](https://togithub.com/michaelwoerister) in [rust-lang/backtrace-rs#584
-   Revert 32-bit dbghelp to a version WINE (presumably) likes by [@&#8203;ChrisDenton](https://togithub.com/ChrisDenton) in [rust-lang/backtrace-rs#588
-   Update for Win10+ by [@&#8203;ChrisDenton](https://togithub.com/ChrisDenton) in [rust-lang/backtrace-rs#589

##### SGX

Thanks to

-   Adjust frame IP in SGX relative to image base by [@&#8203;mzohreva](https://togithub.com/mzohreva) in [rust-lang/backtrace-rs#566

##### Internals

We did a bunch more work on our CI and internal cleanups

-   Modularise CI workflow and validate outputs for binary size checks. by [@&#8203;detly](https://togithub.com/detly) in [rust-lang/backtrace-rs#549
-   Commit Cargo.lock by [@&#8203;bjorn3](https://togithub.com/bjorn3) in [rust-lang/backtrace-rs#562
-   Enable calling build.rs externally v2 by [@&#8203;pitaj](https://togithub.com/pitaj) in [rust-lang/backtrace-rs#568
-   Upgrade to 2021 ed and inline panics by [@&#8203;nyurik](https://togithub.com/nyurik) in [rust-lang/backtrace-rs#538
-   Fix deny(unused) of an unused import with SGX + Miri by [@&#8203;saethlin](https://togithub.com/saethlin) in [rust-lang/backtrace-rs#581
-   Fix unused_imports warning on latest nightly by [@&#8203;ChrisDenton](https://togithub.com/ChrisDenton) in [rust-lang/backtrace-rs#575
-   Fix CI by [@&#8203;saethlin](https://togithub.com/saethlin) in [rust-lang/backtrace-rs#582
-   Use `addr_of!` by [@&#8203;GrigorenkoPV](https://togithub.com/GrigorenkoPV) in [rust-lang/backtrace-rs#585
-   Write down MSRV policy by [@&#8203;workingjubilee](https://togithub.com/workingjubilee) in [rust-lang/backtrace-rs#561
-   Apply clippy::uninlined_format_args fixes by [@&#8203;nyurik](https://togithub.com/nyurik) in [rust-lang/backtrace-rs#486
-   ignore clippy lints in `symbolize/gimli/stash.rs` by [@&#8203;onur-ozkan](https://togithub.com/onur-ozkan) in [rust-lang/backtrace-rs#586

##### New Contributors

-   [@&#8203;nyurik](https://togithub.com/nyurik) made their first contribution in [rust-lang/backtrace-rs#538
-   [@&#8203;bzEq](https://togithub.com/bzEq) made their first contribution in [rust-lang/backtrace-rs#508
-   [@&#8203;bjorn3](https://togithub.com/bjorn3) made their first contribution in [rust-lang/backtrace-rs#562
-   [@&#8203;sthibaul](https://togithub.com/sthibaul) made their first contribution in [rust-lang/backtrace-rs#567
-   [@&#8203;mzohreva](https://togithub.com/mzohreva) made their first contribution in [rust-lang/backtrace-rs#566
-   [@&#8203;wesleywiser](https://togithub.com/wesleywiser) made their first contribution in [rust-lang/backtrace-rs#569
-   [@&#8203;kleisauke](https://togithub.com/kleisauke) made their first contribution in [rust-lang/backtrace-rs#573
-   [@&#8203;roblabla](https://togithub.com/roblabla) made their first contribution in [rust-lang/backtrace-rs#578
-   [@&#8203;michaelwoerister](https://togithub.com/michaelwoerister) made their first contribution in [rust-lang/backtrace-rs#584
-   [@&#8203;dpaoliello](https://togithub.com/dpaoliello) made their first contribution in [rust-lang/backtrace-rs#587
-   [@&#8203;GrigorenkoPV](https://togithub.com/GrigorenkoPV) made their first contribution in [rust-lang/backtrace-rs#585
-   [@&#8203;fraillt](https://togithub.com/fraillt) made their first contribution in [rust-lang/backtrace-rs#526
-   [@&#8203;onur-ozkan](https://togithub.com/onur-ozkan) made their first contribution in [rust-lang/backtrace-rs#586

**Full Changelog**: rust-lang/backtrace-rs@0.3.69...0.3.70

### [`v0.3.69`](https://togithub.com/rust-lang/backtrace-rs/releases/tag/0.3.69)

[Compare Source](https://togithub.com/rust-lang/backtrace-rs/compare/0.3.68...0.3.69)

Thank you everyone for contributing to a very nice release!

##### Tracking Binary Size

As backtrace-rs is compiled into every single Rust program, we have begun tracking its binary size in order to find ways to reduce its impact on programs that only minimally use backtraces over time. This change is mostly relevant to this crate's CI, and has been implemented by [@&#8203;Kobzol](https://togithub.com/Kobzol) and [@&#8203;detly](https://togithub.com/detly) over PRs [#&#8203;542](https://togithub.com/rust-lang/backtrace-rs/issues/542), [#&#8203;544](https://togithub.com/rust-lang/backtrace-rs/issues/544), [#&#8203;546](https://togithub.com/rust-lang/backtrace-rs/issues/546), and [#&#8203;550](https://togithub.com/rust-lang/backtrace-rs/issues/550)!

##### Platform-Specific Fixes

As usual, the majority of PRs for this release only affect 1 or 2 platforms. Technically, even the binary-size tracking is only implemented to track binary size on `x86_64-unknown-linux-gnu`.

##### fuchsia

Backtraces for Fuchsia will now uses extended symbolization thanks to [@&#8203;liudangyi](https://togithub.com/liudangyi) in [rust-lang/backtrace-rs#559

##### unix (with `procfs`)

Many Unix-y platforms support `/proc`, including Linux and FreeBSD, but not OpenBSD. For those which do, backtrace uses `/proc/self/maps` to assist in recovering the trace. We did not parse the output of `/proc/self/maps` in a way that accounted for the fact that it may have spaces in path names, but this was fixed thanks to [@&#8203;MasonRemaley](https://togithub.com/MasonRemaley) in [rust-lang/backtrace-rs#553

##### windows-msvc

Some changes that should help binary size specifically on Windows MSVC targets, or at least compile times, have already been implemented, thanks to [@&#8203;klensy](https://togithub.com/klensy) in [rust-lang/backtrace-rs#543 omitting compiling-in ELF backtrace capabilities. We don't have full binary size tracking for all major supported operating systems yet, so we believe this is worth 30KiB but that's more of an estimate than hard stats.

##### Dependency Management

-   Update addr2line and object dependencies by [@&#8203;philipc](https://togithub.com/philipc) in [rust-lang/backtrace-rs#557
-   Exclude ci directory from packaged crate by [@&#8203;mulkieran](https://togithub.com/mulkieran) in [rust-lang/backtrace-rs#555
-   Enable calling build.rs directly from std/build.rs by [@&#8203;pitaj](https://togithub.com/pitaj) in [rust-lang/backtrace-rs#556

##### New Contributors

-   [@&#8203;Kobzol](https://togithub.com/Kobzol) made their first contribution in [rust-lang/backtrace-rs#542
-   [@&#8203;detly](https://togithub.com/detly) made their first contribution in [rust-lang/backtrace-rs#550
-   [@&#8203;liudangyi](https://togithub.com/liudangyi) made their first contribution in [rust-lang/backtrace-rs#559
-   [@&#8203;MasonRemaley](https://togithub.com/MasonRemaley) made their first contribution in [rust-lang/backtrace-rs#553
-   [@&#8203;mulkieran](https://togithub.com/mulkieran) made their first contribution in [rust-lang/backtrace-rs#555
-   [@&#8203;pitaj](https://togithub.com/pitaj) made their first contribution in [rust-lang/backtrace-rs#556
-   [@&#8203;klensy](https://togithub.com/klensy) made their first contribution in [rust-lang/backtrace-rs#543

**Full Changelog**: rust-lang/backtrace-rs@0.3.68...0.3.69

### [`v0.3.68`](https://togithub.com/rust-lang/backtrace-rs/releases/tag/0.3.68)

[Compare Source](https://togithub.com/rust-lang/backtrace-rs/compare/0.3.67...0.3.68)

A bunch of behind-the-scenes work on upgrading CI has finally got things to a place where we can do confident releases again, so hopefully the next backtrace version will not take 6 months! Thanks to everyone who contributed to that! Most of the user-facing changes are about dependency updates and consequent improved platform compatibility, including with split DWARF. A few new functions on BacktraceFmt should also make it easier to inject additional text into backtrace's output.

-   Adapt to new Fuchsia target name by [@&#8203;flba-eb](https://togithub.com/flba-eb) in [rust-lang/backtrace-rs#509
-   armv7 PSVita OS support by [@&#8203;nikarh](https://togithub.com/nikarh) in [rust-lang/backtrace-rs#523
-   Upgrade addr2line and properly handle split DWARF on Linux by [@&#8203;khuey](https://togithub.com/khuey) in [rust-lang/backtrace-rs#513
-   deps: update miniz_oxide to 0.7 by [@&#8203;poliorcetics](https://togithub.com/poliorcetics) in [rust-lang/backtrace-rs#521
-   Add print in BacktraceFmt by [@&#8203;chenyukang](https://togithub.com/chenyukang) in [rust-lang/backtrace-rs#527
-   Bump object to 0.31 by [@&#8203;lnicola](https://togithub.com/lnicola) in [rust-lang/backtrace-rs#522
-   Add an exception for QNX Neutrino 7.0 as a 'no-op' platform by [@&#8203;samkearney](https://togithub.com/samkearney) in [rust-lang/backtrace-rs#529
-   Use mmap64 on Linux. by [@&#8203;mikebenfield](https://togithub.com/mikebenfield) in [rust-lang/backtrace-rs#501
-   dbghlp: Make mutex name unique to the process by [@&#8203;ChrisDenton](https://togithub.com/ChrisDenton) in [rust-lang/backtrace-rs#518
-   gimli add netbsd to handle dl_iterate_phdr as well. by [@&#8203;devnexen](https://togithub.com/devnexen) in [rust-lang/backtrace-rs#512
-   Add other apple targets to libunwind workaround by [@&#8203;thomcc](https://togithub.com/thomcc) in [rust-lang/backtrace-rs#516
-   Add fmt method for BacktraceFmt by [@&#8203;chenyukang](https://togithub.com/chenyukang) in [rust-lang/backtrace-rs#532

##### New Contributors

-   [@&#8203;bwmf2](https://togithub.com/bwmf2) made their first contribution in [rust-lang/backtrace-rs#515
-   [@&#8203;flba-eb](https://togithub.com/flba-eb) made their first contribution in [rust-lang/backtrace-rs#509
-   [@&#8203;nikarh](https://togithub.com/nikarh) made their first contribution in [rust-lang/backtrace-rs#523
-   [@&#8203;poliorcetics](https://togithub.com/poliorcetics) made their first contribution in [rust-lang/backtrace-rs#521
-   [@&#8203;GuillaumeGomez](https://togithub.com/GuillaumeGomez) made their first contribution in [rust-lang/backtrace-rs#524
-   [@&#8203;chenyukang](https://togithub.com/chenyukang) made their first contribution in [rust-lang/backtrace-rs#527
-   [@&#8203;lnicola](https://togithub.com/lnicola) made their first contribution in [rust-lang/backtrace-rs#522
-   [@&#8203;samkearney](https://togithub.com/samkearney) made their first contribution in [rust-lang/backtrace-rs#529
-   [@&#8203;mikebenfield](https://togithub.com/mikebenfield) made their first contribution in [rust-lang/backtrace-rs#501
-   [@&#8203;devnexen](https://togithub.com/devnexen) made their first contribution in [rust-lang/backtrace-rs#512
-   [@&#8203;thomcc](https://togithub.com/thomcc) made their first contribution in [rust-lang/backtrace-rs#516
-   [@&#8203;workingjubilee](https://togithub.com/workingjubilee) made their first contribution in [rust-lang/backtrace-rs#533
-   [@&#8203;chriswailes](https://togithub.com/chriswailes) made their first contribution in [rust-lang/backtrace-rs#534

**Full Changelog**: rust-lang/backtrace-rs@0.3.67...0.3.68

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/X-oss-byte/Canary-nextjs).
kodiakhq bot pushed a commit to X-oss-byte/Nextjs that referenced this pull request May 1, 2024
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [backtrace](https://togithub.com/rust-lang/backtrace-rs) | dependencies | patch | `0.3` -> `0.3.71` |

---

### Release Notes

<details>
<summary>rust-lang/backtrace-rs (backtrace)</summary>

### [`v0.3.71`](https://togithub.com/rust-lang/backtrace-rs/releases/tag/0.3.71)

[Compare Source](https://togithub.com/rust-lang/backtrace-rs/compare/0.3.70...0.3.71)

This is mostly CI changes, with a very mild bump to our effective cc crate version recorded, and a small modification to a previous changeset to allow backtrace to run at its current checked-in MSRV on Windows. Sorry about that! We will be getting 0.3.70 yanked shortly.

##### What's Changed

-   Make sgx functions exist with cfg(miri) by [@&#8203;saethlin](https://togithub.com/saethlin) in [rust-lang/backtrace-rs#591
-   Update version of cc crate by [@&#8203;jfgoog](https://togithub.com/jfgoog) in [rust-lang/backtrace-rs#592
-   Pull back MSRV on Windows by [@&#8203;workingjubilee](https://togithub.com/workingjubilee) in [rust-lang/backtrace-rs#598
-   Force frame pointers on all i686 tests by [@&#8203;workingjubilee](https://togithub.com/workingjubilee) in [rust-lang/backtrace-rs#601
-   Use rustc from stage0 instead of stage0-sysroot by [@&#8203;Nilstrieb](https://togithub.com/Nilstrieb) in [rust-lang/backtrace-rs#602
-   Cut backtrace 0.3.71 by [@&#8203;workingjubilee](https://togithub.com/workingjubilee) in [rust-lang/backtrace-rs#599

##### New Contributors

-   [@&#8203;jfgoog](https://togithub.com/jfgoog) made their first contribution in [rust-lang/backtrace-rs#592
-   [@&#8203;Nilstrieb](https://togithub.com/Nilstrieb) made their first contribution in [rust-lang/backtrace-rs#602

**Full Changelog**: rust-lang/backtrace-rs@0.3.70...0.3.71

### [`v0.3.70`](https://togithub.com/rust-lang/backtrace-rs/releases/tag/0.3.70)

[Compare Source](https://togithub.com/rust-lang/backtrace-rs/compare/0.3.69...0.3.70)

##### New API

-   A `BacktraceFrame` can now have `resolve(&mut self)` called on it thanks to [@&#8203;fraillt](https://togithub.com/fraillt) in [rust-lang/backtrace-rs#526

##### Platform Support

We added support for new platforms in this release!

-   Thanks to [@&#8203;bzEq](https://togithub.com/bzEq) in [rust-lang/backtrace-rs#508 we now have AIX support!
-   Thanks to [@&#8203;sthibaul](https://togithub.com/sthibaul) in [rust-lang/backtrace-rs#567 we now have GNU/Hurd support!
-   Thanks to [@&#8203;dpaoliello](https://togithub.com/dpaoliello) in [rust-lang/backtrace-rs#587 we now support "emulation-compatible" AArch64 Windows (aka arm64ec)

##### Windows

-   Rewrite msvc backtrace support to be much faster on 64-bit platforms by [@&#8203;wesleywiser](https://togithub.com/wesleywiser) in [rust-lang/backtrace-rs#569
-   Fix i686-pc-windows-gnu missing dbghelp module by [@&#8203;wesleywiser](https://togithub.com/wesleywiser) in [rust-lang/backtrace-rs#571
-   Fix build errors on `thumbv7a-*-windows-msvc` targets by [@&#8203;kleisauke](https://togithub.com/kleisauke) in [rust-lang/backtrace-rs#573
-   Fix panic in backtrace symbolication on win7 by [@&#8203;roblabla](https://togithub.com/roblabla) in [rust-lang/backtrace-rs#578
-   remove few unused windows ffi fn by [@&#8203;klensy](https://togithub.com/klensy) in [rust-lang/backtrace-rs#576
-   Make dbghelp look for PDBs next to their exe/dll. by [@&#8203;michaelwoerister](https://togithub.com/michaelwoerister) in [rust-lang/backtrace-rs#584
-   Revert 32-bit dbghelp to a version WINE (presumably) likes by [@&#8203;ChrisDenton](https://togithub.com/ChrisDenton) in [rust-lang/backtrace-rs#588
-   Update for Win10+ by [@&#8203;ChrisDenton](https://togithub.com/ChrisDenton) in [rust-lang/backtrace-rs#589

##### SGX

Thanks to

-   Adjust frame IP in SGX relative to image base by [@&#8203;mzohreva](https://togithub.com/mzohreva) in [rust-lang/backtrace-rs#566

##### Internals

We did a bunch more work on our CI and internal cleanups

-   Modularise CI workflow and validate outputs for binary size checks. by [@&#8203;detly](https://togithub.com/detly) in [rust-lang/backtrace-rs#549
-   Commit Cargo.lock by [@&#8203;bjorn3](https://togithub.com/bjorn3) in [rust-lang/backtrace-rs#562
-   Enable calling build.rs externally v2 by [@&#8203;pitaj](https://togithub.com/pitaj) in [rust-lang/backtrace-rs#568
-   Upgrade to 2021 ed and inline panics by [@&#8203;nyurik](https://togithub.com/nyurik) in [rust-lang/backtrace-rs#538
-   Fix deny(unused) of an unused import with SGX + Miri by [@&#8203;saethlin](https://togithub.com/saethlin) in [rust-lang/backtrace-rs#581
-   Fix unused_imports warning on latest nightly by [@&#8203;ChrisDenton](https://togithub.com/ChrisDenton) in [rust-lang/backtrace-rs#575
-   Fix CI by [@&#8203;saethlin](https://togithub.com/saethlin) in [rust-lang/backtrace-rs#582
-   Use `addr_of!` by [@&#8203;GrigorenkoPV](https://togithub.com/GrigorenkoPV) in [rust-lang/backtrace-rs#585
-   Write down MSRV policy by [@&#8203;workingjubilee](https://togithub.com/workingjubilee) in [rust-lang/backtrace-rs#561
-   Apply clippy::uninlined_format_args fixes by [@&#8203;nyurik](https://togithub.com/nyurik) in [rust-lang/backtrace-rs#486
-   ignore clippy lints in `symbolize/gimli/stash.rs` by [@&#8203;onur-ozkan](https://togithub.com/onur-ozkan) in [rust-lang/backtrace-rs#586

##### New Contributors

-   [@&#8203;nyurik](https://togithub.com/nyurik) made their first contribution in [rust-lang/backtrace-rs#538
-   [@&#8203;bzEq](https://togithub.com/bzEq) made their first contribution in [rust-lang/backtrace-rs#508
-   [@&#8203;bjorn3](https://togithub.com/bjorn3) made their first contribution in [rust-lang/backtrace-rs#562
-   [@&#8203;sthibaul](https://togithub.com/sthibaul) made their first contribution in [rust-lang/backtrace-rs#567
-   [@&#8203;mzohreva](https://togithub.com/mzohreva) made their first contribution in [rust-lang/backtrace-rs#566
-   [@&#8203;wesleywiser](https://togithub.com/wesleywiser) made their first contribution in [rust-lang/backtrace-rs#569
-   [@&#8203;kleisauke](https://togithub.com/kleisauke) made their first contribution in [rust-lang/backtrace-rs#573
-   [@&#8203;roblabla](https://togithub.com/roblabla) made their first contribution in [rust-lang/backtrace-rs#578
-   [@&#8203;michaelwoerister](https://togithub.com/michaelwoerister) made their first contribution in [rust-lang/backtrace-rs#584
-   [@&#8203;dpaoliello](https://togithub.com/dpaoliello) made their first contribution in [rust-lang/backtrace-rs#587
-   [@&#8203;GrigorenkoPV](https://togithub.com/GrigorenkoPV) made their first contribution in [rust-lang/backtrace-rs#585
-   [@&#8203;fraillt](https://togithub.com/fraillt) made their first contribution in [rust-lang/backtrace-rs#526
-   [@&#8203;onur-ozkan](https://togithub.com/onur-ozkan) made their first contribution in [rust-lang/backtrace-rs#586

**Full Changelog**: rust-lang/backtrace-rs@0.3.69...0.3.70

### [`v0.3.69`](https://togithub.com/rust-lang/backtrace-rs/releases/tag/0.3.69)

[Compare Source](https://togithub.com/rust-lang/backtrace-rs/compare/0.3.68...0.3.69)

Thank you everyone for contributing to a very nice release!

##### Tracking Binary Size

As backtrace-rs is compiled into every single Rust program, we have begun tracking its binary size in order to find ways to reduce its impact on programs that only minimally use backtraces over time. This change is mostly relevant to this crate's CI, and has been implemented by [@&#8203;Kobzol](https://togithub.com/Kobzol) and [@&#8203;detly](https://togithub.com/detly) over PRs [#&#8203;542](https://togithub.com/rust-lang/backtrace-rs/issues/542), [#&#8203;544](https://togithub.com/rust-lang/backtrace-rs/issues/544), [#&#8203;546](https://togithub.com/rust-lang/backtrace-rs/issues/546), and [#&#8203;550](https://togithub.com/rust-lang/backtrace-rs/issues/550)!

##### Platform-Specific Fixes

As usual, the majority of PRs for this release only affect 1 or 2 platforms. Technically, even the binary-size tracking is only implemented to track binary size on `x86_64-unknown-linux-gnu`.

##### fuchsia

Backtraces for Fuchsia will now uses extended symbolization thanks to [@&#8203;liudangyi](https://togithub.com/liudangyi) in [rust-lang/backtrace-rs#559

##### unix (with `procfs`)

Many Unix-y platforms support `/proc`, including Linux and FreeBSD, but not OpenBSD. For those which do, backtrace uses `/proc/self/maps` to assist in recovering the trace. We did not parse the output of `/proc/self/maps` in a way that accounted for the fact that it may have spaces in path names, but this was fixed thanks to [@&#8203;MasonRemaley](https://togithub.com/MasonRemaley) in [rust-lang/backtrace-rs#553

##### windows-msvc

Some changes that should help binary size specifically on Windows MSVC targets, or at least compile times, have already been implemented, thanks to [@&#8203;klensy](https://togithub.com/klensy) in [rust-lang/backtrace-rs#543 omitting compiling-in ELF backtrace capabilities. We don't have full binary size tracking for all major supported operating systems yet, so we believe this is worth 30KiB but that's more of an estimate than hard stats.

##### Dependency Management

-   Update addr2line and object dependencies by [@&#8203;philipc](https://togithub.com/philipc) in [rust-lang/backtrace-rs#557
-   Exclude ci directory from packaged crate by [@&#8203;mulkieran](https://togithub.com/mulkieran) in [rust-lang/backtrace-rs#555
-   Enable calling build.rs directly from std/build.rs by [@&#8203;pitaj](https://togithub.com/pitaj) in [rust-lang/backtrace-rs#556

##### New Contributors

-   [@&#8203;Kobzol](https://togithub.com/Kobzol) made their first contribution in [rust-lang/backtrace-rs#542
-   [@&#8203;detly](https://togithub.com/detly) made their first contribution in [rust-lang/backtrace-rs#550
-   [@&#8203;liudangyi](https://togithub.com/liudangyi) made their first contribution in [rust-lang/backtrace-rs#559
-   [@&#8203;MasonRemaley](https://togithub.com/MasonRemaley) made their first contribution in [rust-lang/backtrace-rs#553
-   [@&#8203;mulkieran](https://togithub.com/mulkieran) made their first contribution in [rust-lang/backtrace-rs#555
-   [@&#8203;pitaj](https://togithub.com/pitaj) made their first contribution in [rust-lang/backtrace-rs#556
-   [@&#8203;klensy](https://togithub.com/klensy) made their first contribution in [rust-lang/backtrace-rs#543

**Full Changelog**: rust-lang/backtrace-rs@0.3.68...0.3.69

### [`v0.3.68`](https://togithub.com/rust-lang/backtrace-rs/releases/tag/0.3.68)

[Compare Source](https://togithub.com/rust-lang/backtrace-rs/compare/0.3.67...0.3.68)

A bunch of behind-the-scenes work on upgrading CI has finally got things to a place where we can do confident releases again, so hopefully the next backtrace version will not take 6 months! Thanks to everyone who contributed to that! Most of the user-facing changes are about dependency updates and consequent improved platform compatibility, including with split DWARF. A few new functions on BacktraceFmt should also make it easier to inject additional text into backtrace's output.

-   Adapt to new Fuchsia target name by [@&#8203;flba-eb](https://togithub.com/flba-eb) in [rust-lang/backtrace-rs#509
-   armv7 PSVita OS support by [@&#8203;nikarh](https://togithub.com/nikarh) in [rust-lang/backtrace-rs#523
-   Upgrade addr2line and properly handle split DWARF on Linux by [@&#8203;khuey](https://togithub.com/khuey) in [rust-lang/backtrace-rs#513
-   deps: update miniz_oxide to 0.7 by [@&#8203;poliorcetics](https://togithub.com/poliorcetics) in [rust-lang/backtrace-rs#521
-   Add print in BacktraceFmt by [@&#8203;chenyukang](https://togithub.com/chenyukang) in [rust-lang/backtrace-rs#527
-   Bump object to 0.31 by [@&#8203;lnicola](https://togithub.com/lnicola) in [rust-lang/backtrace-rs#522
-   Add an exception for QNX Neutrino 7.0 as a 'no-op' platform by [@&#8203;samkearney](https://togithub.com/samkearney) in [rust-lang/backtrace-rs#529
-   Use mmap64 on Linux. by [@&#8203;mikebenfield](https://togithub.com/mikebenfield) in [rust-lang/backtrace-rs#501
-   dbghlp: Make mutex name unique to the process by [@&#8203;ChrisDenton](https://togithub.com/ChrisDenton) in [rust-lang/backtrace-rs#518
-   gimli add netbsd to handle dl_iterate_phdr as well. by [@&#8203;devnexen](https://togithub.com/devnexen) in [rust-lang/backtrace-rs#512
-   Add other apple targets to libunwind workaround by [@&#8203;thomcc](https://togithub.com/thomcc) in [rust-lang/backtrace-rs#516
-   Add fmt method for BacktraceFmt by [@&#8203;chenyukang](https://togithub.com/chenyukang) in [rust-lang/backtrace-rs#532

##### New Contributors

-   [@&#8203;bwmf2](https://togithub.com/bwmf2) made their first contribution in [rust-lang/backtrace-rs#515
-   [@&#8203;flba-eb](https://togithub.com/flba-eb) made their first contribution in [rust-lang/backtrace-rs#509
-   [@&#8203;nikarh](https://togithub.com/nikarh) made their first contribution in [rust-lang/backtrace-rs#523
-   [@&#8203;poliorcetics](https://togithub.com/poliorcetics) made their first contribution in [rust-lang/backtrace-rs#521
-   [@&#8203;GuillaumeGomez](https://togithub.com/GuillaumeGomez) made their first contribution in [rust-lang/backtrace-rs#524
-   [@&#8203;chenyukang](https://togithub.com/chenyukang) made their first contribution in [rust-lang/backtrace-rs#527
-   [@&#8203;lnicola](https://togithub.com/lnicola) made their first contribution in [rust-lang/backtrace-rs#522
-   [@&#8203;samkearney](https://togithub.com/samkearney) made their first contribution in [rust-lang/backtrace-rs#529
-   [@&#8203;mikebenfield](https://togithub.com/mikebenfield) made their first contribution in [rust-lang/backtrace-rs#501
-   [@&#8203;devnexen](https://togithub.com/devnexen) made their first contribution in [rust-lang/backtrace-rs#512
-   [@&#8203;thomcc](https://togithub.com/thomcc) made their first contribution in [rust-lang/backtrace-rs#516
-   [@&#8203;workingjubilee](https://togithub.com/workingjubilee) made their first contribution in [rust-lang/backtrace-rs#533
-   [@&#8203;chriswailes](https://togithub.com/chriswailes) made their first contribution in [rust-lang/backtrace-rs#534

**Full Changelog**: rust-lang/backtrace-rs@0.3.67...0.3.68

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/X-oss-byte/Nextjs).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants