LINUX.ORG.RU

C++ исключения и секция .eh_frame ELF-файла от современного gcc

 


0

2

Вопрос про современные zero-cost исключения в плюсах на GCC на базе itanium ABI (DWARF-разворачивание стека).

Я так понимаю, если ты каким-то образом просрал секцию .eh_frame (тупо не загрузил из ELF-файла или перезаписал какой-то другой чужой или испортил старую) и добился того, чтобы у тебя диапазоны адресов из неё накрылись тазом, то все твои хорошие try-catch тупо не будут найдены после throw и всегда будет вызываться std::terminate() ?

СИТУАЦИЯ:

Есть софтина, которая каким-то образом (через ldopen наверное, как ещё...) берёт символы из моей либы и юзает. И мои исключения в моём .so корректно при этом перехватываются и пишут мои аккуратные логи. Но есть другая софтина, которая скомпилена в виде .so и тоже берёт ту же мою либу .so и любой exception роняет эту софтину в std::terminate(). Эксцепшн не перехватывается даже catch(...), который у меня написан. Может ли эта вторая софтина как-то просирать нужные секции? Как у первой получается жить, что забыла сделать вторая при загрузке либы?

То есть, поверхностная разница в том, первый раз мой код юзают загрузив из .so, а второй раз посредством другой .so, которая грузит мой .so.



Последнее исправление: hlamotron (всего исправлений: 3)
Ответ на: комментарий от hlamotron

т.е. ты сюда поспорить пришёл?

проблема в тулчейне

/thread

anonymous
()
Ответ на: комментарий от asaw

Вовсе даже не обязательно.

Что ты тогда называешь «проблемы линковки»? Обычно под этим понимают, что символ не нашёлся. А если называть проблемами линковки «неведомую херню, происходящую на этапе запуска», то я и сам вижу, что неведомая херня происходит)

hlamotron
() автор топика

Софтина часом не слинкована статично на libgcc_s?

anonymous
()
Ответ на: комментарий от hlamotron

Обычно под этим понимают, что символ не нашёлся.

Или нашелся не тот символ, который нужен, потому что какой-нибудь умник куда-нибудь залинковал статический рантайм.

asaw ★★★★★
()
Ответ на: комментарий от asaw

что вы там курите (включая анона выше)?

какой рантайм? при раскрутке стека поиск идёт по .eh_frame не той so-шки.

anonymous
()
Ответ на: что вы там курите (включая анона выше)? от anonymous

что вы там курите (включая анона выше)?
какой рантайм? при раскрутке стека поиск идёт по .eh_frame не той so-шки.

Это ты что куришь. Как ты себе представляешь «поиск по .eh_frame не той so-шки»?

anonymous
()
Ответ на: комментарий от anonymous

какой — на то воля загрузчика

Баг загрузчика против кривизны рук людей, которые гадают на кофейной гуще, что они сотворили. Что же более вероятно...

anonymous
()
Ответ на: комментарий от anonymous

Тупой вопрос: а .eh_frame может быть только один на весь процесс? Они не комбинируются в одну большую таблицу?

hlamotron
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.