Comment # 16 on bug 1206780 from
I've taken a lengthy look at the output of 
/usr/bin/qemu-aarch64 -cpu max -d in_asm,strace /usr/bin/zypper --version

after building qemu-aarch64 with capstone (disassembly) support.

The last thing zypper does is apparently a throw() from a function called 
_ZN6Zypper12shellCleanupEv@@Base().

From there, the code enters

__cxa_throw() (libstdc++6.so)
   _Unwind_RaiseException (libgcc_s1.so)

After that, the code moves around in a code segment that (according to objdump)
belongs to _Unwind_GetTextRelBase(). At some point I see a call to 

pthread_once()
   __enable_execute_stack()

At this point the last system call of zypper is observed, 
 futex(0x00000055035500a4,FUTEX_PRIVATE_FLAG|FUTEX_WAKE,2147483647,NULL,NULL,0)
= 0

apparently as part of pthread_once().

After that, the code jumps around in libgcc_s1.so after
_Unwind_GetTextRelBase(), again. Finally I see a call chain

_Unwind_GetTextRelBase
    _Unwind_find_FDE
         __GI__dl_find_object

The SIGSEGV then happens in _Unwind_GetTextRelBase, probably because
_dl_find_object() returned an invalid object:

0x550352e300:  f9418ea0  ldr      x0, [x21, #0x318]
0x550352e304:  52822d01  movz     w1, #0x1168_dl_find_object
0x550352e308:  f9418aa5  ldr      x5, [x21, #0x310]
0x550352e30c:  72ba5001  movk     w1, #0xd280, lsl #16
0x550352e310:  b9400002  ldr      w2, [x0]  <==== BAD VALUE IN x0
0x550352e314:  6b01005f  cmp      w2, w1
0x550352e318:  54000b21  b.ne     #0x550352e47c

--- SIGSEGV {si_signo=SIGSEGV, si_code=1, si_addr=NULL} ---

The bad x0 value had been found by Fabiano Rosas with gdb.

So something is going wrong in the unwind code that follows the throw(). But
the details are still shady, and it is unclear how this relates to the pauth
feature of qemu-aarch64.


You are receiving this mail because: