On 2/14/08, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > Hello, > > recently I have updated my qemu from 0.9.0 to 0.9.1 and had problems > with the remote debugger memory access. Especially the command > > x /10i 0x4000 > > doesn't work, even if the PC is 0x4000. > > I have tracked down the problem till target-sparc/translate.c, where the > following calls are done: > > if (get_physical_address(env, &phys_addr, &prot, &access_index, addr, > 2, 0) != 0) > if (get_physical_address(env, &phys_addr, &prot, &access_index, > addr, 0, 0) != 0) > return -1; > > In 0.9.0 the last arg to get_physical_address was 'is_user', now it is > 'mmu_idx'. is_user > is now evaluated in target-sparc/helper.c:get_physical_adress by > > is_user = mmu_idx == MMU_USER_IDX; > > So if 'mmu_idx' ist still 0 (and MMU_USER_IDX is also 0) the resulting > 'is_user' is TRUE > and the later > > error_code = access_table[*access_index][access_perms]; > if (error_code && !((env->mmuregs[0] & MMU_NF) && is_user)) > return error_code; > > always fails with access_index 0/2 and access_perms 7. > > I have changed the last arg of get_physical_address to 1 and all works as > expected.
Thank you for the analysis! I'll commit the change.