core.internal.backtrace.libunwind
Basic D language bindings for LLVM libunwind
There are two available libunwind: The "upstream" one, inherited from HP, which is maintained as a GNU project, and the LLVM one, part of llvm-project, and the default on Mac OSX.
They are both essential part of other languages ABI, and are available in both GCC and LLVM. However, in GCC, only the higher-level functions are exposed (e.g. _Unwind_*) while LLVM expose the higher-level and lower-level (unw_*) functions. Many distributions have a libunwind package as well, that provides the unw_* functions, but since it also supports remote unwinding, the function names are actually platform dependent and binding them is a pain as many things rely on #define.
In the future, we would like to implement backtrace using only the higher-level functions (_Unwind_*), which will allow us to not use backtrace and friends directly, and only retrieve the functions names when needed (currently we need to eagerly get the functions names).
Copyright
See Also
Types 5
ulong[_LIBUNWIND_CONTEXT_SIZE] dataulong[_LIBUNWIND_CURSOR_SIZE] dataunw_word_t start_ipunw_word_t end_ipunw_word_t lsdaunw_word_t handlerunw_word_t gpunw_word_t flagsuint formatuint unwind_info_sizeunw_word_t unwind_infounw_word_t extraFunctions 6
int unw_get_proc_info(unw_cursor_t *, unw_proc_info_t *)Get infos about the current procedure (function)int unw_get_proc_name(unw_cursor_t *, char *, size_t, unw_word_t *)Get the name of the current procedure (function)int unw_get_reg(unw_cursor_t * cp, unw_regnum_t reg, unw_word_t * valp)Reads the value of register `reg` in the stack frame identified by cursor `cp` and stores the value in the word pointed to by `valp`.