On Monday, 5 September 2022 at 12:07:35 UTC, Paul Backus wrote:
On Monday, 5 September 2022 at 10:47:38 UTC, IchorDev wrote:
Ah, I'm actually trying to create my own implementation of
this, so the goal would be to not rely on a dependency.
I can't exactly make head nor tail of the library's source
other than that it seems to have a unique implementation on
each processor/OS type.
I'm sure there must be something hidden in `core.internal.`
for this. I'll look at the implementation of `rt.trace` and
see if I can find anything.
I think this is what you are looking for:
https://github.com/dlang/dmd/blob/master/druntime/src/rt/deh.d
Digging in a little deeper, it looks like the druntime
implementation ultimately depends on the [C++ exception handling
ABI][1], via its platform-independent library interface. Bindings
are defined in [`core.internal.backtrace.unwind`][2].
There is also what looks like a from-scratch implementation of
table-based exception handling in [`rt.deh_win64_posix`][3], but
according to a comment it is no longer used. Might be educational
to read, though.
[1]: https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html
[2]:
https://github.com/dlang/dmd/blob/master/druntime/src/core/internal/backtrace/unwind.d
[3]:
https://github.com/dlang/dmd/blob/master/druntime/src/rt/deh_win64_posix.d