On Mon, 8 Jan 2024 at 13:36, Berthold Stoeger
<[email protected]> wrote:
>
> > here's the disassembled code and yes, it does call terminate...
>
> Does it? At least not directly as far as I can see. I reckon this is the
> exception handler?
Yeah, that branch to ___clang_call_terminate is not in the regular
code path, that is just
stp x20, x19, [sp, #-32]!
stp x29, x30, [sp, #16]
add x29, sp, #16
mov x19, x0
ldr x0, [x0]
bl _objc_msgSend$dealloc
mov x0, x19
ldp x29, x30, [sp, #16]
ldp x20, x19, [sp], #32
ret
which is basically just that "dealloc" call (plus flame setup, save
x18/x19, save old FP/LR).
So that
bl ___clang_call_terminate
is unreachable by normal means, but presumably is there thanks to some
exception handler thing, which is presumably also why the frame has
been undone and this function isn't shown in the backtrace.
Bad form, but hey, exception handling is messy.
Linus
_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface