>> What might (should?) work in my particular case is, since I'm starting from
>> EL2:
>> 
>> - Modify SPSR_EL2, setting bit 4 = 1 and bits 3:0 to some valid aarch32 mode
>> (0x3 - svc mode)
>> - set ELR_EL2 to a memory location with valid ARM code
>> - "ERET"
> 
> OK it "somewhat" worked. I get to Aarch32 state, but not at the place where I 
> wanted to be but at 0x10, in ABT mode.

I think you also need to set/clear the HCR.RW (bit 31)  which controls the EL1 
state: 32 or 64bit

In summary:
        SCR_EL3.RW (bit 10) controls  EL2 - register width (32/64bit)
        HCR_EL2.RW (bit 31) controls EL1/EL0 register with (32/64bit)
                More interestingly - HCR is 64bits in 64bit state
                But - is two different 32bit registers in 32bit state
        I believe EL0 - 32/64bit is controlled via the “mode-field” in the PSW 
register (it’s been a while…)

        Also - the SPSR register mode must match the corresponding RW bit in 
the SCR or HCR register

My earlier point was this (and I want to say it again, because I think it every 
important)

There are so many differences between arm32 & aarch64 - yes there are a *FEW* 
things that are identical or could be reused

However - stepping back and looking at the big picture - interweaving those few 
things with “mode checks” will cause more problems and crazy code flow paths 
then they are worth. So much so that aarch64 - support in its entirety should 
be a standalone and not rely upon the “common arm” stuff.




------------------------------------------------------------------------------
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to