Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
um
sys-ppc
ptrace.c
Go to the documentation of this file.
1
#include <linux/sched.h>
2
#include "asm/ptrace.h"
3
4
int
putreg
(
struct
task_struct
*
child
,
unsigned
long
regno,
5
unsigned
long
value
)
6
{
7
child->
thread
.process_regs.regs[regno >> 2] =
value
;
8
return
0;
9
}
10
11
int
poke_user
(
struct
task_struct
*
child
,
long
addr
,
long
data
)
12
{
13
if
((addr & 3) || addr < 0)
14
return
-
EIO
;
15
16
if
(addr <
MAX_REG_OFFSET
)
17
return
putreg
(child, addr, data);
18
19
else
if
((addr >=
offsetof
(
struct
user
, u_debugreg[0])) &&
20
(addr <=
offsetof
(
struct
user
, u_debugreg[7]))){
21
addr -=
offsetof
(
struct
user
, u_debugreg[0]);
22
addr = addr >> 2;
23
if
((addr == 4) || (addr == 5))
return
-
EIO
;
24
child->
thread
.arch.debugregs[
addr
] =
data
;
25
return
0;
26
}
27
return
-
EIO
;
28
}
29
30
unsigned
long
getreg
(
struct
task_struct
*
child
,
unsigned
long
regno)
31
{
32
unsigned
long
retval
= ~0
UL
;
33
34
retval &= child->
thread
.process_regs.regs[regno >> 2];
35
return
retval
;
36
}
37
38
int
peek_user
(
struct
task_struct
*
child
,
long
addr
,
long
data
)
39
{
40
/* read the word at location addr in the USER area. */
41
unsigned
long
tmp
;
42
43
if
((addr & 3) || addr < 0)
44
return
-
EIO
;
45
46
tmp = 0;
/* Default return condition */
47
if
(addr <
MAX_REG_OFFSET
){
48
tmp =
getreg
(child, addr);
49
}
50
else
if
((addr >=
offsetof
(
struct
user
, u_debugreg[0])) &&
51
(addr <=
offsetof
(
struct
user
, u_debugreg[7]))){
52
addr -=
offsetof
(
struct
user
, u_debugreg[0]);
53
addr = addr >> 2;
54
tmp = child->
thread
.arch.debugregs[
addr
];
55
}
56
return
put_user
(tmp, (
unsigned
long
*) data);
57
}
58
Generated on Thu Jan 10 2013 12:52:35 for Linux Kernel by
1.8.2