From d9f4c85d2e042f4cb41f868d51c7675923d25388 Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Wed, 29 Jan 2020 22:21:21 +0000 Subject: [PATCH] * llvm sometimes uses the AArch64 framepointer register as a regvar in the main routine (because it can never return) -> attempt to guard against invalid accesses in get_caller_addr git-svn-id: trunk@44066 - --- rtl/aarch64/aarch64.inc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rtl/aarch64/aarch64.inc b/rtl/aarch64/aarch64.inc index 7903589662..5719380bea 100644 --- a/rtl/aarch64/aarch64.inc +++ b/rtl/aarch64/aarch64.inc @@ -166,7 +166,14 @@ function get_caller_addr(framebp:pointer;addr:pointer=nil):pointer;assembler; no asm cbz x0, .Lcaller_addr_invalid ldur x0, [x0] +{$ifndef cpullvm} cbz x0, .Lcaller_addr_invalid +{$else cpullvm} + movn w1, #0 + cmp x0, x1 + csel x0, xzr, x0, ls + b.ls .Lcaller_addr_invalid +{$endif cpullvm} ldur x0, [x0, #8] .Lcaller_addr_invalid: end;