-
Couldn't load subscription status.
- Fork 10.6k
[Backtracing][Linux] Enable Linux backtracing, add tests. #66338
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
Conversation
|
@swift-ci Please test |
This should have been disabled until swiftlang#66338. rdar://110261430
c4f92c5 to
e3425aa
Compare
|
@swift-ci Please test |
1 similar comment
|
@swift-ci Please test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wasn't aware of this module, do we finally have a replacement for all the numerous platform-specific libc modules?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No. The _Backtracing module has its own thing that does precisely that, but it isn't available outside of the build of libswift_Backtracing. Why do that? Because we actually can't use Glibc, Darwin et al from here for build system related reasons, so the alternative was a horrible header in SwiftShims that had to redeclare all kinds of things from each of the C libraries. That made me very sad, so instead I turned off implicit modules and added a modules directory in the Backtracing directory that contains a handful of special modules that are only used by _Backtracing, only with the C/C++ importer, and only ever @_implementationOnly at that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That is relevant here because of 1c8362b, which was needed because I did that (and because the test does slightly the wrong thing — it treats the module it's testing as the main module, which causes the deserialiser to behave differently).
|
Just to clarify, the commits that need reviewing in this PR are c9992ad, e3425aa and 1c8362b. The others aren't relevant to this one, and I don't want to get everything all mixed up here if we can help it. |
|
swiftlang/swift-corelibs-xctest#445 @swift-ci Please clean test Linux platform |
The Swift backtracer's frame pointer unwinder cannot work on Linux without this change, because the compiler omits the frame pointer from the function in libSwift_Backtracing that actually captures the stack. rdar://110260855
Using `SwiftShims` is undesirable - it creates all kinds of build issues, and means shipping the `_SwiftBacktracing.h` header in the SDK, which is not necessary. While we're doing this, add the necessary definitions for reading ELF and DWARF information. rdar://110261712
Use the new module structure rather the old SwiftShims header. This is much cleaner and lets us include operating system headers to get the relevant definitions where possible. Add code to support ELF and DWARF, including decompression using zlib, zstd and liblzma if those turn out to be required and available. rdar://110261712
This is for compatibility, so that I can split up the PRs. We'll remove it in the next PR. rdar://110261712
1c8362b to
bc738e7
Compare
|
swiftlang/swift-corelibs-xctest#445 @swift-ci Please clean test Linux platform |
There's a chance that pipes might perform a partial read; we should handle that case. rdar://110261712
bc738e7 to
65803a6
Compare
|
swiftlang/swift-corelibs-xctest#445 @swift-ci Please clean test Linux platform |
The `status` argument to the `_swift_backtrace_demangle()` function isn't especially useful, won't match behaviour on Windows, and we actually don't use it in the Swift code that calls this SPI. Remove it. rdar://110261712
`__cxa_demangle()` is a rather unusual API; one of its "features" is that the pointer you pass in must either be `nullptr`, in which case it will call `malloc()` itself, _or_ it has to be a pointer to a block of memory allocated with `malloc()`, because `__cxa_demangle()` may `realloc()` it for you. This seems to me to be something of a non-obvious footgun, so we never pass the caller's pointer through to `__cxa_demangle()`, which lets them decide how they want to allocate space. rdar://110261712
65803a6 to
47f47f2
Compare
|
swiftlang/swift-corelibs-xctest#445 @swift-ci Please clean test |
This should have been disabled until swiftlang#66338. rdar://110261430
|
Ah, the |
|
@swift-ci Please test |
…ule. There's a separate declaration here because we can't include the `Backtrace.h` header from inside `modules/Runtime/Runtime.h`. rdar://110261712
The `_Backtracing` module has a number of private implementation only imports that aren't used outside of the module and that don't require any additional libraries (hence they aren't relevant to the outside world). `verify_all_overlays.py` needs to know about these when it does its test, because it loadas the module as the main module, which results in implementation only imports being required instead of ignored. rdar://110261712
We need a Linux specific `Target` implementation, and a couple of minor tweaks to make things build everywhere. rdar://110262673
This reverts commit 0d7c45d9dac68ca820baec816b8857070168136a.
We don't need these here. They were a leftover from previous code. rdar://110262673
Turn on the Linux backtracing implementation and update the tests. rdar://101623265
This reverts commit e5f4c20. rdar://101623265
47f47f2 to
3042cd7
Compare
|
@swift-ci Please test |
Turn on the Linux backtracing implementation and update the tests.
rdar://101623265