svn commit: r249523 - head/sys/mips/include
Warner Losh
imp at FreeBSD.org
Mon Apr 15 19:32:15 UTC 2013
Author: imp
Date: Mon Apr 15 19:32:14 2013
New Revision: 249523
URL: http://svnweb.freebsd.org/changeset/base/249523
Log:
Fix N32/N64 register saving by ensuring that all registers resolve
to unique values.
There's some confusion about what the n32 assembler API really is
(since on page 9 of the spec they say that t0-t3 don't exist, then
turn around on page 22 and say that t4-t7 don't exist), and this
doesn't touch that.
NetBSD's version of this file follows the convention I used here, and
is likely to be correct.
This should fix gdb/ptrace.
Modified:
head/sys/mips/include/regnum.h
Modified: head/sys/mips/include/regnum.h
==============================================================================
--- head/sys/mips/include/regnum.h Mon Apr 15 18:56:03 2013 (r249522)
+++ head/sys/mips/include/regnum.h Mon Apr 15 19:32:14 2013 (r249523)
@@ -42,9 +42,8 @@
#ifndef _MACHINE_REGNUM_H_
#define _MACHINE_REGNUM_H_
-/* This must match the numbers
- * in pcb.h and is used by
- * swtch.S
+/*
+ * This must match the numbers in pcb.h and is used by swtch.S
*/
#define PREG_S0 0
#define PREG_S1 1
@@ -64,6 +63,7 @@
/*
* Location of the saved registers relative to ZERO.
* This must match struct trapframe defined in frame.h exactly.
+ * This must also match regdef.h.
*/
#define ZERO 0
#define AST 1
@@ -73,6 +73,16 @@
#define A1 5
#define A2 6
#define A3 7
+#if defined(__mips_n32) || defined(__mips_n64)
+#define A4 8
+#define A5 9
+#define A6 10
+#define A7 11
+#define T0 12
+#define T1 13
+#define T2 14
+#define T3 15
+#else
#define T0 8
#define T1 9
#define T2 10
@@ -81,6 +91,7 @@
#define TA1 13
#define TA2 14
#define TA3 15
+#endif
#define S0 16
#define S1 17
#define S2 18
@@ -113,6 +124,23 @@
#define NUMSAVEREGS 40
/*
+ * Pseudo registers so we save a complete set of registers regardless of
+ * the ABI
+ */
+#if defined(__mips_n32) || defined(__mips_n64)
+#define TA0 8
+#define TA1 9
+#define TA2 10
+#define TA3 11
+#else
+#define TA0 12
+#define TA1 13
+#define TA2 14
+#define TA3 15
+#endif
+
+
+/*
* Index of FP registers in 'struct frame', counting from the beginning
* of the frame (i.e., including the general registers).
*/
More information about the svn-src-head
mailing list