On Tue, Jun 16, 2015 at 4:33 AM, Peter Maydell <peter.mayd...@linaro.org> wrote: > On 16 June 2015 at 06:46, Peter Crosthwaite <crosthwaitepe...@gmail.com> > wrote: >> Use cpu_set_pc for setting program counters when bootloading. This >> removes an instance of system level code having to reach into the CPU >> env. >> >> Signed-off-by: Peter Crosthwaite <crosthwaite.pe...@gmail.com> >> --- >> hw/microblaze/boot.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/hw/microblaze/boot.c b/hw/microblaze/boot.c >> index 4c44317..ec68479 100644 >> --- a/hw/microblaze/boot.c >> +++ b/hw/microblaze/boot.c >> @@ -54,7 +54,7 @@ static void main_cpu_reset(void *opaque) >> env->regs[5] = boot_info.cmdline; >> env->regs[6] = boot_info.initrd_start; >> env->regs[7] = boot_info.fdt; >> - env->sregs[SR_PC] = boot_info.bootstrap_pc; >> + cpu_set_pc(CPU(cpu), boot_info.bootstrap_pc, &error_abort); > > Well, it sort of removes an instance of reaching into the CPU > env, but there's all those other ones in plain sight just above. > Is there much point in setting SR_PC indirectly if we don't > have a mechanism for setting the other regs indirectly? >
Yes. Needs more patches :). I'm starting with the easy stuff, and I am actually more interested in getting rid of the SR_PC macro usage at this stage. ARMs solution to this is the machine code bootloader. That would be one way. But what I want to propose was that we add a virtual method to CPUs that sets these offsets that bootloaders can call. This brings us closer to one bootloader that can do it all. Regards, Peter > -- PMM >