Skip to content

Commit

Permalink
* sysdeps/s390/fpu/fegetenv.c (fegetenv): Remove PTRACE_PEEKUSER
Browse files Browse the repository at this point in the history
	ptrace call to get the ieee_instruction_pointer from the kernel.
	* sysdeps/s390/fpu/fesetenv.c (fesetenv): Remove PTRACE_POKEUSER
	ptrace call to set the ieee_instructtion_pointer.
	* sysdeps/unix/sysv/linux/s390/sys/user.h (struct _user_regs_struct):
	Add comment that ieee_instruction_pointer is always 0.
  • Loading branch information
Ulrich Drepper committed Mar 24, 2008
1 parent af0498d commit 87b9b50
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 18 deletions.
9 changes: 9 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
2008-03-07 Martin Schwidefsky <schwidefsky@de.ibm.com>

* sysdeps/s390/fpu/fegetenv.c (fegetenv): Remove PTRACE_PEEKUSER
ptrace call to get the ieee_instruction_pointer from the kernel.
* sysdeps/s390/fpu/fesetenv.c (fesetenv): Remove PTRACE_POKEUSER
ptrace call to set the ieee_instructtion_pointer.
* sysdeps/unix/sysv/linux/s390/sys/user.h (struct _user_regs_struct):
Add comment that ieee_instruction_pointer is always 0.

2008-03-09 Andreas Jaeger <aj@suse.de>

[BZ #5857]
Expand Down
10 changes: 1 addition & 9 deletions sysdeps/s390/fpu/fegetenv.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Store current floating-point environment.
Copyright (C) 2000, 2003 Free Software Foundation, Inc.
Copyright (C) 2000, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
Expand Down Expand Up @@ -28,15 +28,7 @@
int
fegetenv (fenv_t *envp)
{
/* The S/390 IEEE fpu doesn't keep track of the ieee instruction pointer.
To get around that the kernel will store the address of the last
fpu fault to the process structure. This ptrace call reads this value
from the kernel space. That means the ieee_instruction_pointer is
only correct after a fpu fault. That's the best we can do, there is
no way to find out the ieee instruction pointer if there was no fault. */
_FPU_GETCW (envp->fpc);
envp->ieee_instruction_pointer =
(void *) ptrace (PTRACE_PEEKUSER, getpid (), PT_IEEE_IP);

/* Success. */
return 0;
Expand Down
8 changes: 1 addition & 7 deletions sysdeps/s390/fpu/fesetenv.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Install given floating-point environment.
Copyright (C) 2000, 2002 Free Software Foundation, Inc.
Copyright (C) 2000, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
Expand Down Expand Up @@ -43,13 +43,7 @@ fesetenv (const fenv_t *envp)
else
env = (*envp);

/* The S/390 IEEE fpu doesn't have a register for the ieee
instruction pointer. The operating system is required to keep an
instruction pointer on a per process base. We read and write this
value with the ptrace interface. */
_FPU_SETCW (env.fpc);
ptrace (PTRACE_POKEUSER, getpid (), PT_IEEE_IP,
env.ieee_instruction_pointer);

/* Success. */
return 0;
Expand Down
4 changes: 2 additions & 2 deletions sysdeps/unix/sysv/linux/s390/sys/user.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (C) 2000,2005 Free Software Foundation, Inc.
/* Copyright (C) 2000,2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
Expand Down Expand Up @@ -56,7 +56,7 @@ struct _user_regs_struct
unsigned long orig_gpr2; /* Original gpr2. */
struct _user_fpregs_struct fp_regs; /* Floating point registers. */
struct _user_per_struct per_info; /* Hardware tracing registers. */
unsigned long ieee_instruction_pointer;
unsigned long ieee_instruction_pointer; /* Always 0. */
};

struct user {
Expand Down

0 comments on commit 87b9b50

Please sign in to comment.