[fpc-devel] Subject: six issues from a native aarch64-win64 port (three of them not target specific)

Sven Barth pascaldragon at googlemail.com
Tue Aug 25 21:39:03 CEST 2026


Am 25.08.2026 um 12:31 schrieb Sven Harazim via fpc-devel:
> 41870  https://gitlab.com/freepascal.org/fpc/source/-/work_items/41870
>    The epilog start index in the .xdata header is written as 1, but the field is
>    a byte index into the unwind code array. With a two-byte first code, index 1
>    addresses its operand byte: a 4016-byte frame gives c0 fb ..., and the
>    unwinder starts the epilog scope at 0xfb - llvm-readobj calls that a bad
>    opcode. For other sizes the operand byte is a valid code and is executed as
>    one: 0x3f decodes as save_r19r20_x.
>
> 41871  https://gitlab.com/freepascal.org/fpc/source/-/work_items/41871
>    At or above one page of locals the allocation goes through the probing path,
>    where no ash_stackalloc is emitted, so it is missing from the .xdata
>    altogether. A routine with no other unwind-relevant prologue operation then
>    gets no .pdata entry at all - which per the specification means a leaf that
>    does not touch sp and returns through lr. The defect is independent of 41870,
>    but the patch depends on it landing first: it makes the allocation the first,
>    multi-byte code for every such frame, which is exactly the case 41870
>    mis-indexes. Measured on a compiler carrying only the 41871 patch, a
>    5104-byte frame gives c1 3f, and index 1 executes the 0x3f as
>    save_r19r20_x.
Do you have tests instead of showcases (or reproductions as you call 
them) for these two? Something that I can stuff into FPC's testsuite 
that will fail without these fixes and does not with the fixes applied? 
(preferrably one for each issue)

Regards,
Sven


More information about the fpc-devel mailing list