Skip to content

Commit

Permalink
um: unify ptrace_user.h
Browse files Browse the repository at this point in the history
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Richard Weinberger <richard@nod.at>
  • Loading branch information
Al Viro authored and Richard Weinberger committed Nov 2, 2011
1 parent a10c95d commit 966e803
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 77 deletions.
3 changes: 2 additions & 1 deletion arch/um/include/shared/ptrace_user.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 1 addition & 2 deletions arch/um/os-Linux/skas/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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 "
Expand Down
9 changes: 4 additions & 5 deletions arch/um/os-Linux/start_up.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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");
Expand Down Expand Up @@ -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 "
Expand Down Expand Up @@ -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 "
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/um/ptrace_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/um/shared/sysdep/ptrace_64.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
26 changes: 24 additions & 2 deletions arch/x86/um/shared/sysdep/ptrace_user.h
Original file line number Diff line number Diff line change
@@ -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
26 changes: 0 additions & 26 deletions arch/x86/um/shared/sysdep/ptrace_user_32.h

This file was deleted.

38 changes: 0 additions & 38 deletions arch/x86/um/shared/sysdep/ptrace_user_64.h

This file was deleted.

3 changes: 2 additions & 1 deletion arch/x86/um/user-offsets.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down

0 comments on commit 966e803

Please sign in to comment.