Re: Поддержка исключений и RtlUnwind
Во время зимнего сезона разработки, работая над новой прикладной задачей в рамках проектов «Канторовых систем», чуть было не увлекся и не ушел в переделку исключений CoreLite. Поскольку в код так или иначе смотрел, сложилось некоторое представление (может быть неверным):
Windows перехватывает аппаратные исключения на манер того, как описано выше для Колибри, но одевает их в структурную оболочку, описываемую в Delphi как TExceptionRec.
Delphi устанавливает обработчик, получающий эти самые TExceptionRec и транслирует их в объекты исключений (экземпляры класса Exception), чтобы на стороне прикладных программ аппаратные исключения в плане обработки были неотличимы от программных исключений. Е — единообразие.
Попутно в TLS создаются цепочки обработчиков исключений, адресуемые через сегментный регистр FS. Как понял, это самостоятельный, отдельный от транслятора аппаратных исключений механизм.
По всей видимости, имеется некий стандарт либо аппаратная обусловленность обработчиков исключений по FS, поскольку имеется системная функция RtlUnwind, разработанная явно не в Borland.
Механизм RtlUnwind чисто прикладной и зависит лишь от наличия TLS и соглашения по параметрам обработчиков.
Возможно даже, что RtlUnwind нужна для каких-то особых случаев, а обычная обработка исключений еще проще и RtlUnwind не задействует (тут могу сильно ошибаться).
Тем самым выходит, что раньше я не понимал задачу и ставил ее неправильно. Мы не должны ждать RtlUnwind от системщиков как манны небесной, а реализовать ее сами, вместе с механизмом установки обработчиков через TLS и регистр FS ← это же стандарт какой-то, да?
Потом уже можно будет организовать трансляцию аппаратных исключений (Е — единообразие), продумать классы, добавить TObject в модуль System и всё остальное, что потребуется.