#c #linux #llvm #stack-unwinding #libunwind
#c #linux #llvm #разматывание стека #libunwind
Вопрос:
Я новичок в библиотеке libunwind от LLVM. Не могли бы вы, пожалуйста, рассказать мне, в чем назначение и разница двух наборов функций, предоставляемых libunwind:
- функции с префиксом _Unwind_
- функции с префиксом unw_
Ответ №1:
libunwind
является реализацией интерфейса, определенного в проекте HP libunwind
. Это было внесено Apple как способ включить портирование clang на платформы, на которых нет system unwinder. Предполагается, что это небольшая и быстрая реализация ABI
, без учета некоторых функций HP, libunwind
которые так и не были реализованы (например, удаленное развертывание).
Unwinder имеет два уровня API. API-интерфейсы высокого уровня — это _Unwind_*
функции, которые реализуют функциональность, требуемую __cxa_*
функциями исключения. API-интерфейсы низкого уровня — это unw_*
функции, которые представляют собой интерфейс, определенный старым проектом HP libunwind
.