Eventually, it would be nice if the ECOFF core-dump had to do the
translation, then ELF_CORE_COPY_REGS() would become trivial and
faster. */
-#define ELF_CORE_COPY_REGS(_dest,_regs) \
-{ \
- struct user _dump; \
- \
- dump_thread(_regs, &_dump); \
- _dest[ 0] = _dump.regs[EF_V0]; \
- _dest[ 1] = _dump.regs[EF_T0]; \
- _dest[ 2] = _dump.regs[EF_T1]; \
- _dest[ 3] = _dump.regs[EF_T2]; \
- _dest[ 4] = _dump.regs[EF_T3]; \
- _dest[ 5] = _dump.regs[EF_T4]; \
- _dest[ 6] = _dump.regs[EF_T5]; \
- _dest[ 7] = _dump.regs[EF_T6]; \
- _dest[ 8] = _dump.regs[EF_T7]; \
- _dest[ 9] = _dump.regs[EF_S0]; \
- _dest[10] = _dump.regs[EF_S1]; \
- _dest[11] = _dump.regs[EF_S2]; \
- _dest[12] = _dump.regs[EF_S3]; \
- _dest[13] = _dump.regs[EF_S4]; \
- _dest[14] = _dump.regs[EF_S5]; \
- _dest[15] = _dump.regs[EF_S6]; \
- _dest[16] = _dump.regs[EF_A0]; \
- _dest[17] = _dump.regs[EF_A1]; \
- _dest[18] = _dump.regs[EF_A2]; \
- _dest[19] = _dump.regs[EF_A3]; \
- _dest[20] = _dump.regs[EF_A4]; \
- _dest[21] = _dump.regs[EF_A5]; \
- _dest[22] = _dump.regs[EF_T8]; \
- _dest[23] = _dump.regs[EF_T9]; \
- _dest[24] = _dump.regs[EF_T10]; \
- _dest[25] = _dump.regs[EF_T11]; \
- _dest[26] = _dump.regs[EF_RA]; \
- _dest[27] = _dump.regs[EF_T12]; \
- _dest[28] = _dump.regs[EF_AT]; \
- _dest[29] = _dump.regs[EF_GP]; \
- _dest[30] = _dump.regs[EF_SP]; \
- _dest[31] = _dump.regs[EF_PC]; /* store PC here */ \
- _dest[32] = _dump.regs[EF_PS]; \
+
+#define ELF_CORE_COPY_REGS(_dest,_regs) \
+{ \
+ extern void dump_thread(struct pt_regs *, struct user *); \
+ struct user _dump; \
+ \
+ dump_thread(_regs, &_dump); \
+ _dest[ 0] = _dump.regs[EF_V0]; \
+ _dest[ 1] = _dump.regs[EF_T0]; \
+ _dest[ 2] = _dump.regs[EF_T1]; \
+ _dest[ 3] = _dump.regs[EF_T2]; \
+ _dest[ 4] = _dump.regs[EF_T3]; \
+ _dest[ 5] = _dump.regs[EF_T4]; \
+ _dest[ 6] = _dump.regs[EF_T5]; \
+ _dest[ 7] = _dump.regs[EF_T6]; \
+ _dest[ 8] = _dump.regs[EF_T7]; \
+ _dest[ 9] = _dump.regs[EF_S0]; \
+ _dest[10] = _dump.regs[EF_S1]; \
+ _dest[11] = _dump.regs[EF_S2]; \
+ _dest[12] = _dump.regs[EF_S3]; \
+ _dest[13] = _dump.regs[EF_S4]; \
+ _dest[14] = _dump.regs[EF_S5]; \
+ _dest[15] = _dump.regs[EF_S6]; \
+ _dest[16] = _dump.regs[EF_A0]; \
+ _dest[17] = _dump.regs[EF_A1]; \
+ _dest[18] = _dump.regs[EF_A2]; \
+ _dest[19] = _dump.regs[EF_A3]; \
+ _dest[20] = _dump.regs[EF_A4]; \
+ _dest[21] = _dump.regs[EF_A5]; \
+ _dest[22] = _dump.regs[EF_T8]; \
+ _dest[23] = _dump.regs[EF_T9]; \
+ _dest[24] = _dump.regs[EF_T10]; \
+ _dest[25] = _dump.regs[EF_T11]; \
+ _dest[26] = _dump.regs[EF_RA]; \
+ _dest[27] = _dump.regs[EF_T12]; \
+ _dest[28] = _dump.regs[EF_AT]; \
+ _dest[29] = _dump.regs[EF_GP]; \
+ _dest[30] = _dump.regs[EF_SP]; \
+ _dest[31] = _dump.regs[EF_PC]; /* store PC here */ \
+ _dest[32] = _dump.regs[EF_PS]; \
}
/* This yields a mask that user programs can use to figure out what