Функции _Unwind_ и unw_ (libunwind от LLVM)

#c #linux #llvm #stack-unwinding #libunwind

#c #linux #llvm #разматывание стека #libunwind

Вопрос:

Я новичок в библиотеке libunwind от LLVM. Не могли бы вы, пожалуйста, рассказать мне, в чем назначение и разница двух наборов функций, предоставляемых libunwind:

  1. функции с префиксом _Unwind_
  2. функции с префиксом unw_

Ответ №1:

libunwind является реализацией интерфейса, определенного в проекте HP libunwind . Это было внесено Apple как способ включить портирование clang на платформы, на которых нет system unwinder. Предполагается, что это небольшая и быстрая реализация ABI , без учета некоторых функций HP, libunwind которые так и не были реализованы (например, удаленное развертывание).

Unwinder имеет два уровня API. API-интерфейсы высокого уровня — это _Unwind_* функции, которые реализуют функциональность, требуемую __cxa_* функциями исключения. API-интерфейсы низкого уровня — это unw_* функции, которые представляют собой интерфейс, определенный старым проектом HP libunwind .

https://libunwind.readthedocs.io/en/latest/