mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
um: unify ptrace_user.h
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
parent
a10c95d84c
commit
966e803ab1
9 changed files with 35 additions and 77 deletions
|
@ -6,7 +6,8 @@
|
|||
#ifndef __PTRACE_USER_H__
|
||||
#define __PTRACE_USER_H__
|
||||
|
||||
#include "sysdep/ptrace_user.h"
|
||||
#include <sys/ptrace.h>
|
||||
#include <sysdep/ptrace_user.h>
|
||||
|
||||
extern int ptrace_getregs(long pid, unsigned long *regs_out);
|
||||
extern int ptrace_setregs(long pid, unsigned long *regs_in);
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/wait.h>
|
||||
#include <asm/unistd.h>
|
||||
#include "as-layout.h"
|
||||
|
@ -162,7 +161,7 @@ static void handle_trap(int pid, struct uml_pt_regs *regs,
|
|||
|
||||
if (!local_using_sysemu)
|
||||
{
|
||||
err = ptrace(PTRACE_POKEUSR, pid, PT_SYSCALL_NR_OFFSET,
|
||||
err = ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET,
|
||||
__NR_getpid);
|
||||
if (err < 0) {
|
||||
printk(UM_KERN_ERR "handle_trap - nullifying syscall "
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/wait.h>
|
||||
#include <asm/unistd.h>
|
||||
|
@ -224,7 +223,7 @@ static void __init check_sysemu(void)
|
|||
goto fail;
|
||||
}
|
||||
|
||||
n = ptrace(PTRACE_POKEUSR, pid, PT_SYSCALL_RET_OFFSET, os_getpid());
|
||||
n = ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_RET_OFFSET, os_getpid());
|
||||
if (n < 0) {
|
||||
non_fatal("check_sysemu : failed to modify system call "
|
||||
"return");
|
||||
|
@ -260,7 +259,7 @@ static void __init check_sysemu(void)
|
|||
"doesn't singlestep");
|
||||
goto fail;
|
||||
}
|
||||
n = ptrace(PTRACE_POKEUSR, pid, PT_SYSCALL_RET_OFFSET,
|
||||
n = ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_RET_OFFSET,
|
||||
os_getpid());
|
||||
if (n < 0)
|
||||
fatal_perror("check_sysemu : failed to modify "
|
||||
|
@ -316,10 +315,10 @@ static void __init check_ptrace(void)
|
|||
fatal("check_ptrace : expected (SIGTRAP|0x80), "
|
||||
"got status = %d", status);
|
||||
|
||||
syscall = ptrace(PTRACE_PEEKUSR, pid, PT_SYSCALL_NR_OFFSET,
|
||||
syscall = ptrace(PTRACE_PEEKUSER, pid, PT_SYSCALL_NR_OFFSET,
|
||||
0);
|
||||
if (syscall == __NR_getpid) {
|
||||
n = ptrace(PTRACE_POKEUSR, pid, PT_SYSCALL_NR_OFFSET,
|
||||
n = ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET,
|
||||
__NR_getppid);
|
||||
if (n < 0)
|
||||
fatal_perror("check_ptrace : failed to modify "
|
||||
|
|
|
@ -46,7 +46,7 @@ static const int reg_offsets[] =
|
|||
[FS >> 3] = HOST_FS,
|
||||
[GS >> 3] = HOST_GS,
|
||||
[EFLAGS >> 3] = HOST_EFLAGS,
|
||||
[ORIG_RAX >> 3] = HOST_ORIG_RAX,
|
||||
[ORIG_RAX >> 3] = HOST_ORIG_AX,
|
||||
};
|
||||
|
||||
int putreg(struct task_struct *child, int regno, unsigned long value)
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
#define REGS_FS(r) ((r)[HOST_FS])
|
||||
#define REGS_GS(r) ((r)[HOST_GS])
|
||||
|
||||
#define REGS_ORIG_RAX(r) ((r)[HOST_ORIG_RAX])
|
||||
#define REGS_ORIG_RAX(r) ((r)[HOST_ORIG_AX])
|
||||
|
||||
#define REGS_SET_SYSCALL_RETURN(r, res) REGS_RAX(r) = (res)
|
||||
|
||||
|
|
|
@ -1,5 +1,27 @@
|
|||
#include <generated/user_constants.h>
|
||||
|
||||
#define PT_OFFSET(r) ((r) * sizeof(long))
|
||||
|
||||
#define PT_SYSCALL_NR(regs) ((regs)[HOST_ORIG_AX])
|
||||
#define PT_SYSCALL_NR_OFFSET PT_OFFSET(HOST_ORIG_AX)
|
||||
|
||||
#define PT_SYSCALL_RET_OFFSET PT_OFFSET(HOST_AX)
|
||||
|
||||
#define REGS_IP_INDEX HOST_IP
|
||||
#define REGS_SP_INDEX HOST_SP
|
||||
|
||||
#ifdef __i386__
|
||||
#include "ptrace_user_32.h"
|
||||
#define FP_SIZE ((HOST_FPX_SIZE > HOST_FP_SIZE) ? HOST_FPX_SIZE : HOST_FP_SIZE)
|
||||
#else
|
||||
#include "ptrace_user_64.h"
|
||||
#define FP_SIZE HOST_FP_SIZE
|
||||
|
||||
/*
|
||||
* x86_64 FC3 doesn't define this in /usr/include/linux/ptrace.h even though
|
||||
* it's defined in the kernel's include/linux/ptrace.h. Additionally, use the
|
||||
* 2.4 name and value for 2.4 host compatibility.
|
||||
*/
|
||||
#ifndef PTRACE_OLDSETOPTIONS
|
||||
#define PTRACE_OLDSETOPTIONS 21
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __SYSDEP_I386_PTRACE_USER_H__
|
||||
#define __SYSDEP_I386_PTRACE_USER_H__
|
||||
|
||||
#include <sys/ptrace.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <generated/user_constants.h>
|
||||
|
||||
#define PT_OFFSET(r) ((r) * sizeof(long))
|
||||
|
||||
#define PT_SYSCALL_NR(regs) ((regs)[ORIG_EAX])
|
||||
#define PT_SYSCALL_NR_OFFSET PT_OFFSET(ORIG_EAX)
|
||||
|
||||
#define PT_SYSCALL_RET_OFFSET PT_OFFSET(EAX)
|
||||
|
||||
#define REGS_IP_INDEX EIP
|
||||
#define REGS_SP_INDEX UESP
|
||||
|
||||
#define FP_SIZE ((HOST_FPX_SIZE > HOST_FP_SIZE) ? HOST_FPX_SIZE : HOST_FP_SIZE)
|
||||
|
||||
#endif
|
|
@ -1,38 +0,0 @@
|
|||
/*
|
||||
* Copyright 2003 PathScale, Inc.
|
||||
*
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __SYSDEP_X86_64_PTRACE_USER_H__
|
||||
#define __SYSDEP_X86_64_PTRACE_USER_H__
|
||||
|
||||
#define __FRAME_OFFSETS
|
||||
#include <sys/ptrace.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <asm/ptrace.h>
|
||||
#undef __FRAME_OFFSETS
|
||||
#include <generated/user_constants.h>
|
||||
|
||||
#define PT_INDEX(off) ((off) / sizeof(unsigned long))
|
||||
|
||||
#define PT_SYSCALL_NR(regs) ((regs)[PT_INDEX(ORIG_RAX)])
|
||||
#define PT_SYSCALL_NR_OFFSET (ORIG_RAX)
|
||||
|
||||
#define PT_SYSCALL_RET_OFFSET (RAX)
|
||||
|
||||
/*
|
||||
* x86_64 FC3 doesn't define this in /usr/include/linux/ptrace.h even though
|
||||
* it's defined in the kernel's include/linux/ptrace.h. Additionally, use the
|
||||
* 2.4 name and value for 2.4 host compatibility.
|
||||
*/
|
||||
#ifndef PTRACE_OLDSETOPTIONS
|
||||
#define PTRACE_OLDSETOPTIONS 21
|
||||
#endif
|
||||
|
||||
#define REGS_IP_INDEX PT_INDEX(RIP)
|
||||
#define REGS_SP_INDEX PT_INDEX(RSP)
|
||||
|
||||
#define FP_SIZE (HOST_FP_SIZE)
|
||||
|
||||
#endif
|
|
@ -36,6 +36,7 @@ void foo(void)
|
|||
DEFINE(HOST_FS, FS);
|
||||
DEFINE(HOST_ES, ES);
|
||||
DEFINE(HOST_GS, GS);
|
||||
DEFINE(HOST_ORIG_AX, ORIG_EAX);
|
||||
#else
|
||||
DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));
|
||||
DEFINE_LONGS(HOST_BX, RBX);
|
||||
|
@ -53,7 +54,7 @@ void foo(void)
|
|||
DEFINE_LONGS(HOST_R13, R13);
|
||||
DEFINE_LONGS(HOST_R14, R14);
|
||||
DEFINE_LONGS(HOST_R15, R15);
|
||||
DEFINE_LONGS(HOST_ORIG_RAX, ORIG_RAX);
|
||||
DEFINE_LONGS(HOST_ORIG_AX, ORIG_RAX);
|
||||
DEFINE_LONGS(HOST_CS, CS);
|
||||
DEFINE_LONGS(HOST_SS, SS);
|
||||
DEFINE_LONGS(HOST_EFLAGS, EFLAGS);
|
||||
|
|
Loading…
Reference in a new issue