[parisc-linux] 720 - some progress
Jurij Smakov
jurij@lokmail.net
Thu, 27 Sep 2001 10:42:25 -0400
Hi!
I hope I've got it right. It only emulates MFCTL and only when the
source control register is 27. It turns out, that pt_regs does not
have a member for cr26 and adding one does not look like an easy
task.
Jurij.
--- linux-2.4.9-pa24/arch/parisc/kernel/traps.c Wed Sep 19 12:02:30 2001
+++ linux/arch/parisc/kernel/traps.c Thu Sep 27 16:16:54 2001
@@ -273,6 +273,7 @@
{
unsigned long fault_address = 0;
unsigned long fault_space = 0;
+ int fromcr,togr;
struct siginfo si;
#ifdef CONFIG_KWDB
struct save_state ssp;
@@ -363,6 +364,17 @@
si.si_code = ILL_PRVOPC;
goto give_sigill;
case 11:
+ if(!(regs->iir & 0xfc000000) && (((regs->iir & 0x1fe0)>>5) == 0x45)) {
+ /* This is MFCTL instruction */
+ fromcr = (regs->iir & 0x03e00000)>>21;
+ togr = (regs->iir & 0x1f);
+ /* Emulate the instruction if the read is from cr27 */
+ if(fromcr == 27) {
+ regs->gr[togr] = regs->cr27;
+ return;
+ }
+ }
+ /* Something else is wrong */
die_if_kernel("Privileged register - shouldn't happen!", regs, code);
si.si_code = ILL_PRVREG;
give_sigill: