https://pastebin.com/r03HxDrX
rsp 0x7fffffffd6e8 0x7fffffffd6e8 BAD: not 16-byte aligned
pc=> 0x7ffff613616c <__GI__dl_catch_error+108>: movaps %xmm0,0x50(%rsp)
The problem is that the effective address 0x...738 is not 16-byte aligned,
and this generates SIGSEGV because 'movaps' requires 16-byte alignment.
__GI__dl_catch_error is storing 128 bits (16 bytes) from register %xmm0
into the local stack frame at address (0x50 + %rsp) = (0x50 + 0x7fffffffd6e8)
using the opcode 'movaps' which is "MOVe Aligned Packed Single [precision floating
point]".
Given that the runtime dynamic loader does not use floating point,
this is probably a compiler optimization for zero-ing out two adjacent
8-byte pointers. Check the glibc source code for "dl_catch_error".
These days the stack pointer %rsp is supposed to be 16-byte aligned
"all the time". So either there is a compiler error, or setjmp/longjmp
error, or a stack-alignment error in the signal handler for _some_other_
signal (not the current SIGSEGV). Diagnose the compiler error by
(gdb) disassemble __GI__dl_catch_error
to see whether the compiler maintains 16-byte alignment.
For setjmp/longjmp inquire at glibc.
For signal handler ask glibc and kernel.
--
_______________________________________________
devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]