linux-bk/arch/um/include/sysdep-ppc/ptrace.h
<<
>>
Prefs
   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 */
 105
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.