[fpc-devel] Regarding issue/patch 0032637

J. Gareth Moreton gareth at moreton-family.com
Thu Nov 30 05:26:33 CET 2017


Ooh right, okay.  Thanks for that Sergei.  I just put it in somewhat blindly because the compiler inserts it 
for Pascal code after the normal prologue after creating a stack frame, but complained and threw an error if 
I used .seh_pushreg but then neglected to use .seh_endprologue.  I agree that the compiler should complain 
if it finds things out of order like I did, otherwise one may not know any better.

I'm still learning the nuances!  I'll just fix my code.

Gareth aka. Kit

P.S. Is there any way to remove the other patches from that bug report.

P.P.S. Would you be able to say my advice was plain wrong on the forum post and correct it, just for the 
sake of anyone else who stumbles across it.

P.P.P.S. Any possibility of inserting similar functionality for Intel-style assembler at some point?



On Wed 29/11/17 14:58 , "Sergei Gorelkin via fpc-devel" fpc-devel at lists.freepascal.org sent:
> 
> 
> 
> 
> 29.11.2017 15:12, J. Gareth Moreton wrote:
> 
> > Thanks Christo.
> 
> > 
> 
> > Apologies for 4 messages coming in at once.  I
> think there were a few technical glitches with the mailing
> > list.  Either way, I have submitted an updated
> patch to the bug report in question that corrects the stack
> > unwinding for Windows.  Any testing would be
> greatly appreciated (I'm not in a position to rigorously test
> > the code for Linux).
> 
> > 
> 
> > Yeah, I got a little emotional with Thaddy's
> response (which has since been deleted), partly because he
> > mocked me a bit for even attempting to use
> assembly language for optimisation. Granted, I tend to do more
> > low-level and mathematical programming than
> higher-level components, where assembler optimisation can really
> > pay dividends. Plus in a perverted way, I
> actually enjoy trying to squeeze another microsecond out of
> > running time!
> 
> > 
> 
> > Gareth aka. Kit.
> 
> > 
> 
> 
> 
> I should have read and answered earlier, but better late than never.
> 
> 
> 
> The x86-64 target (actually, all targets except i386 and m68k) use concept
> of fixed stack. This 
> means: all changes to the stack pointer are done at the beginning and at
> the end of procedure. 
> Pushing something in the middle is illegal. The stack pointer itself needs
> to be aligned only at the 
> point of calling another procedure. As a consequence, simple procedures
> that don't call other 
> procedures and don't use nonvolatile registers can have the stack pointer
> misaligned by 8 bytes as 
> it naturally is at the first instruction (such procedures don't need any
> SEH annotations at all, 
> which is a way to simplify things).
> 
> Now, several first instructions where is stack pointer is changed and
> nonvolatile registers are 
> saved is called prologue. It is delimited by .seh_endprologue directive and
> can be at most 255 bytes 
> in size.
> 
> The advice given at forum to insert .seh_endprologue at the very beginning
> is plain wrong. 
> .seh_endprologue must be the last SEH directive in procedure. Compiler
> probably needs to do more 
> checks and reject SEH directives coming after .seh_endprologue.
> 
> 
> 
> Regards,
> 
> Sergei
> 
> 
> 
> _______________________________________________
> 
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
> 
> 
> 
> 




More information about the fpc-devel mailing list