Below is a patch the redefines the macro used for clearing general purpose
registers from l.or to l.movhi.  Using l.or relies on other possible
uninitialized registers while l.movhi just relies on a 0 immediate value.
 This is important in RTL simulations and environments where the memory
used for the reg file is NOT guaranteed to be reset to zero.  I have also
added a line which resets r0 since before its first use since it is
possible that r0 may not contain the value 0, but software expects it to be
0.

diff --git a/arch/openrisc/kernel/head.S b/arch/openrisc/kernel/head.S
index 1088b5f..1fa6b1d 100644
--- a/arch/openrisc/kernel/head.S
+++ b/arch/openrisc/kernel/head.S
@@ -33,7 +33,7 @@
  l.add rd,rd,rs

 #define CLEAR_GPR(gpr) \
- l.or    gpr,r0,r0
+ l.movhi    gpr,0

 #define LOAD_SYMBOL_2_GPR(gpr,symbol) \
  l.movhi gpr,hi(symbol) ;\
@@ -441,6 +441,9 @@ _dispatch_do_ipage_fault:
  __HEAD
  .global _start
 _start:
+    /* Ensure that r0 really is 0 */
+    CLEAR_GPR(r0)
+
  /* save kernel parameters */
  l.or r25,r0,r3 /* pointer to fdt */




---Matthew Hicks
_______________________________________________
OpenRISC mailing list
[email protected]
http://lists.openrisc.net/listinfo/openrisc

Reply via email to