Минимальная RTL. Проблемы с DLL

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

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

Re: Минимальная RTL. Проблемы с DLL

Сообщение TimK » 11.02.2010 21:05:08

Sergei I. Gorelkin писал(а):Я, честно говоря, не совсем понимаю, что там творится: ну вычли из стека чуть побольше - это неоптимально, но вроде как работать должно по-прежнему. Или же причина в том, что Win64 предъявляет определенные требования к выравниванию стека, а Win32 - нет?
Это явление удается воспроизвести с оригинальным модулем System?


Вот у меня тоже смутные сомнения, что кастрация была через-чур радикальной :) Хотя ничего касающегося стека в оригинале DLL EntryPoint я не заметил. Асемблерный код с оригинальным System у DoProcessAttach одинаковый, но не запускал. Щас проверю.

Добавлено спустя 2 минуты 54 секунды:
TimK писал(а):Асемблерный код с оригинальным System у DoProcessAttach одинаковый, но не запускал. Щас проверю.


С оригинальным все хорошо :oops:
TimK
новенький
 
Сообщения: 16
Зарегистрирован: 13.01.2010 06:26:49

Re: Минимальная RTL. Проблемы с DLL

Сообщение coyot.rush » 11.02.2010 21:21:48

Sergei I. Gorelkin 11.02.2010 20:59:38
Я, честно говоря, не совсем понимаю, что там творится: ну вычли из стека чуть побольше - это неоптимально, но вроде как работать должно по-прежнему. Или же причина в том, что Win64 предъявляет определенные требования к выравниванию стека, а Win32 - нет?

Насчет выравнивания стека незнаю, но параметры в 64 битной версии передаються немного по другому. Количество регистров увеличелось

Как радикальное средство по уменьшень dll писать часть кода на асме
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Минимальная RTL. Проблемы с DLL

Сообщение Sergei I. Gorelkin » 11.02.2010 21:59:10

TimK писал(а):С оригинальным все хорошо

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

Re: Минимальная RTL. Проблемы с DLL

Сообщение TimK » 11.02.2010 22:03:49

Sergei I. Gorelkin писал(а):Тогда похоже на то, что действительно рубанул сплеча и выкинул что-то вроде CheckInitialStkLen (вызывается из инициализации system). С этим нужно поаккуратнее :)

Добавил - не помогает :(

Код: Выделить всё
function CheckInitialStkLen(stklen : SizeUInt) : SizeUInt;assembler;
asm
  movq  %gs:(8),%rax
  subq  %gs:(16),%rax
end;

procedure FPC_LibInitializeUnits; [public, alias: 'FPC_LIBINITIALIZEUNITS'];
begin
  CheckInitialStkLen($1000000);
end;

StackTop, StackBottom, StackLength используется в менеджере памяти и обработке исключений - у меня этого нет...
TimK
новенький
 
Сообщения: 16
Зарегистрирован: 13.01.2010 06:26:49

Re: Минимальная RTL. Проблемы с DLL

Сообщение v-t-l » 12.02.2010 10:39:00

TimK писал(а):код состоит из 10 вызовов WinAPI.

http://flatassembler.net/ :)
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Минимальная RTL. Проблемы с DLL

Сообщение Max Rusov » 09.02.2011 18:56:31

Подниму старую тему, так как сегодня весь день боролся с подобным. Выяснил, что причина в неправильном описании MapViewOfFile в FPC. Последний параметр (dwNumberOfBytesToMap) должен иметь тип SIZE_T а не DWORD. В последней версии (2.4.2) ошибка до сих пор не поправлена. Пожалуйста, отрепортите.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Минимальная RTL. Проблемы с DLL

Сообщение Sergei I. Gorelkin » 09.02.2011 19:53:17

В trunk уже исправлено.

Добавлено спустя 1 минуту 49 секунд:
(если быть точным, то ревизия 15630 от 24 июля прошлого года)
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru