For your general amusement, here's the current work-in-progress: https://github.com/sysgo-maw/openocd-aarch64
On Wednesday 14 September 2016 21:09:31 Matthias Welwarsky wrote: > On Wednesday 14 September 2016 08:12:01 Duane Ellis wrote: > > >> 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 > > It works now, the problem was that I didn't set up SPSR_EL2 correctly for > returning to 32bit state: the T bit was set and so the PE was in Thumb state > and went into an "Undefined instruction" exception, and then into an ABT > exception when the exception vector contained only garbage. > > I think that the rest of the system was already configured for 32bit mode in > EL1, didn't have to make any other changes. > > > 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. > > Yes, SPSR[4] says if it's 32 bit or 64bit state. > > > 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. > > The Aarch32 PE state is quite different from Aarch64, of course. But the > debug implementation not so much and many of the relevant system registers > are mapped between their respective counterparts (e.g. CLIDR, CSSELR, ...). > I don't yet see that a completely separate code module for aarch32 is > required. > > BR, > Matthias ------------------------------------------------------------------------------ _______________________________________________ OpenOCD-devel mailing list OpenOCD-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openocd-devel