[fpc-devel]saveregisters bug?
Aleksey V. Vaneev
picoder at sbis.komi.ru
Thu Jan 24 21:08:22 CET 2002
Hello,
Just tried to use 'saveregisters' flag in DLL library's function.
this code is generated at the end of that function:
popl %ebx
popl %esi
popl %edi
movl %eax,28(%esp)
popal
nop
leave
ret
This is obviously incorrect since popal will destroy result in %eax.
Also, some optimisation could be made if saveregisters declared: those
3 push/pops are not really needed.
Along with this I've encountered some problems using DLL calls in
Delphi methods... Seems to be, Delphi needs all registers to be
preserved during call or else afterwards some pointers are destroyed
and normal accessing object's vars is impossible (it traps in
fact). As a temporary measure I've used something like that:
asm pushad end; DLLCall(); asm popad end;
Of course, with 'saveregisters' this problem can be solved if the
code generated for it was correct.
BTW, maybe it is possible to add implicit pushad/popad calls in
exported DLL funcs/procedures? If not, then I dunno why you've
included those implicit 3 push/pops...
Best regards,
Aleksey mailto:picoder at sbis.komi.ru
More information about the fpc-devel
mailing list