Зачем нам нужен DWARF eh_frame, испускаемый компиляторами? - PullRequest
1 голос
/ 19 января 2020

У меня есть красный значок, что eh_frame необходим для stack unwinding во время отладки или когда наш код обнаруживает исключение.

Теперь мои вопросы: разве отладчик не может просто пройтись по стеку и выяснить, границы между кадрами в поисках rbp нажатия или всплытия? Зачем нам нужна дополнительная отладочная информация?

Ответы [ 2 ]

1 голос
/ 20 января 2020

Не все функции имеют указатель кадра. В таких функциях rbp может использоваться для чего-то другого, а данные DWARF используются для описания того, как получить адрес канонического фрейма и адрес возврата. В некоторой степени DWARF также позволяет описывать нестандартные соглашения о вызовах, которые некоторые компиляторы используют для локальных функций (которые не видны снаружи, так что ABI не имеет значения).

0 голосов
/ 03 февраля 2020

Возможно, вы правы, и этот раздел не так необходим для раскрутки стека, пожалуйста, обратитесь к этому исследованию . Но eh_frame также используется некоторыми языками для обработки исключений, и я считаю, что действительно необходимо включать его везде.

...