aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-02-07 07:36:02 -0500
committerDavid S. Miller <davem@davemloft.net>2008-02-07 07:36:02 -0500
commit5a4924d7be5df430132e109d3d2f26be610b4707 (patch)
treeaecba49d6f6d3f633ab14ecf8e08aa23b9393e35 /include
parent3389742f3c346d9ef5fb46e7baa04972bdd6d151 (diff)
[SPARC32]: Use regsets for ELF core dumping.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/asm-sparc/elf.h38
1 files changed, 8 insertions, 30 deletions
diff --git a/include/asm-sparc/elf.h b/include/asm-sparc/elf.h
index aaf6ef40ee2f..2f8ff3fa0957 100644
--- a/include/asm-sparc/elf.h
+++ b/include/asm-sparc/elf.h
@@ -65,8 +65,14 @@
65#define HWCAP_SPARC_V9 16 65#define HWCAP_SPARC_V9 16
66#define HWCAP_SPARC_ULTRA3 32 66#define HWCAP_SPARC_ULTRA3 32
67 67
68/* For the most part we present code dumps in the format 68#define CORE_DUMP_USE_REGSET
69 * Solaris does. 69
70/* Format is:
71 * G0 --> G7
72 * O0 --> O7
73 * L0 --> L7
74 * I0 --> I7
75 * PSR, PC, nPC, Y, WIM, TBR
70 */ 76 */
71typedef unsigned long elf_greg_t; 77typedef unsigned long elf_greg_t;
72#define ELF_NGREG 38 78#define ELF_NGREG 38
@@ -87,34 +93,6 @@ typedef struct {
87 93
88#ifdef __KERNEL__ 94#ifdef __KERNEL__
89#include <asm/mbus.h> 95#include <asm/mbus.h>
90#include <asm/uaccess.h>
91
92/* Format is:
93 * G0 --> G7
94 * O0 --> O7
95 * L0 --> L7
96 * I0 --> I7
97 * PSR, PC, nPC, Y, WIM, TBR
98 */
99#define ELF_CORE_COPY_REGS(__elf_regs, __pt_regs) \
100do { unsigned long *dest = &(__elf_regs[0]); \
101 struct pt_regs *src = (__pt_regs); \
102 unsigned long __user *sp; \
103 memcpy(&dest[0], &src->u_regs[0], \
104 sizeof(unsigned long) * 16); \
105 /* Don't try this at home kids... */ \
106 sp = (unsigned long __user *) src->u_regs[14]; \
107 copy_from_user(&dest[16], sp, \
108 sizeof(unsigned long) * 16); \
109 dest[32] = src->psr; \
110 dest[33] = src->pc; \
111 dest[34] = src->npc; \
112 dest[35] = src->y; \
113 dest[36] = dest[37] = 0; /* XXX */ \
114} while(0); /* Janitors: Don't touch this semicolon. */
115
116#define ELF_CORE_COPY_TASK_REGS(__tsk, __elf_regs) \
117 ({ ELF_CORE_COPY_REGS((*(__elf_regs)), (__tsk)->thread.kregs); 1; })
118 96
119/* 97/*
120 * This is used to ensure we don't load something for the wrong architecture. 98 * This is used to ensure we don't load something for the wrong architecture.