Почти доделал Чеперси, попробовал запустить - закономерно упало, но в бектрейсе - одни шестнадцатеричные адреса.
Стал разбираться - оказалось, слетела моя lineinfo, скопипащенная из RTL в хрен вспомнишь каком лохматом году. Вот чем-то структура взаимоотношений модулей изменилась, и работавший до этого генератор dwarf2 в fpc 2.6.4 вдруг начал гнать пургу.
С матюгами расковырял это, долго трахался, вставляя ей debug write'ы в самые неожиданные места.
Выяснилось: опкод DW_LNE_END_SEQUENCE !внезапно! не означает сброс состояния, поскольку за ней
иногда следует DW_LNE_SET_ADDRESS с нулевым адресом, которую нужно прицельно игнорировать, да и вообще, состояние надо
частично сохранять с предыдущего прохода, а иногда и с предыдущего Compilation Unit. А
насколько частично - определяется методом проб и ошибок.
Короче, рафинированный геморрой
Заодно добавил игнорирование нескольких последних адресов стека вызовов в DieBySEhHack, поскольку хак с подменой адреса возврата в обработчике исключения добавляет туда шум океанов Марса.
Пока эпично превозмогал - нашёл баг с поиском в этой каше по именам екзешников, привнесённый недавним перетряхом (я же к юникодности готовлю, йо!) который, собственно, и давал эффект "только шестнадцатеричные адреса". А вышеописанные ужосныя баги поймались за компанию, и так бы и спали, пока жареный петух бы не клюнул.
Оооочень надеюсь, что при портировании на другие платформы удастся обойтись штатной lineinfo. Основную разработку по любому придётся вести на win32 + fpc2.6.4, поскольку штатные средства (насколько знаю) не обеспечивают парсинг стека вызовов, который пинг-понгом скачет между exe и dll.
..на самом деле, оно даже пытается выковырять dwarf информацию из ntdll.dll, внутрь которой уводит стек вызовов в случае не основного потока. Инфы этой там, естессно, нет, а антивирус негодуэ.
Портировать мою eldritch lineinfo на другие платформы - ищите дурака, у меня и на этой-то, для win32, чуть мосх узлом не завязался.
=============== Сообщение об ошибке: ===============
Системное исключение: Access Violation,
Попытка записи по нулевому адресу
mo_module.pp:182 в _test019.dll
Call stack:
_chentrah_module.lpr:83 в _test019.dll
cl_module.inc:675 в chentrah.exe
cl_window.inc:302 в chentrah.exe
cl_winman.inc:403 в chentrah.exe
cl_main.inc:453 в chentrah.exe
chentrah.lpr:103 в chentrah.exe
====================================================