-
- for(regi = 0; regi <= CXT_RA; regi++)
- supply_register (regi, (char *)(regp + regi));
-
- supply_register (PC_REGNUM, (char *)(regp + CXT_EPC));
- supply_register (HI_REGNUM, (char *)(regp + CXT_MDHI));
- supply_register (LO_REGNUM, (char *)(regp + CXT_MDLO));
- supply_register (CAUSE_REGNUM, (char *)(regp + CXT_CAUSE));
+ static char zerobuf[MAX_REGISTER_RAW_SIZE] =
+ {0};
+
+ for (regi = 0; regi <= CXT_RA; regi++)
+ supply_register (regi, (char *) (regp + regi));
+
+ supply_register (PC_REGNUM, (char *) (regp + CXT_EPC));
+ supply_register (HI_REGNUM, (char *) (regp + CXT_MDHI));
+ supply_register (LO_REGNUM, (char *) (regp + CXT_MDLO));
+ supply_register (CAUSE_REGNUM, (char *) (regp + CXT_CAUSE));
+
+ /* Fill inaccessible registers with zero. */
+ supply_register (PS_REGNUM, zerobuf);
+ supply_register (BADVADDR_REGNUM, zerobuf);
+ supply_register (FP_REGNUM, zerobuf);
+ supply_register (UNUSED_REGNUM, zerobuf);
+ for (regi = FIRST_EMBED_REGNUM; regi <= LAST_EMBED_REGNUM; regi++)
+ supply_register (regi, zerobuf);