Commit 92d5dd8c authored by Chung-Ling Tang's avatar Chung-Ling Tang Committed by Ley Foon Tan

nios2: update pt_regs

Remove struct pt_regs from user header and use generic ucontext.h.
Signed-off-by: default avatarChung-Ling Tang <cltang@codesourcery.com>
Acked-by: default avatarLey Foon Tan <lftan@altera.com>
parent 9eccca08
...@@ -15,7 +15,54 @@ ...@@ -15,7 +15,54 @@
#include <uapi/asm/ptrace.h> #include <uapi/asm/ptrace.h>
/* This struct defines the way the registers are stored on the
stack during a system call. */
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
struct pt_regs {
unsigned long r8; /* r8-r15 Caller-saved GP registers */
unsigned long r9;
unsigned long r10;
unsigned long r11;
unsigned long r12;
unsigned long r13;
unsigned long r14;
unsigned long r15;
unsigned long r1; /* Assembler temporary */
unsigned long r2; /* Retval LS 32bits */
unsigned long r3; /* Retval MS 32bits */
unsigned long r4; /* r4-r7 Register arguments */
unsigned long r5;
unsigned long r6;
unsigned long r7;
unsigned long orig_r2; /* Copy of r2 ?? */
unsigned long ra; /* Return address */
unsigned long fp; /* Frame pointer */
unsigned long sp; /* Stack pointer */
unsigned long gp; /* Global pointer */
unsigned long estatus;
unsigned long ea; /* Exception return address (pc) */
unsigned long orig_r7;
};
/*
* This is the extended stack used by signal handlers and the context
* switcher: it's pushed after the normal "struct pt_regs".
*/
struct switch_stack {
unsigned long r16; /* r16-r23 Callee-saved GP registers */
unsigned long r17;
unsigned long r18;
unsigned long r19;
unsigned long r20;
unsigned long r21;
unsigned long r22;
unsigned long r23;
unsigned long fp;
unsigned long gp;
unsigned long ra;
};
#define user_mode(regs) (((regs)->estatus & ESTATUS_EU)) #define user_mode(regs) (((regs)->estatus & ESTATUS_EU))
#define instruction_pointer(regs) ((regs)->ra) #define instruction_pointer(regs) ((regs)->ra)
......
/*
* Copyright (C) 2010 Tobias Klauser <tklauser@distanz.ch>
* Copyright (C) 2004 Microtronix Datacom Ltd
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*/
#ifndef _ASM_NIOS2_UCONTEXT_H
#define _ASM_NIOS2_UCONTEXT_H
typedef int greg_t;
#define NGREG 32
typedef greg_t gregset_t[NGREG];
struct mcontext {
int version;
gregset_t gregs;
};
#define MCONTEXT_VERSION 2
struct ucontext {
unsigned long uc_flags;
struct ucontext *uc_link;
stack_t uc_stack;
struct mcontext uc_mcontext;
sigset_t uc_sigmask; /* mask last for extensibility */
};
#endif
...@@ -2,3 +2,5 @@ include include/uapi/asm-generic/Kbuild.asm ...@@ -2,3 +2,5 @@ include include/uapi/asm-generic/Kbuild.asm
header-y += elf.h header-y += elf.h
header-y += ucontext.h header-y += ucontext.h
generic-y += ucontext.h
...@@ -50,9 +50,7 @@ ...@@ -50,9 +50,7 @@
typedef unsigned long elf_greg_t; typedef unsigned long elf_greg_t;
#define ELF_NGREG \ #define ELF_NGREG 49
((sizeof(struct pt_regs) + sizeof(struct switch_stack)) / \
sizeof(elf_greg_t))
typedef elf_greg_t elf_gregset_t[ELF_NGREG]; typedef elf_greg_t elf_gregset_t[ELF_NGREG];
typedef unsigned long elf_fpregset_t; typedef unsigned long elf_fpregset_t;
......
...@@ -67,53 +67,9 @@ ...@@ -67,53 +67,9 @@
#define NUM_PTRACE_REG (PTR_TLBMISC + 1) #define NUM_PTRACE_REG (PTR_TLBMISC + 1)
/* this struct defines the way the registers are stored on the /* User structures for general purpose registers. */
stack during a system call. struct user_pt_regs {
__u32 regs[49];
There is a fake_regs in setup.c that has to match pt_regs.*/
struct pt_regs {
unsigned long r8; /* r8-r15 Caller-saved GP registers */
unsigned long r9;
unsigned long r10;
unsigned long r11;
unsigned long r12;
unsigned long r13;
unsigned long r14;
unsigned long r15;
unsigned long r1; /* Assembler temporary */
unsigned long r2; /* Retval LS 32bits */
unsigned long r3; /* Retval MS 32bits */
unsigned long r4; /* r4-r7 Register arguments */
unsigned long r5;
unsigned long r6;
unsigned long r7;
unsigned long orig_r2; /* Copy of r2 ?? */
unsigned long ra; /* Return address */
unsigned long fp; /* Frame pointer */
unsigned long sp; /* Stack pointer */
unsigned long gp; /* Global pointer */
unsigned long estatus;
unsigned long ea; /* Exception return address (pc) */
unsigned long orig_r7;
};
/*
* This is the extended stack used by signal handlers and the context
* switcher: it's pushed after the normal "struct pt_regs".
*/
struct switch_stack {
unsigned long r16; /* r16-r23 Callee-saved GP registers */
unsigned long r17;
unsigned long r18;
unsigned long r19;
unsigned long r20;
unsigned long r21;
unsigned long r22;
unsigned long r23;
unsigned long fp;
unsigned long gp;
unsigned long ra;
}; };
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
......
...@@ -15,14 +15,16 @@ ...@@ -15,14 +15,16 @@
* details. * details.
*/ */
#ifndef _ASM_NIOS2_SIGCONTEXT_H #ifndef _UAPI__ASM_SIGCONTEXT_H
#define _ASM_NIOS2_SIGCONTEXT_H #define _UAPI__ASM_SIGCONTEXT_H
#include <asm/ptrace.h> #include <linux/types.h>
#define MCONTEXT_VERSION 2
struct sigcontext { struct sigcontext {
struct pt_regs regs; int version;
unsigned long sc_mask; /* old sigmask */ unsigned long gregs[32];
}; };
#endif #endif
...@@ -39,7 +39,7 @@ static inline int rt_restore_ucontext(struct pt_regs *regs, ...@@ -39,7 +39,7 @@ static inline int rt_restore_ucontext(struct pt_regs *regs,
struct ucontext *uc, int *pr2) struct ucontext *uc, int *pr2)
{ {
int temp; int temp;
greg_t *gregs = uc->uc_mcontext.gregs; unsigned long *gregs = uc->uc_mcontext.gregs;
int err; int err;
/* Always make any pending restarted system calls return -EINTR */ /* Always make any pending restarted system calls return -EINTR */
...@@ -127,7 +127,7 @@ asmlinkage int do_rt_sigreturn(struct switch_stack *sw) ...@@ -127,7 +127,7 @@ asmlinkage int do_rt_sigreturn(struct switch_stack *sw)
static inline int rt_setup_ucontext(struct ucontext *uc, struct pt_regs *regs) static inline int rt_setup_ucontext(struct ucontext *uc, struct pt_regs *regs)
{ {
struct switch_stack *sw = (struct switch_stack *)regs - 1; struct switch_stack *sw = (struct switch_stack *)regs - 1;
greg_t *gregs = uc->uc_mcontext.gregs; unsigned long *gregs = uc->uc_mcontext.gregs;
int err = 0; int err = 0;
err |= __put_user(MCONTEXT_VERSION, &uc->uc_mcontext.version); err |= __put_user(MCONTEXT_VERSION, &uc->uc_mcontext.version);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment