https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71951
--- Comment #3 from Timo Teräs <timo.teras at iki dot fi> ---
$ cat a.cpp <<EOF
#include <iostream>
int foo()
{
throw "Foo!";
}
int main ()
{
try {
foo();
}catch (const char* msg) {
std::cerr << msg << std::endl;
}
return 0;
}
EOF
$ gdb a
GNU gdb (GDB) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "aarch64-alpine-linux-musl".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from a...done.
(gdb) run
Starting program: a
Program received signal SIGSEGV, Segmentation fault.
0x000003ffb7db9780 in _Unwind_GetGR () from /usr/lib/libgcc_s.so.1
(gdb) where
#0 0x000003ffb7db9780 in _Unwind_GetGR () from /usr/lib/libgcc_s.so.1
#1 0x000003ffb7dba938 in ?? () from /usr/lib/libgcc_s.so.1
#2 0x000003ffb7dbab88 in ?? () from /usr/lib/libgcc_s.so.1
#3 0x000003ffb7dbaed4 in _Unwind_RaiseException () from /usr/lib/libgcc_s.so.1
#4 0x000003ffb7e74d28 in __cxa_throw () from /usr/lib/libstdc++.so.6
#5 0x000002aaaaaa0e34 in foo() ()
#6 0x000002aaaaaa0e44 in main ()
(gdb) info registers
x0 0x8 8
x1 0x1d 29
x2 0x0 0
x3 0x4000000000000000 4611686018427387904
x4 0x0 0
x5 0x0 0
x6 0x3b0 944
x7 0x3ffffffed40 4398046506304
x8 0x2aaaaaa0fa8 2932030967720
x9 0x3ffffffecc0 4398046506176
x10 0xa42a4 672420
x11 0xa42a4 672420
x12 0xb66b4978 3060484472
x13 0x18 24
x14 0x100000000000000 72057594037927936
x15 0xb66b4978 3060484472
x16 0x3ffb7dcee90 4396836253328
x17 0x3ffb7f7a528 4396838004008
x18 0x2aaaaaa06c9 2932030965449
x19 0x3fffffff1e0 4398046507488
x20 0x3fffffff1e0 4398046507488
x21 0x3ffffffe980 4398046505344
x22 0x3fffffff5a0 4398046508448
x23 0x190 400
x24 0x3ffb8005000 4396838572032
x25 0x3fffffff5a0 4398046508448
x26 0x3ffb8003000 4396838563840
x27 0x0 0
x28 0x0 0
x29 0x3fffffffc50 4398046510160
x30 0x3ffb7dba938 4396836170040
sp 0x3ffffffe910 0x3ffffffe910
pc 0x3ffb7db9780 0x3ffb7db9780 <_Unwind_GetGR+72>
cpsr 0x60000000 1610612736
fpsr 0x0 0
fpcr 0x0 0
(gdb) disas
Dump of assembler code for function _Unwind_GetGR:
0x000003ffb7db9738 <+0>: cmp w1, #0x61
0x000003ffb7db973c <+4>: b.le 0x3ffb7db9748 <_Unwind_GetGR+16>
0x000003ffb7db9740 <+8>: str x30, [sp,#-16]!
0x000003ffb7db9744 <+12>: bl 0x3ffb7db2670 <abort@plt>
0x000003ffb7db9748 <+16>: ldr x3, [x0,#832]
0x000003ffb7db974c <+20>: sxtw x1, w1
0x000003ffb7db9750 <+24>: ldr x2, [x0,x1,lsl #3]
0x000003ffb7db9754 <+28>: tbz x3, #62, 0x3ffb7db976c
<_Unwind_GetGR+52>
0x000003ffb7db9758 <+32>: add x0, x0, x1
0x000003ffb7db975c <+36>: ldrb w0, [x0,#856]
0x000003ffb7db9760 <+40>: cbz w0, 0x3ffb7db976c <_Unwind_GetGR+52>
0x000003ffb7db9764 <+44>: mov x0, x2
0x000003ffb7db9768 <+48>: ret
0x000003ffb7db976c <+52>: adrp x0, 0x3ffb7dcf000
0x000003ffb7db9770 <+56>: add x0, x0, #0x70
0x000003ffb7db9774 <+60>: ldrb w0, [x0,x1]
0x000003ffb7db9778 <+64>: cmp w0, #0x8
0x000003ffb7db977c <+68>: b.ne 0x3ffb7db9740 <_Unwind_GetGR+8>
=> 0x000003ffb7db9780 <+72>: ldr x0, [x2]
0x000003ffb7db9784 <+76>: b 0x3ffb7db9768 <_Unwind_GetGR+48>
End of assembler dump.
(gdb) quit
A debugging session is active.
Inferior 1 [process 13752] will be killed.
This got fixed when removing -fomit-frame-pointer from libgcc_s build.