• Andi Kleen's avatar
    [PATCH] Misc core changes for x86-64/2.5.42 · 1595982c
    Andi Kleen authored
    And here all the other x86-64 changes that have accumulated in my tree.
    
    It's various bugfixes and cleanups.
    
    Changes:
    
     - fix nmi watchdog
     - remove local timer spreading over CPUs - it's useless here and caused many problems
     - New offset.h computation from Kai
     - Lots of changes for the C99 initializer syntax
     - New MTRR driver from Dave & Mats
     - Bugfix: kernel threads don't start with interrupts disabled anymore, which fixes
       various boottime hangs (this was fixed a long time ago, but the bug crept in again
       by the backdoor)
     - Do %gs reload in context switch lockless
     - Fix device_not_available entry point race
     - New per CPU GDT layout following i386: the layot is not completely
       compatible with i386, which may problems with Wine in theory.
       Haven't seen any yet.
     - Support disableapic option
     - driverfs support removed for now because it caused crashes
     - Updates for new signal setup
     - Support for kallsyms
     - Port TLS clone flags/syscalls: unfortunately made the context switch
       even uglier than it already is.
     - Security fixes for ptrace
     - New in_interrupt()/atomic setup ported from i386
     - New makefiles mostly from Kai
     - Various updates ported from i386
    1595982c
ptrace.h 2.77 KB
#ifndef _X86_64_PTRACE_H
#define _X86_64_PTRACE_H

#if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS) 
#define R15 0
#define R14 8
#define R13 16
#define R12 24
#define RBP 36
#define RBX 40
/* arguments: interrupts/non tracing syscalls only save upto here*/
#define R11 48
#define R10 56	
#define R9 64
#define R8 72
#define RAX 80
#define RCX 88
#define RDX 96
#define RSI 104
#define RDI 112
#define ORIG_RAX 120       /* = ERROR */ 
/* end of arguments */ 	
/* cpu exception frame or undefined in case of fast syscall. */
#define RIP 128
#define CS 136
#define EFLAGS 144
#define RSP 152
#define SS 160
#define ARGOFFSET R11
#endif /* __ASSEMBLY__ */

/* top of stack page */ 
#define FRAME_SIZE 168

#define PTRACE_SETOPTIONS         21

/* options set using PTRACE_SETOPTIONS */
#define PTRACE_O_TRACESYSGOOD     0x00000001

/* Dummy values for ptrace */ 
#define FS 1000 
#define GS 1008

#ifndef __ASSEMBLY__ 

struct pt_regs {
	unsigned long r15;
	unsigned long r14;
	unsigned long r13;
	unsigned long r12;
	unsigned long rbp;
	unsigned long rbx;
/* arguments: non interrupts/non tracing syscalls only save upto here*/
 	unsigned long r11;
	unsigned long r10;	
	unsigned long r9;
	unsigned long r8;
	unsigned long rax;
	unsigned long rcx;
	unsigned long rdx;
	unsigned long rsi;
	unsigned long rdi;
	unsigned long orig_rax;
/* end of arguments */ 	
/* cpu exception frame or undefined */
	unsigned long rip;
	unsigned long cs;
	unsigned long eflags; 
	unsigned long rsp; 
	unsigned long ss;
/* top of stack page */ 
};

#endif

/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
#define PTRACE_GETREGS            12
#define PTRACE_SETREGS            13
#define PTRACE_GETFPREGS          14
#define PTRACE_SETFPREGS          15
#define PTRACE_GETFPXREGS         18
#define PTRACE_SETFPXREGS         19

#if defined(__KERNEL__) && !defined(__ASSEMBLY__) 
#define user_mode(regs) (!!((regs)->cs & 3))
#define instruction_pointer(regs) ((regs)->rip)
void signal_fault(struct pt_regs *regs, void *frame, char *where);

enum {
        EF_CF   = 0x00000001,
        EF_PF   = 0x00000004,
        EF_AF   = 0x00000010,
        EF_ZF   = 0x00000040,
        EF_SF   = 0x00000080,
        EF_TF   = 0x00000100,
        EF_IE   = 0x00000200,
        EF_DF   = 0x00000400,
        EF_OF   = 0x00000800,
        EF_IOPL = 0x00003000,
        EF_IOPL_RING0 = 0x00000000,
        EF_IOPL_RING1 = 0x00001000,
        EF_IOPL_RING2 = 0x00002000,
        EF_NT   = 0x00004000,   /* nested task */
        EF_RF   = 0x00010000,   /* resume */
        EF_VM   = 0x00020000,   /* virtual mode */
        EF_AC   = 0x00040000,   /* alignment */
        EF_VIF  = 0x00080000,   /* virtual interrupt */
        EF_VIP  = 0x00100000,   /* virtual interrupt pending */
        EF_ID   = 0x00200000,   /* id */
};

#endif

#endif