Am 03.11.19 um 18:10 schrieb J. Gareth Moreton:
Here's a larger snippet of the code in question - it's a bit too long to
post, but there's a lot of conditional jumps to .Lj1859 earlier on:
.Lj1875:
testl $1024,92(%rbx)
jne .Lj1878
leaq .Ld523(%rip),%rax
movq %rax,-56(%rbp)
movq $11,-64(%rbp)
movq 64(%rbx),%rax
movq %rax,-40(%rbp)
movq $11,-48(%rbp)
leaq .Ld524(%rip),%rax
movq %rax,-24(%rbp)
movq $11,-32(%rbp)
movq 80(%rbx),%rcx
leaq -72(%rbp),%rdx
call CUSTOMCODETOOL$_$TCUSTOMCODETOOL_$__$$_MAINFILENAME$$ANSISTRING
movq -72(%rbp),%rax
movq %rax,-8(%rbp)
movq $11,-16(%rbp)
leaq -64(%rbp),%rcx
movl $3,%edx
call FILEPROCS_$$_DEBUGLN$array_of_const
orl $1024,92(%rbx)
.Lj1878:
movq $0,24(%rbx)
.Lj1859:
nop
.Lj1858:
movq %rbp,%rcx
call
IDENTCOMPLETIONTOOL$_$TIDENTIFIERLISTITEM_$_GETNODE$$TCODETREENODE_$$_fin$00000239
movq %rsi,%rax
movq -88(%rbp),%rbx
movq -80(%rbp),%rsi
leaq (%rbp),%rsp
popq %rbp
ret
.seh_handler __FPC_specific_handler,@unwind
.seh_handlerdata
.long 1
.long 0
.rva .Lj1857
.rva .Lj1858
.rva
IDENTCOMPLETIONTOOL$_$TIDENTIFIERLISTITEM_$_GETNODE$$TCODETREENODE_$$_fin$00000239
The two unwind entries (.rva) are labels that come right after a NOP
instruction, and are the only references to these labels - meanwhile,
the conditional jumps nearer the top go to the labels that appear before
the nop instruction and are otherwise just testing registers and memory
locations with no calls to other routines.
Yes, this is exception handling code, have a look at
compiler/x86_64/nx64flw.pas for details.
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel