[PATCH] Split i386 and x86_64 ptrace.h

The use of SEGMENT_RPL_MASK in the i386 ptrace.h introduced by
x86-allow-a-kernel-to-not-be-in-ring-0.patch broke the UML build, as UML
includes the underlying architecture's ptrace.h, but has no easy access to the
x86 segment definitions.

Rather than kludging around this, as in the past, this patch splits the
userspace-usable parts, which are the bits that UML needs, of ptrace.h into
ptrace-abi.h, which is included back into ptrace.h. Thus, there is no net
effect on i386.

As a side-effect, this creates a ptrace header which is close to being usable
in /usr/include.

x86_64 is also treated in this way for consistency. There was some trailing
whitespace there, which is cleaned up.

Signed-off-by: Jeff Dike <jdike@addtoit.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Jeff Dike and committed by
Linus Torvalds
70e0eb8e b1fc0b1f

+100 -86
+1
include/asm-i386/Kbuild
··· 3 header-y += boot.h 4 header-y += debugreg.h 5 header-y += ldt.h 6 header-y += ucontext.h 7 8 unifdef-y += mtrr.h
··· 3 header-y += boot.h 4 header-y += debugreg.h 5 header-y += ldt.h 6 + header-y += ptrace-abi.h 7 header-y += ucontext.h 8 9 unifdef-y += mtrr.h
+39
include/asm-i386/ptrace-abi.h
···
··· 1 + #ifndef I386_PTRACE_ABI_H 2 + #define I386_PTRACE_ABI_H 3 + 4 + #define EBX 0 5 + #define ECX 1 6 + #define EDX 2 7 + #define ESI 3 8 + #define EDI 4 9 + #define EBP 5 10 + #define EAX 6 11 + #define DS 7 12 + #define ES 8 13 + #define FS 9 14 + #define GS 10 15 + #define ORIG_EAX 11 16 + #define EIP 12 17 + #define CS 13 18 + #define EFL 14 19 + #define UESP 15 20 + #define SS 16 21 + #define FRAME_SIZE 17 22 + 23 + /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ 24 + #define PTRACE_GETREGS 12 25 + #define PTRACE_SETREGS 13 26 + #define PTRACE_GETFPREGS 14 27 + #define PTRACE_SETFPREGS 15 28 + #define PTRACE_GETFPXREGS 18 29 + #define PTRACE_SETFPXREGS 19 30 + 31 + #define PTRACE_OLDSETOPTIONS 21 32 + 33 + #define PTRACE_GET_THREAD_AREA 25 34 + #define PTRACE_SET_THREAD_AREA 26 35 + 36 + #define PTRACE_SYSEMU 31 37 + #define PTRACE_SYSEMU_SINGLESTEP 32 38 + 39 + #endif
+1 -34
include/asm-i386/ptrace.h
··· 1 #ifndef _I386_PTRACE_H 2 #define _I386_PTRACE_H 3 4 - #define EBX 0 5 - #define ECX 1 6 - #define EDX 2 7 - #define ESI 3 8 - #define EDI 4 9 - #define EBP 5 10 - #define EAX 6 11 - #define DS 7 12 - #define ES 8 13 - #define FS 9 14 - #define GS 10 15 - #define ORIG_EAX 11 16 - #define EIP 12 17 - #define CS 13 18 - #define EFL 14 19 - #define UESP 15 20 - #define SS 16 21 - #define FRAME_SIZE 17 22 23 /* this struct defines the way the registers are stored on the 24 stack during a system call. */ ··· 23 long esp; 24 int xss; 25 }; 26 - 27 - /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ 28 - #define PTRACE_GETREGS 12 29 - #define PTRACE_SETREGS 13 30 - #define PTRACE_GETFPREGS 14 31 - #define PTRACE_SETFPREGS 15 32 - #define PTRACE_GETFPXREGS 18 33 - #define PTRACE_SETFPXREGS 19 34 - 35 - #define PTRACE_OLDSETOPTIONS 21 36 - 37 - #define PTRACE_GET_THREAD_AREA 25 38 - #define PTRACE_SET_THREAD_AREA 26 39 - 40 - #define PTRACE_SYSEMU 31 41 - #define PTRACE_SYSEMU_SINGLESTEP 32 42 43 #ifdef __KERNEL__ 44
··· 1 #ifndef _I386_PTRACE_H 2 #define _I386_PTRACE_H 3 4 + #include <asm/ptrace-abi.h> 5 6 /* this struct defines the way the registers are stored on the 7 stack during a system call. */ ··· 40 long esp; 41 int xss; 42 }; 43 44 #ifdef __KERNEL__ 45
+1
include/asm-x86_64/Kbuild
··· 11 header-y += ldt.h 12 header-y += msr.h 13 header-y += prctl.h 14 header-y += setup.h 15 header-y += sigcontext32.h 16 header-y += ucontext.h
··· 11 header-y += ldt.h 12 header-y += msr.h 13 header-y += prctl.h 14 + header-y += ptrace-abi.h 15 header-y += setup.h 16 header-y += sigcontext32.h 17 header-y += ucontext.h
+51
include/asm-x86_64/ptrace-abi.h
···
··· 1 + #ifndef _X86_64_PTRACE_ABI_H 2 + #define _X86_64_PTRACE_ABI_H 3 + 4 + #if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS) 5 + #define R15 0 6 + #define R14 8 7 + #define R13 16 8 + #define R12 24 9 + #define RBP 32 10 + #define RBX 40 11 + /* arguments: interrupts/non tracing syscalls only save upto here*/ 12 + #define R11 48 13 + #define R10 56 14 + #define R9 64 15 + #define R8 72 16 + #define RAX 80 17 + #define RCX 88 18 + #define RDX 96 19 + #define RSI 104 20 + #define RDI 112 21 + #define ORIG_RAX 120 /* = ERROR */ 22 + /* end of arguments */ 23 + /* cpu exception frame or undefined in case of fast syscall. */ 24 + #define RIP 128 25 + #define CS 136 26 + #define EFLAGS 144 27 + #define RSP 152 28 + #define SS 160 29 + #define ARGOFFSET R11 30 + #endif /* __ASSEMBLY__ */ 31 + 32 + /* top of stack page */ 33 + #define FRAME_SIZE 168 34 + 35 + #define PTRACE_OLDSETOPTIONS 21 36 + 37 + /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ 38 + #define PTRACE_GETREGS 12 39 + #define PTRACE_SETREGS 13 40 + #define PTRACE_GETFPREGS 14 41 + #define PTRACE_SETFPREGS 15 42 + #define PTRACE_GETFPXREGS 18 43 + #define PTRACE_SETFPXREGS 19 44 + 45 + /* only useful for access 32bit programs */ 46 + #define PTRACE_GET_THREAD_AREA 25 47 + #define PTRACE_SET_THREAD_AREA 26 48 + 49 + #define PTRACE_ARCH_PRCTL 30 /* arch_prctl for child */ 50 + 51 + #endif
+7 -52
include/asm-x86_64/ptrace.h
··· 1 #ifndef _X86_64_PTRACE_H 2 #define _X86_64_PTRACE_H 3 4 - #if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS) 5 - #define R15 0 6 - #define R14 8 7 - #define R13 16 8 - #define R12 24 9 - #define RBP 32 10 - #define RBX 40 11 - /* arguments: interrupts/non tracing syscalls only save upto here*/ 12 - #define R11 48 13 - #define R10 56 14 - #define R9 64 15 - #define R8 72 16 - #define RAX 80 17 - #define RCX 88 18 - #define RDX 96 19 - #define RSI 104 20 - #define RDI 112 21 - #define ORIG_RAX 120 /* = ERROR */ 22 - /* end of arguments */ 23 - /* cpu exception frame or undefined in case of fast syscall. */ 24 - #define RIP 128 25 - #define CS 136 26 - #define EFLAGS 144 27 - #define RSP 152 28 - #define SS 160 29 - #define ARGOFFSET R11 30 - #endif /* __ASSEMBLY__ */ 31 32 - /* top of stack page */ 33 - #define FRAME_SIZE 168 34 - 35 - #define PTRACE_OLDSETOPTIONS 21 36 - 37 - #ifndef __ASSEMBLY__ 38 39 struct pt_regs { 40 unsigned long r15; ··· 14 unsigned long rbx; 15 /* arguments: non interrupts/non tracing syscalls only save upto here*/ 16 unsigned long r11; 17 - unsigned long r10; 18 unsigned long r9; 19 unsigned long r8; 20 unsigned long rax; ··· 23 unsigned long rsi; 24 unsigned long rdi; 25 unsigned long orig_rax; 26 - /* end of arguments */ 27 /* cpu exception frame or undefined */ 28 unsigned long rip; 29 unsigned long cs; 30 - unsigned long eflags; 31 - unsigned long rsp; 32 unsigned long ss; 33 - /* top of stack page */ 34 }; 35 36 #endif 37 - 38 - /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ 39 - #define PTRACE_GETREGS 12 40 - #define PTRACE_SETREGS 13 41 - #define PTRACE_GETFPREGS 14 42 - #define PTRACE_SETFPREGS 15 43 - #define PTRACE_GETFPXREGS 18 44 - #define PTRACE_SETFPXREGS 19 45 - 46 - /* only useful for access 32bit programs */ 47 - #define PTRACE_GET_THREAD_AREA 25 48 - #define PTRACE_SET_THREAD_AREA 26 49 - 50 - #define PTRACE_ARCH_PRCTL 30 /* arch_prctl for child */ 51 52 #if defined(__KERNEL__) && !defined(__ASSEMBLY__) 53 #define user_mode(regs) (!!((regs)->cs & 3))
··· 1 #ifndef _X86_64_PTRACE_H 2 #define _X86_64_PTRACE_H 3 4 + #include <asm/ptrace-abi.h> 5 6 + #ifndef __ASSEMBLY__ 7 8 struct pt_regs { 9 unsigned long r15; ··· 45 unsigned long rbx; 46 /* arguments: non interrupts/non tracing syscalls only save upto here*/ 47 unsigned long r11; 48 + unsigned long r10; 49 unsigned long r9; 50 unsigned long r8; 51 unsigned long rax; ··· 54 unsigned long rsi; 55 unsigned long rdi; 56 unsigned long orig_rax; 57 + /* end of arguments */ 58 /* cpu exception frame or undefined */ 59 unsigned long rip; 60 unsigned long cs; 61 + unsigned long eflags; 62 + unsigned long rsp; 63 unsigned long ss; 64 + /* top of stack page */ 65 }; 66 67 #endif 68 69 #if defined(__KERNEL__) && !defined(__ASSEMBLY__) 70 #define user_mode(regs) (!!((regs)->cs & 3))