割り込みによるバグ

プログラムがある処理にさしかかると突然、意図しないアドレスの命令を実行しだすという不具合の原因解明に今日一日燃え尽きました。原因は、割り込み処理の中で汎用レジスタの値が書き換えられ、割り込みから復帰した後に、その汎用レジスタを利用して関数をcallするところで、プログラムの制御があらぬ方向へすっ飛ぶというものでした。関数へのポインタを利用した関数callの直前に割り込みが入ることにより、初めて顕在化したバグでした。
つーか、割り込み処理の中でレジスタを破壊すんなって話ですよねwwwサーセンwww まぁこの割り込み処理は前のタイプからの流用だからまさか問題があるとは思わなかったわけでして。でもバグの原因解明とか修正とかって終わってみると結構楽しかった、という感じがありますよね。まあその問題の真っ只中は頭が痛いほど悩ましいですが。