Stackframes и Win64

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Stackframes и Win64

Сообщение Max Rusov »

Неожиданно для себя открыл, что в Win64 stackframe's деляются совершенно иначе чем в Win32 - без использования регистра RBP, как я наивно ожидал, по аналогии с EBP. А для трассировки callstack под Win64 предлагается использовать API-шный вызов CaptureStackBackTrace. Но под FPC у меня это не заработало, хотя под delphi 64 - все Ok.

Вопрос: соблюдаются ли в FPC спецификации win64 по формату StackFrame'ов, или он генерит их "по своему"?

Я использую довольно старую версию (2.4.0) и если в новых версиях ситуация изменилась - заранее извиняюсь. Но сейчас проводить эксперименты с новой версией у меня нет возможности - если кто нибудь знает точно были ли правки в этом аспекте - буду очень признателен за информацию.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Эти спецификации соблюдаются только в 2.7.1, собранном с опцией -dTEST_WIN64_SEH.
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

Спасибо. А можете примерно подсказать - насколько это отлажено? Рисковано ли браться за перевод довольно крупного проекта на эту версию? А то как то слово TEST внушает опасения...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Часть "TEST" не настолько страшна, насколько часть "2.7.1". С одними строками можно огрести выше крыши...

А обработка исключений в стиле Win64 не дружит в внешними ассемблером/линкером - собственно поэтому она до сих пор в статусе "тест".
Ответить