FPU / SSE / AVXレジスタはコアダンプに保存されませんか?

FPU / SSE / AVXレジスタはコアダンプに保存されませんか?

x86-64アプリケーションのポストデバッグ中に奇妙な症状が発生しました。

(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>}

混乱して試してみました。

(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*

これは、コアダンプがFPUとSSE / AVXの状態を保存しないという意味だと思います。これは本当ですか?それともこれがGDBのバグですか?コアファイル自体にこれらのレジスタの値が含まれていることをどのように確認できますか?

GDBはですGNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-64.el7。 Kubuntu 14.04でも同じ実行ファイルとコアファイルがあり、ソースからコンパイルされたGDB 7.11も同様です。

ベストアンサー1

Linuxはクラッシュしたスレッドのためにこれらのレジスタを保存しないようです。頑張った

eu-readelf --notes myapp.core

PRSTATUS衝突に関連するさまざまな信号情報だけを報告するだけで、何も報告しませんFPREGSET。興味深いことに、他のスレッドはFPREGSETダンプに保存されているようです。したがって、ファイルにはこの情報がありません。

私が一つ見つけたLKMLメッセージ2014年に投稿しましたが返事がないようですね。私はこれが単にカーネルのバグであり、私のシステムではオプションまたは無効になっていないと思います。

おすすめ記事