私がこれらの機能を持っているとしましょう
void foo(int a, int b, int c);
void bar(int d);
void start();
そして、私はこのようなコアダンプを取得します
foo(<value of a>, <value of b>, <value of c>, <three garbage values>)
bar(<value of d>, <five garbage values>)
start(<six garbage values>)
.... [other functions]
それで、fooと呼ばれるbarと呼ばれるものを開始し、fooでクラッシュしました。問題は、スタック内のこれらの値が、各関数が呼び出されたときの%o1、..、%o5レジスタの値をトレースしているのか、それともその時点での%i0、..、%i5レジスタの値であるのかということです。クラッシュの原因(関数がこれらの入力レジスタの1つを変更した場合、スタックトレースの値が異なることを意味します)?
私が尋ねる理由は、それが出力レジスタの値だと思ったのですが、顧客が最近ハードウェアをアップグレードし、スタックトレースの引数の1つに誤りがあるように見えるコアダンプを持っているためです。呼び出し元の逆アセンブリは正しく見えます。その特定の引数を設定するために使用されたレジスターでさえ、通常の型の不一致、符号付き/符号なしなどをチェックしました。