Commit Graph

56 Commits

Author SHA1 Message Date
Jesse Zamora e73c16a330 Support reading DWARFv2 format in DwarfReader
- It is essentially the same as DWARFv3 minus a few missing fields.
2026-02-06 18:13:40 -05:00
Alastair Houghton 3e7647de2c [Backtracing] Fix silly mistake.
I really did mean `ret`.

rdar://101623384
2026-02-06 08:53:16 +00:00
Alastair Houghton ceaba82d6d [Backtracing] Updates after review.
Tweaked the comment in `Runtime/Config.h`.

Fixed a couple of incorrect ARM64 instruction mnemonics.  This still needs
testing on ARM64 Windows.

Fixed an out-of-date comment in `swift-backtrace`.

Use a macro in `Backtrace.cpp` to guarantee we don't overrun the buffer,
and in the process simplify the code slightly.

rdar://101623384
2026-02-06 08:53:16 +00:00
Alastair Houghton ae71bd8d65 [Backtracing] Fix tests up for Windows.
We can't use `|| true` on Windows, so use `not` instead.

Also, on Windows, program names get downcased because `lit` uses
`os.path.normcase()`, so if we have program names in the output,
make sure the programs are already lower-case.

Fix up the stack overflow test to match the expected output.

Plus fix the macOS build to always build for macOS 26.0 or above.

rdar://101623384
2026-02-06 08:53:16 +00:00
Alastair Houghton d9b0031f09 [Backtracing] Build and test fixes.
Tweak things to build on Linux and macOS again.

Also fix a few things in the tests.

rdar://101623384
2026-02-06 08:53:15 +00:00
Alastair Houghton 58a6470ac3 [Backtracing] Fix build failures for places Runtime doesn't build.
We should only add the assembly files if we're actually going
to build the `Runtime` module.  This was tripping up iOS/tvOS/
watchOS builds.

rdar://101623384
2026-02-06 08:53:15 +00:00
Alastair Houghton f6af22c402 [Backtracing] Don't pull in windows.h unnecessarily.
Also, fix two files that managed to use Windows API without
importing `WinSDK` as a result of the leakage caused by including
`windows.h` from `codeview.h`.

rdar://101623384
2026-02-06 08:53:15 +00:00
Alastair Houghton 38c4848b12 [Backtracing] Remember to emit end instruction.
We were omitting the `end` instruction, the upshot of which was
that the compact backtrace was always being decoded as truncated.

rdar://101623384
2026-02-06 08:53:15 +00:00
Alastair Houghton add83b4d22 [Backtracing] Don't build backtracing code when it's disabled.
Don't even bother building the backtracing code if the backtracing
code is disabled.

rdar://101623384
2026-02-06 08:53:12 +00:00
Alastair Houghton 54f9cee919 [Backtracing] Fix typos, tidy up.
Fix a couple of typos and remove some `print()` statements that
were added for debugging.

rdar://101623384
2026-02-03 18:23:30 +00:00
Alastair Houghton a677131c96 [Backtracing] Tweak a few things after rebasing.
Fix a couple of issues with the rebase.

Also, add code to handle the debug exceptions (which we don't want
to crash the process).

rdar://101623384
2026-02-03 18:23:29 +00:00
Alastair Houghton 6d930d39ec [Backtracing] Make tests work, plus various fixes.
Made the tests run, then fixed various issues with them.

rdar://101623384
2026-02-03 18:23:29 +00:00
Alastair Houghton e0845e1483 [Backtracing] Made on-crash backtraces work for 64-bit.
On-crash backtracing is basically there for 64-bit Windows.  It
won't work on 32-bit because of a Swift compiler issue, and there
is a little more work to do yet, but it is now working!

rdar://101623384
2026-02-03 18:23:29 +00:00
Alastair Houghton 38f91e2dbd [Backtracing] Fix Linux and macOS builds.
There was a case-sensitivity problem, and a missing source file.

rdar://101623384
2026-02-03 18:23:29 +00:00
Alastair Houghton bf9dd3ac55 [Backtracing] Make line numbers work.
Also fix things so that we use the right path separator, depending
on image type, and add support for `DW_AT_specification` attributes
on `DW_TAG_subprogram` entries.

rdar://101623384
2026-02-03 18:23:29 +00:00
Alastair Houghton 3cdac64200 [Backtracer] Fix some bugs that prevented DWARF reading.
This is now fetching symbols successfully, though not line numbers
yet.

