On Mon, 8 Jan 2024 at 13:36, Berthold Stoeger
<bstoe...@mail.tuwien.ac.at> 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
subsurface@subsurface-divelog.org
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to