PageRenderTime 43ms CodeModel.GetById 36ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 1ms

/arch/um/include/sysdep-ppc/ptrace.h

https://bitbucket.org/evzijst/gittest
C Header | 104 lines | 70 code | 16 blank | 18 comment | 2 complexity | 21fc8ff5995ac5fcc0af639a499423a0 MD5 | raw file
  1/* 
  2 * Licensed under the GPL
  3 */
  4
  5#ifndef __SYS_PTRACE_PPC_H
  6#define __SYS_PTRACE_PPC_H
  7
  8#include "linux/config.h"
  9#include "linux/types.h"
 10
 11/* the following taken from <asm-ppc/ptrace.h> */
 12
 13#ifdef CONFIG_PPC64
 14#define PPC_REG unsigned long /*long*/
 15#else
 16#define PPC_REG unsigned long
 17#endif
 18struct sys_pt_regs_s {
 19	PPC_REG gpr[32];
 20	PPC_REG nip;
 21	PPC_REG msr;
 22	PPC_REG orig_gpr3;	/* Used for restarting system calls */
 23	PPC_REG ctr;
 24	PPC_REG link;
 25	PPC_REG xer;
 26	PPC_REG ccr;
 27	PPC_REG mq;		/* 601 only (not used at present) */
 28				/* Used on APUS to hold IPL value. */
 29	PPC_REG trap;		/* Reason for being here */
 30	PPC_REG dar;		/* Fault registers */
 31	PPC_REG dsisr;
 32	PPC_REG result; 	/* Result of a system call */
 33};
 34
 35#define NUM_REGS (sizeof(struct sys_pt_regs_s) / sizeof(PPC_REG))
 36
 37struct sys_pt_regs {
 38    PPC_REG regs[sizeof(struct sys_pt_regs_s) / sizeof(PPC_REG)];
 39};
 40
 41#define UM_MAX_REG (PT_FPR0)
 42#define UM_MAX_REG_OFFSET (UM_MAX_REG * sizeof(PPC_REG))
 43
 44#define EMPTY_REGS { { [ 0 ... NUM_REGS - 1] = 0 } }
 45
 46#define UM_REG(r, n) ((r)->regs[n])
 47
 48#define UM_SYSCALL_RET(r) UM_REG(r, PT_R3)
 49#define UM_SP(r) UM_REG(r, PT_R1)
 50#define UM_IP(r) UM_REG(r, PT_NIP)
 51#define UM_ELF_ZERO(r) UM_REG(r, PT_FPSCR)
 52#define UM_SYSCALL_NR(r) UM_REG(r, PT_R0)
 53#define UM_SYSCALL_ARG1(r) UM_REG(r, PT_ORIG_R3)
 54#define UM_SYSCALL_ARG2(r) UM_REG(r, PT_R4)
 55#define UM_SYSCALL_ARG3(r) UM_REG(r, PT_R5)
 56#define UM_SYSCALL_ARG4(r) UM_REG(r, PT_R6)
 57#define UM_SYSCALL_ARG5(r) UM_REG(r, PT_R7)
 58#define UM_SYSCALL_ARG6(r) UM_REG(r, PT_R8)
 59
 60#define UM_SYSCALL_NR_OFFSET (PT_R0 * sizeof(PPC_REG))
 61#define UM_SYSCALL_RET_OFFSET (PT_R3 * sizeof(PPC_REG))
 62#define UM_SYSCALL_ARG1_OFFSET (PT_R3 * sizeof(PPC_REG))
 63#define UM_SYSCALL_ARG2_OFFSET (PT_R4 * sizeof(PPC_REG))
 64#define UM_SYSCALL_ARG3_OFFSET (PT_R5 * sizeof(PPC_REG))
 65#define UM_SYSCALL_ARG4_OFFSET (PT_R6 * sizeof(PPC_REG))
 66#define UM_SYSCALL_ARG5_OFFSET (PT_R7 * sizeof(PPC_REG))
 67#define UM_SYSCALL_ARG6_OFFSET (PT_R8 * sizeof(PPC_REG))
 68#define UM_SP_OFFSET (PT_R1 * sizeof(PPC_REG))
 69#define UM_IP_OFFSET (PT_NIP * sizeof(PPC_REG))
 70#define UM_ELF_ZERO_OFFSET (PT_R3 * sizeof(PPC_REG))
 71
 72#define UM_SET_SYSCALL_RETURN(_regs, result)	        \
 73do {                                                    \
 74        if (result < 0) {				\
 75		(_regs)->regs[PT_CCR] |= 0x10000000;	\
 76		UM_SYSCALL_RET((_regs)) = -result;	\
 77        } else {					\
 78		UM_SYSCALL_RET((_regs)) = result;	\
 79        }                                               \
 80} while(0)
 81
 82extern void shove_aux_table(unsigned long sp);
 83#define UM_FIX_EXEC_STACK(sp) shove_aux_table(sp);
 84
 85/* These aren't actually defined.  The undefs are just to make sure
 86 * everyone's clear on the concept.
 87 */
 88#undef UML_HAVE_GETREGS
 89#undef UML_HAVE_GETFPREGS
 90#undef UML_HAVE_SETREGS
 91#undef UML_HAVE_SETFPREGS
 92
 93#endif
 94
 95/*
 96 * Overrides for Emacs so that we follow Linus's tabbing style.
 97 * Emacs will notice this stuff at the end of the file and automatically
 98 * adjust the settings for this buffer only.  This must remain at the end
 99 * of the file.
100 * ---------------------------------------------------------------------------
101 * Local variables:
102 * c-file-style: "linux"
103 * End:
104 */