2011-12-24 35 views
3

gdbからARMのコプロセッサレジスタ(特にCP15 sctlr)をダンプする方法はありますか?私はcode-sourcery(arm-none-linux-gnueabi-)のtoolchainとQEMU上で動作するlinuxをデバッグしています。gdbを使用してARMコプロセッサレジスタをダンプする方法は?

mcr/mrc命令の前後に使用されているGPRをダンプすることもできます。別の方法がありますか?

答えて

2

私の知る限りでは、GDB/ARMは、この情報を表示することができません...しかし、qemuをデバッグすることは(あなたがそのデバッグ情報付き/デバッグQEMUをコンパイルできると仮定して)あなたを助けるかもしれない:

    qemu/target-arm/cpu.h
  1. env->cp15gdbserver_state->g_cpu->cp15 *のようなものを点検:

  2. は、このファイルを見てみましょうあなたのqemuプロセス
  3. にGDB(i686の一定ではなく、ARM)を取り付け
    struct { 
    uint32_t c0_cachetype; 
    uint32_t c0_ccsid[16]; /* Cache size. */ 
    uint32_t c0_clid; /* Cache level. */ 
    uint32_t c0_cssel; /* Cache size selection. */ 
    uint32_t c0_c1[8]; /* Feature registers. */ 
    uint32_t c0_c2[8]; /* Instruction set registers. */ 
    uint32_t c1_sys; /* System control register. */ 
    uint32_t c1_coproc; /* Coprocessor access register. */ 
    uint32_t c1_xscaleauxcr; /* XScale auxiliary control register. */ 
    uint32_t c2_base0; /* MMU translation table base 0. */ 
    uint32_t c2_base1; /* MMU translation table base 1. */ 
    uint32_t c2_control; /* MMU translation table base control. */ 
    uint32_t c2_mask; /* MMU translation table base selection mask. */ 
    uint32_t c2_base_mask; /* MMU translation table base 0 mask. */ 
    uint32_t c2_data; /* MPU data cachable bits. */ 
    uint32_t c2_insn; /* MPU instruction cachable bits. */ 
    uint32_t c3; /* MMU domain access control register 
           MPU write buffer control. */ 
    uint32_t c5_insn; /* Fault status registers. */ 
    uint32_t c5_data; 
    uint32_t c6_region[8]; /* MPU base/size registers. */ 
    uint32_t c6_insn; /* Fault address registers. */ 
    uint32_t c6_data; 
    uint32_t c9_insn; /* Cache lockdown registers. */ 
    uint32_t c9_data; 
    uint32_t c13_fcse; /* FCSE PID. */ 
    uint32_t c13_context; /* Context ID. */ 
    uint32_t c13_tls1; /* User RW Thread register. */ 
    uint32_t c13_tls2; /* User RO Thread register. */ 
    uint32_t c13_tls3; /* Privileged Thread register. */ 
    uint32_t c15_cpar; /* XScale Coprocessor Access Register */ 
    uint32_t c15_ticonfig; /* TI925T configuration byte. */ 
    uint32_t c15_i_max; /* Maximum D-cache dirty line index. */ 
    uint32_t c15_i_min; /* Minimum D-cache dirty line index. */ 
    uint32_t c15_threadid; /* TI debugger thread-ID. */ 
    } cp15; 
    

*私は、qemu/gdbstub.cをもとにちょうどいくつかの推測の正確な場所がわからないんだけど、私は実際にそれをテストすることはできませんよ。

関連する問題