Durante a depuração pós-morte do meu aplicativo x86-64, me deparei com um sintoma estranho:
(gdb) p/x $xmm1
$8 = {v4_float = {<unavailable>, <unavailable>, <unavailable>, <unavailable>}, v2_double = {<unavailable>, <unavailable>}, v16_int8 = {<unavailable> <repeats 16 times>}, v8_int16 = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, v4_int32 = {<unavailable>, <unavailable>, <unavailable>, <unavailable>}, v2_int64 = {<unavailable>, <unavailable>},
uint128 = <unavailable>}
Intrigado, tentei
(gdb) info all-registers
rax 0x7f4fb3286020 139980284911648
rbx 0x7fff90cbf720 140735622674208
rcx 0xffff0 1048560
rdx 0xffef0 1048304
rsi 0xfbeea0 16510624
rdi 0x7f4fb3386010 139980285960208
rbp 0x7fff90cbf6f0 0x7fff90cbf6f0
rsp 0x7fff90cad5e8 0x7fff90cad5e8
r8 0x7f4fb3386004 139980285960196
r9 0x4 4
r10 0x3 3
r11 0x246 582
r12 0xd466f0 13919984
r13 0xffff4 1048564
r14 0x7fff90cad620 140735622600224
r15 0x7fff90cad610 140735622600208
rip 0x7f4fc1c01728 0x7f4fc1c01728 <__memcpy_ssse3_back+7016>
eflags 0x10206 [ PF IF RF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
st0 *value not available*
st1 *value not available*
st2 *value not available*
st3 *value not available*
st4 *value not available*
st5 *value not available*
st6 *value not available*
st7 *value not available*
fctrl *value not available*
fstat *value not available*
ftag *value not available*
fiseg *value not available*
fioff *value not available*
foseg *value not available*
---Type <return> to continue, or q <return> to quit---
fooff *value not available*
fop *value not available*
mxcsr *value not available*
ymm0 *value not available*
ymm1 *value not available*
ymm2 *value not available*
ymm3 *value not available*
ymm4 *value not available*
ymm5 *value not available*
ymm6 *value not available*
ymm7 *value not available*
ymm8 *value not available*
ymm9 *value not available*
ymm10 *value not available*
ymm11 *value not available*
ymm12 *value not available*
ymm13 *value not available*
ymm14 *value not available*
ymm15 *value not available*
Acredito que os core dumps não salvam o estado FPU e SSE / AVX. É verdade? Ou poderia ser um bug no GDB? Como posso verificar se o arquivo principal em si contém os valores para esses registros?
O GDB é GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-64.el7
. A mesma coisa aparece no Kubuntu 14.04 com o mesmo executável e seu arquivo principal com o GDB 7.11 compilado a partir de fontes.