Linux Audio

Check our new training course

Loading...
v3.1
 
  1/*
  2 * OpenRISC Linux
  3 *
  4 * Linux architectural port borrowing liberally from similar works of
  5 * others.  All original copyrights apply as per the original source
  6 * declaration.
  7 *
  8 * OpenRISC implementation:
  9 * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
 10 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
 11 * et al.
 12 *
 13 * This program is free software; you can redistribute it and/or modify
 14 * it under the terms of the GNU General Public License as published by
 15 * the Free Software Foundation; either version 2 of the License, or
 16 * (at your option) any later version.
 17 */
 18
 19#ifndef __ASM_OPENRISC_PTRACE_H
 20#define __ASM_OPENRISC_PTRACE_H
 21
 22#include <asm/spr_defs.h>
 23
 24#ifndef __ASSEMBLY__
 25/*
 26 * This is the layout of the regset returned by the GETREGSET ptrace call
 27 */
 28struct user_regs_struct {
 29	/* GPR R0-R31... */
 30	unsigned long gpr[32];
 31	unsigned long pc;
 32	unsigned long sr;
 33	unsigned long pad1;
 34	unsigned long pad2;
 35};
 36#endif
 37
 38#ifdef __KERNEL__
 
 39
 40/*
 41 * Make kernel PTrace/register structures opaque to userspace... userspace can
 42 * access thread state via the regset mechanism.  This allows us a bit of
 43 * flexibility in how we order the registers on the stack, permitting some
 44 * optimizations like packing call-clobbered registers together so that
 45 * they share a cacheline (not done yet, though... future optimization).
 46 */
 47
 48#ifndef __ASSEMBLY__
 49/*
 50 * This struct describes how the registers are laid out on the kernel stack
 51 * during a syscall or other kernel entry.
 52 *
 53 * This structure should always be cacheline aligned on the stack.
 54 * FIXME: I don't think that's the case right now.  The alignment is
 55 * taken care of elsewhere... head.S, process.c, etc.
 56 */
 57
 58struct pt_regs {
 59	union {
 60		struct {
 61			/* Named registers */
 62			long  sr;	/* Stored in place of r0 */
 63			long  sp;	/* r1 */
 64		};
 65		struct {
 66			/* Old style */
 67			long offset[2];
 68			long gprs[30];
 69		};
 70		struct {
 71			/* New style */
 72			long gpr[32];
 73		};
 74	};
 75	long  pc;
 
 
 
 
 76	long  orig_gpr11;	/* For restarting system calls */
 77	long  syscallno;	/* Syscall number (used by strace) */
 78	long dummy;		/* Cheap alignment fix */
 
 79};
 80#endif /* __ASSEMBLY__ */
 81
 82/* TODO: Rename this to REDZONE because that's what it is */
 83#define STACK_FRAME_OVERHEAD  128  /* size of minimum stack frame */
 84
 85#define instruction_pointer(regs)	((regs)->pc)
 86#define user_mode(regs)			(((regs)->sr & SPR_SR_SM) == 0)
 87#define user_stack_pointer(regs)	((unsigned long)(regs)->sp)
 88#define profile_pc(regs)		instruction_pointer(regs)
 89
 
 
 
 
 
 
 
 90/*
 91 * Offsets used by 'ptrace' system call interface.
 92 */
 93#define PT_SR         0
 94#define PT_SP         4
 95#define PT_GPR2       8
 96#define PT_GPR3       12
 97#define PT_GPR4       16
 98#define PT_GPR5       20
 99#define PT_GPR6       24
