Plug two holes where we returned to userland without restoring

the predicate registers. Even though the ITLB and DTLB interrupts
happen often enough, this bug didn't do much harm. The reason
is that the interrupt handlers only modify p1 and since this is
a preserved (callee-saved) register it is hardly used in code
generated by the compiler. Compilers use scratch registers by
default. Changing the interrupt handlers to use p6 (ie a scratch
register) proved that the bug was in fact fatal.
This commit is contained in:
marcel 2002-10-12 22:42:48 +00:00
parent f178c67fb0
commit f02cbfb108
2 changed files with 4 additions and 0 deletions

View File

@ -96,6 +96,7 @@ interruption_Instruction_TLB:
(p1) br.dpnt.few 1f
;;
ld8 r21=[r18] // read pte
mov pr=r17,0x1ffff
;;
itc.i r21 // insert pte
rfi // done
@ -172,6 +173,7 @@ interruption_Data_TLB:
(p1) br.dpnt.few 1f
;;
ld8 r21=[r18] // read pte
mov pr=r17,0x1ffff
;;
itc.d r21 // insert pte
rfi // done

View File

@ -96,6 +96,7 @@ interruption_Instruction_TLB:
(p1) br.dpnt.few 1f
;;
ld8 r21=[r18] // read pte
mov pr=r17,0x1ffff
;;
itc.i r21 // insert pte
rfi // done
@ -172,6 +173,7 @@ interruption_Data_TLB:
(p1) br.dpnt.few 1f
;;
ld8 r21=[r18] // read pte
mov pr=r17,0x1ffff
;;
itc.d r21 // insert pte
rfi // done