rdar://101623384
2026-02-03 18:23:29 +00:00
Alastair Houghton 7f57385be4 [Backtracing][Windows] Add PE file parsing and DWARF-in-PE support.
This should allow us to get symbolicated backtraces for Swift code
that is built with DWARF debug information.

rdar://181623384
2026-02-03 18:23:29 +00:00
Alastair Houghton d13988bd5f [Backtracing][Windows] Initial Windows support.
This doesn't have a working symbolicator yet, but it does build and
it can obtain a basic backtrace.

It also doesn't include a working `swift-backtrace` program yet.

rdar://101623384
2026-02-03 18:23:29 +00:00
Alastair Houghton 07eaaf2ed7 [Backtracing] For DWARF 3, skip maximum_operations_per_instruction
DWARF 3 doesn't have the `maximum_operations_per_instruction` field
in the line number header.  As a result, we were mis-reading the
subsequent fields in the DWARF line table header.

rdar://168996222
2026-01-27 14:37:04 +00:00
Alastair Houghton 9b74e82d16 Merge pull request #86535 from AZero13/zlib
Total output needs to have the last outbuffer pos added to it
2026-01-16 13:25:57 +00:00
Konrad `ktoso` Malawski 40dabefdb4 Reapply: Runtime: expose demangle() in Runtime module (#84788) (#86510) 2026-01-14 21:44:28 +09:00
AZero13 38d0284c00 Total output needs to have the last outbuffer pos added to it 2026-01-13 13:09:36 -05:00
Alastair Houghton e0486a47bd [Backtracing] Add some more availability annotations.
We needed a few more annotations, it turns out.  Also, we need to disable
availability checking when building swift-backtrace.

rdar://164850733
2026-01-09 15:48:37 +00:00
Alastair Houghton 6a6ff87602 [Backtracing] Move availability definition, fix tests.
Move the availability definition to the `.def` file, and then
turn off availability checking in the tests.

rdar://164850733
2026-01-09 11:58:36 +00:00
Alastair Houghton 22a7c8fa0a [Backtracing] More availability annotations required.
Apparently we need some more availability annotations.

rdar://164850733
2026-01-09 11:58:36 +00:00
Alastair Houghton 64fa447210 [Backtracing] Add missing availability annotations.
This is slightly complicated by us currently not supporting this code
on iOS/tvOS/watchOS/visionOS.  We should fix that, at which point we
can use the `SwiftStdlib`/`StdlibDeploymentTarget` macros instead.

rdar://164850733
2026-01-09 11:58:35 +00:00
AZero13 c83e58c6f4 Fix typos in Register
37-38 are reserved, not 36
2025-12-31 16:26:03 -05:00
Carl Peto 1c3684f217 make sure crashed is explicitly set if absent, and that symbolication options can be passed in 2025-12-17 12:59:44 +00:00
Carl Peto 740f2d4c81 pr feedback and unit test fixes 2025-12-12 16:32:02 +00:00
Carl Peto 8f8d4585c1 pr feedback
Changed the way swift-backtrace works for JSON, so that it captures
into a CrashLog, then writes to JSON from the CrashLog. Separating out
the two sets of logic so that writing the CrashLog to JSON becomes
simpler and more modular.
2025-12-08 11:29:33 +00:00
Carl Peto 237c99f135 move JSON formatter into Runtime module 2025-12-08 11:29:33 +00:00
Carl Peto c42dcfcbce refactor JSON.swift from swift-backtrace to be useable by swift-symbolicate 2025-12-08 11:29:32 +00:00
Alastair Houghton 210eae4f7d Merge pull request #82720 from al45tair/eng/PR-154837649
[Backtracing][Linux] Ignore `SHT_NULL` sections.
2025-07-08 15:38:15 +01:00
Alastair Houghton fbd87591d0 [Backtracing][Linux] Ignore SHT_NULL sections.
The ELF specification says that if a section's type is set to `SHT_NULL`,
_none_ of the other fields are valid, so we shouldn't even be trying to
read the section name.

(We won't crash, because of how all of this code works, but we might
read an incorrect name.)

rdar://154837649
2025-07-02 14:35:16 +01:00
Alastair Houghton b498b39b79 [Backtracing][Linux] Fix crash handler for musl.
Musl's `clone()` wrapper returns `EINVAL` if you try to use `CLONE_THREAD`,
which seems a bit wrong (certainly it is in this particular application,
since we *really* don't care whether the thread is a valid C library
thread at this point).

Also properly support ELF images that are built with a base address other
than zero (this typically isn't an issue for dynamically linked programs,
as they will be relocated at runtime anyway, but for statically linked
binaries it's very common to set the base address to a non-zero value).

rdar://154282813
2025-06-30 14:21:27 +01:00
Alastair Houghton b5461aeb22 [Backtracing] Added JSON crash log option.
Also made it so the `sanitize` option causes the crash logs to not
include memory dumps.

Fixes #71057
rdar://121430255
2025-02-26 14:12:17 +00:00
Alastair Houghton 864f3dc023 [Backtracing] Fix bug in Compact Image Map decoder.
The `expand` opcode was being decoded incorrectly in the case where we
were trying to expand prefixes with codes of 64 or above.

rdar://144497804
2025-02-14 14:59:20 +00:00
Johannes Weiss e533b8a7ff fix ELF/DWARF leak 2025-02-05 14:27:18 +00:00
Arnold Schwaighofer d2d5ad6df4 Merge pull request #79111 from al45tair/eng/PR-144045984
[Backtracing] Local|RemoteMemoryReader only exists on macOS and Linux.
2025-02-03 08:36:53 -08:00
Alastair Houghton 615f884a42 Merge pull request #79057 from al45tair/backtracing-cxxstdlib-dep
[Backtracing] Add missing CxxStdlib dependency.
2025-02-03 16:26:55 +00:00
Alastair Houghton a60dd8f76d [Backtracing] Local|RemoteMemoryReader only exists on macOS and Linux.
When fixing the previous problem, I should have realised that this
would cascade; the `@_specialize` annotations refer to the cached
versions of the types, and those are now turned off except on macOS
and Linux because they rely on the uncached versions, which are only
available on macOS and Linux.

rdar://144023438
2025-02-03 12:34:42 +00:00
Allan Shortlidge 2b8d1be3ca Backtracing: Suppress a "switch covers known cases" warning. 2025-02-01 10:28:27 -08:00
Alastair Houghton dd40b2f501 Merge pull request #79071 from al45tair/eng/PR-143869185
[Backtracing] Bump minimum deployment targets.
2025-02-01 10:28:14 +00:00
Alastair Houghton 884cf75fb2 [Backtracing] Add missing CxxStdlib dependency.
To do this we also need to fix AddSwiftStdlib because if you set the
`INSTALL_WITH_SHARED` flag, the CMake scripts don't make a target
with the `-static` suffix, but AddSwiftStdlib also assumes that it
should dad `-static` to any module dependencies when building a
static library.
2025-01-31 14:52:48 +00:00
Alastair Houghton 5d9def94ad [Backtracing] Uncached(Local|Remote)MemoryReader only exists on macOS and Linux.
There's no support for this type on anything other than macOS and Linux
right now.

rdar://143865183
2025-01-31 14:22:31 +00:00
Alastair Houghton 857c96300f [Backtracing] Bump minimum deployment targets.
We need a minimum deployment target of 10.15 now, because of the use
of `some Sequence<T>` in the Runtime module interface.

rdar://143869185
2025-01-31 14:16:07 +00:00
Alastair Houghton 26d0e49764 [Backtracing] Updates following review.
Added some explanatory text to the Compact Backtrace Format
documentation, and also to the `CMakeLists.txt` for the runtime.

Tweaked the conversions for `Backtrace.Address` to truncate, which
should result in reasonable behaviour for negative fixed-width
integers.

Use a constant for the ASCII values for `/` and `\` in the Compact
Image Format encoder/decoder.

Make the TSD key for `ElfImageCache` non-optional, and call
`fatalError()` if we don't get one.

rdar://124913332
2025-01-27 17:22:39 +00:00
Alastair Houghton c9c5dc0de1 [Backtracing] Add platform and architecture information.
It's useful to capture the platform and platform version with the image map.
Also, display both the platform and architecture information when generating
a crash log.

rdar://124913332
2025-01-27 15:44:28 +00:00
Alastair Houghton 12aee901c2 [Backtracing] Fix compact image map decoding bug.
If we ended up with a `/` at the beginning of a string segment, we
were erroneously not adding to the expansion dictionary when we
should have been.

rdar://124913332
2025-01-22 16:35:44 +00:00
Alastair Houghton 2300577b56 [Backtracing] Fix symbol lookup on Linux.
Also removed a spurious `print()` that got left in by accident,
and disabled the `CodableBacktrace.swift` test on Linux since we
need Foundation and we don't have it there.

rdar://124913332
2025-01-21 19:05:08 +00:00