100#define PT_GPR7       28
101#define PT_GPR8       32
102#define PT_GPR9       36
103#define PT_GPR10      40
104#define PT_GPR11      44
105#define PT_GPR12      48
106#define PT_GPR13      52
107#define PT_GPR14      56
108#define PT_GPR15      60
109#define PT_GPR16      64
110#define PT_GPR17      68
111#define PT_GPR18      72
112#define PT_GPR19      76
113#define PT_GPR20      80
114#define PT_GPR21      84
115#define PT_GPR22      88
116#define PT_GPR23      92
117#define PT_GPR24      96
118#define PT_GPR25      100
119#define PT_GPR26      104
120#define PT_GPR27      108
121#define PT_GPR28      112
122#define PT_GPR29      116
123#define PT_GPR30      120
124#define PT_GPR31      124
125#define PT_PC	      128
126#define PT_ORIG_GPR11 132
127#define PT_SYSCALLNO  136
128
129#endif /* __KERNEL__ */
130
131#endif /* __ASM_OPENRISC_PTRACE_H */
v5.4
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/*
  3 * OpenRISC Linux
  4 *
  5 * Linux architectural port borrowing liberally from similar works of
  6 * others.  All original copyrights apply as per the original source
  7 * declaration.
  8 *
  9 * OpenRISC implementation:
 10 * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
 11 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
 12 * et al.
 
 
 
 
 
 13 */
 
 14#ifndef __ASM_OPENRISC_PTRACE_H
 15#define __ASM_OPENRISC_PTRACE_H
 16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 17
 18#include <asm/spr_defs.h>
 19#include <uapi/asm/ptrace.h>
 20
 21/*
 22 * Make kernel PTrace/register structures opaque to userspace... userspace can
 23 * access thread state via the regset mechanism.  This allows us a bit of
 24 * flexibility in how we order the registers on the stack, permitting some
 25 * optimizations like packing call-clobbered registers together so that
 26 * they share a cacheline (not done yet, though... future optimization).
 27 */
 28
 29#ifndef __ASSEMBLY__
 30/*
 31 * This struct describes how the registers are laid out on the kernel stack
 32 * during a syscall or other kernel entry.
 33 *
 34 * This structure should always be cacheline aligned on the stack.
 35 * FIXME: I don't think that's the case right now.  The alignment is
 36 * taken care of elsewhere... head.S, process.c, etc.
 37 */
 38
 39struct pt_regs {
 40	union {
 41		struct {
 42			/* Named registers */
 43			long  sr;	/* Stored in place of r0 */
 44			long  sp;	/* r1 */
 45		};
 46		struct {
 47			/* Old style */
 48			long offset[2];
 49			long gprs[30];
 50		};
 51		struct {
 52			/* New style */
 53			long gpr[32];
 54		};
 55	};
 56	long  pc;
 57	/* For restarting system calls:
 58	 * Set to syscall number for syscall exceptions,
 59	 * -1 for all other exceptions.
 60	 */
 61	long  orig_gpr11;	/* For restarting system calls */
 
 62	long dummy;		/* Cheap alignment fix */
 63	long dummy2;		/* Cheap alignment fix */
 64};
 
 65
 66/* TODO: Rename this to REDZONE because that's what it is */
 67#define STACK_FRAME_OVERHEAD  128  /* size of minimum stack frame */
 68
 69#define instruction_pointer(regs)	((regs)->pc)
 70#define user_mode(regs)			(((regs)->sr & SPR_SR_SM) == 0)
 71#define user_stack_pointer(regs)	((unsigned long)(regs)->sp)
 72#define profile_pc(regs)		instruction_pointer(regs)
 73
 74static inline long regs_return_value(struct pt_regs *regs)
 75{
 76	return regs->gpr[11];
 77}
 78
 79#endif /* __ASSEMBLY__ */
 80
 81/*
 82 * Offsets used by 'ptrace' system call interface.
 83 */
 84#define PT_SR         0
 85#define PT_SP         4
 86#define PT_GPR2       8
 87#define PT_GPR3       12
 88#define PT_GPR4       16
 89#define PT_GPR5       20
 90#define PT_GPR6       24
 91#define PT_GPR7       28
 92#define PT_GPR8       32
 93#define PT_GPR9       36
 94#define PT_GPR10      40
 95#define PT_GPR11      44
 96#define PT_GPR12      48
 97#define PT_GPR13      52
 98#define PT_GPR14      56
 99#define PT_GPR15      60
100#define PT_GPR16      64
101#define PT_GPR17      68
102#define PT_GPR18      72
103#define PT_GPR19      76
104#define PT_GPR20      80
105#define PT_GPR21      84
106#define PT_GPR22      88
107#define PT_GPR23      92
108#define PT_GPR24      96
109#define PT_GPR25      100
110#define PT_GPR26      104
111#define PT_GPR27      108
112#define PT_GPR28      112
113#define PT_GPR29      116
114#define PT_GPR30      120
115#define PT_GPR31      124
116#define PT_PC	      128
117#define PT_ORIG_GPR11 132
118#define PT_SYSCALLNO  136
 
 
119
120#endif /* __ASM_OPENRISC_PTRACE_H */