I'm looking at fixing an issue parts that have multiple exception levels (e300, 40x, booke).

One of the issues is the transfer_to_handler patch in entry_32.S doesn't use the proper save/restore registers to transfer to C code.

The following bit of code is what I'm having issues with:

        .globl transfer_to_handler_cont
transfer_to_handler_cont:
3:
        mflr    r9
lwz r11,0(r9) /* virtual address of handler */
        lwz     r9,4(r9)                /* where to go when done */
        mtspr   SPRN_SRR0,r11
        mtspr   SPRN_SRR1,r10
        mtlr    r9
        SYNC
RFI /* jump to handler, enable MMU */

A few possibilities:
* introduce an additional function pointer as part of EXC_XFER_TEMPLATE() to specifies the type of handler (normal, crit, dbg, mcheck) * use the traps field low order bits to determine normal, crit, dbg, mcheck at run time.
* duplicate the code paths for each exception level

suggestions?

- k
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to