2009年1月23日金曜日

disas_arm_insn

target-arm/translate.c の
static void disas_arm_insn(CPUState * env, DisasContext *s)
{
    unsigned int cond, insn, val, op1, i, shift, rm, rs, rn, rd, sh;

    insn = ldl_code(s->pc);
ここで s->pc は、ロードされたターゲットのマシン語の pc だ。

cpu-all.h を見ると。
#define ldl_code(p) ldl_raw(p)
#define ldl_raw(p) ldl_p(laddr((p)))
#define laddr(x) (uint8_t *)(long)(x)
#define ldl_p(p) ldl_le_p(p)  /* !defined(TARGET_WORDS_BIGENDIAN)  */
static inline int ldl_le_p(void *ptr)
{
    return *(uint32_t *)ptr;
}
う~ん、なぜこれで命令が取ってこれるのかよくわからない。
メモリのどこに、ターゲットの命令はロードされてるんだ ?
たぶん phys_ram_base とかだと思っていたんだけど、違うのかな ?

追記

これは CONFIG_USER_ONLY 版のコードなので、全く関係無かった。

しかし、どこに定義があるんだ… grep した限りでは見つけられなかった。

0 件のコメント:

コメントを投稿