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 件のコメント:
コメントを投稿