Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3389742f authored by David S. Miller's avatar David S. Miller
Browse files

[SPARC64]: Use regsets for ELF core dumping.

parent e72d71c4
Loading
Loading
Loading
Loading
+4 −27
Original line number Original line Diff line number Diff line
/*
/*
 * binfmt_elf32.c: Support 32-bit Sparc ELF binaries on Ultra.
 * binfmt_elf32.c: Support 32-bit Sparc ELF binaries on Ultra.
 *
 *
 * Copyright (C) 1995, 1996, 1997, 1998 David S. Miller	(davem@davemloft.net)
 * Copyright (C) 1995, 1996, 1997, 1998, 2008 David S. Miller (davem@davemloft.net)
 * Copyright (C) 1995, 1996, 1997, 1998 Jakub Jelinek	(jj@ultra.linux.cz)
 * Copyright (C) 1995, 1996, 1997, 1998 Jakub Jelinek	(jj@ultra.linux.cz)
 */
 */


@@ -9,13 +9,6 @@
#define ELF_CLASS		ELFCLASS32
#define ELF_CLASS		ELFCLASS32
#define ELF_DATA		ELFDATA2MSB;
#define ELF_DATA		ELFDATA2MSB;


/* For the most part we present code dumps in the format
 * Solaris does.
 */
typedef unsigned int elf_greg_t;
#define ELF_NGREG 38
typedef elf_greg_t elf_gregset_t[ELF_NGREG];

/* Format is:
/* Format is:
 * 	G0 --> G7
 * 	G0 --> G7
 *	O0 --> O7
 *	O0 --> O7
@@ -23,25 +16,9 @@ typedef elf_greg_t elf_gregset_t[ELF_NGREG];
 *	I0 --> I7
 *	I0 --> I7
 *	PSR, PC, nPC, Y, WIM, TBR
 *	PSR, PC, nPC, Y, WIM, TBR
 */
 */
#include <asm/psrcompat.h>
typedef unsigned int elf_greg_t;
#define ELF_CORE_COPY_REGS(__elf_regs, __pt_regs)	\
#define ELF_NGREG 38
do {	unsigned int *dest = &(__elf_regs[0]);		\
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
	struct pt_regs *src = (__pt_regs);		\
	unsigned int __user *sp;			\
	int i;						\
	for(i = 0; i < 16; i++)				\
		dest[i] = (unsigned int) src->u_regs[i];\
	/* Don't try this at home kids... */		\
	sp = (unsigned int __user *) (src->u_regs[14] &	\
		0x00000000fffffffc);			\
	for(i = 0; i < 16; i++)				\
		__get_user(dest[i+16], &sp[i]);		\
	dest[32] = tstate_to_psr(src->tstate);		\
	dest[33] = (unsigned int) src->tpc;		\
	dest[34] = (unsigned int) src->tnpc;		\
	dest[35] = src->y;				\
	dest[36] = dest[37] = 0; /* XXX */		\
} while(0);


typedef struct {
typedef struct {
	union {
	union {
+5 −25
Original line number Original line Diff line number Diff line
@@ -72,6 +72,8 @@
#define HWCAP_SPARC_BLKINIT	64
#define HWCAP_SPARC_BLKINIT	64
#define HWCAP_SPARC_N2		128
#define HWCAP_SPARC_N2		128


#define CORE_DUMP_USE_REGSET

/*
/*
 * These are used to set parameters in the core dumps.
 * These are used to set parameters in the core dumps.
 */
 */
@@ -80,10 +82,6 @@
#define ELF_CLASS		ELFCLASS64
#define ELF_CLASS		ELFCLASS64
#define ELF_DATA		ELFDATA2MSB
#define ELF_DATA		ELFDATA2MSB


typedef unsigned long elf_greg_t;

#define ELF_NGREG 36
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
/* Format of 64-bit elf_gregset_t is:
/* Format of 64-bit elf_gregset_t is:
 * 	G0 --> G7
 * 	G0 --> G7
 * 	O0 --> O7
 * 	O0 --> O7
@@ -94,24 +92,9 @@ typedef elf_greg_t elf_gregset_t[ELF_NGREG];
 *	TNPC
 *	TNPC
 *	Y
 *	Y
 */
 */
#define ELF_CORE_COPY_REGS(__elf_regs, __pt_regs)	\
typedef unsigned long elf_greg_t;
do {	unsigned long *dest = &(__elf_regs[0]);		\
#define ELF_NGREG 36
	struct pt_regs *src = (__pt_regs);		\
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
	unsigned long __user *sp;			\
	int i;						\
	for(i = 0; i < 16; i++)				\
		dest[i] = src->u_regs[i];		\
	/* Don't try this at home kids... */		\
	sp = (unsigned long __user *)			\
	 ((src->u_regs[14] + STACK_BIAS)		\
	  & 0xfffffffffffffff8UL);			\
	for(i = 0; i < 16; i++)				\
		__get_user(dest[i+16], &sp[i]);		\
	dest[32] = src->tstate;				\
	dest[33] = src->tpc;				\
	dest[34] = src->tnpc;				\
	dest[35] = src->y;				\
} while (0);


typedef struct {
typedef struct {
	unsigned long	pr_regs[32];
	unsigned long	pr_regs[32];
@@ -121,9 +104,6 @@ typedef struct {
} elf_fpregset_t;
} elf_fpregset_t;
#endif
#endif


#define ELF_CORE_COPY_TASK_REGS(__tsk, __elf_regs)	\
	({ ELF_CORE_COPY_REGS((*(__elf_regs)), task_pt_regs(__tsk)); 1; })

/*
/*
 * This is used to ensure we don't load something for the wrong architecture.
 * This is used to ensure we don't load something for the wrong architecture.
 */
 */