Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
4eb5845d
Commit
4eb5845d
authored
Sep 08, 2008
by
Paul Mundt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sh: kprobes: __kprobes annotations and formatting cleanups.
Signed-off-by:
Paul Mundt
<
lethal@linux-sh.org
>
parent
734db377
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
17 deletions
+20
-17
arch/sh/kernel/kprobes.c
arch/sh/kernel/kprobes.c
+20
-17
No files found.
arch/sh/kernel/kprobes.c
View file @
4eb5845d
...
@@ -115,20 +115,20 @@ void __kprobes arch_remove_kprobe(struct kprobe *p)
...
@@ -115,20 +115,20 @@ void __kprobes arch_remove_kprobe(struct kprobe *p)
}
}
}
}
static
inline
void
save_previous_kprobe
(
struct
kprobe_ctlblk
*
kcb
)
static
void
__kprobes
save_previous_kprobe
(
struct
kprobe_ctlblk
*
kcb
)
{
{
kcb
->
prev_kprobe
.
kp
=
kprobe_running
();
kcb
->
prev_kprobe
.
kp
=
kprobe_running
();
kcb
->
prev_kprobe
.
status
=
kcb
->
kprobe_status
;
kcb
->
prev_kprobe
.
status
=
kcb
->
kprobe_status
;
}
}
static
inline
void
restore_previous_kprobe
(
struct
kprobe_ctlblk
*
kcb
)
static
void
__kprobes
restore_previous_kprobe
(
struct
kprobe_ctlblk
*
kcb
)
{
{
__get_cpu_var
(
current_kprobe
)
=
kcb
->
prev_kprobe
.
kp
;
__get_cpu_var
(
current_kprobe
)
=
kcb
->
prev_kprobe
.
kp
;
kcb
->
kprobe_status
=
kcb
->
prev_kprobe
.
status
;
kcb
->
kprobe_status
=
kcb
->
prev_kprobe
.
status
;
}
}
static
inline
void
set_current_kprobe
(
struct
kprobe
*
p
,
struct
pt_regs
*
regs
,
static
void
__kprobes
set_current_kprobe
(
struct
kprobe
*
p
,
struct
pt_regs
*
regs
,
struct
kprobe_ctlblk
*
kcb
)
struct
kprobe_ctlblk
*
kcb
)
{
{
__get_cpu_var
(
current_kprobe
)
=
p
;
__get_cpu_var
(
current_kprobe
)
=
p
;
}
}
...
@@ -138,7 +138,7 @@ static inline void set_current_kprobe(struct kprobe *p, struct pt_regs *regs,
...
@@ -138,7 +138,7 @@ static inline void set_current_kprobe(struct kprobe *p, struct pt_regs *regs,
* on the next instruction, following branches. Two probes are set if the
* on the next instruction, following branches. Two probes are set if the
* branch is conditional.
* branch is conditional.
*/
*/
static
inline
void
prepare_singlestep
(
struct
kprobe
*
p
,
struct
pt_regs
*
regs
)
static
void
__kprobes
prepare_singlestep
(
struct
kprobe
*
p
,
struct
pt_regs
*
regs
)
{
{
kprobe_opcode_t
*
addr
=
NULL
;
kprobe_opcode_t
*
addr
=
NULL
;
saved_current_opcode
.
addr
=
(
kprobe_opcode_t
*
)
(
regs
->
pc
);
saved_current_opcode
.
addr
=
(
kprobe_opcode_t
*
)
(
regs
->
pc
);
...
@@ -273,12 +273,12 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
...
@@ -273,12 +273,12 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
/* handler has already set things up, so skip ss setup */
/* handler has already set things up, so skip ss setup */
return
1
;
return
1
;
ss_probe:
ss_probe:
prepare_singlestep
(
p
,
regs
);
prepare_singlestep
(
p
,
regs
);
kcb
->
kprobe_status
=
KPROBE_HIT_SS
;
kcb
->
kprobe_status
=
KPROBE_HIT_SS
;
return
1
;
return
1
;
no_kprobe:
no_kprobe:
preempt_enable_no_resched
();
preempt_enable_no_resched
();
return
ret
;
return
ret
;
}
}
...
@@ -358,7 +358,7 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
...
@@ -358,7 +358,7 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
return
orig_ret_address
;
return
orig_ret_address
;
}
}
static
in
line
int
post_kprobe_handler
(
struct
pt_regs
*
regs
)
static
in
t
__kprobes
post_kprobe_handler
(
struct
pt_regs
*
regs
)
{
{
struct
kprobe
*
cur
=
kprobe_running
();
struct
kprobe
*
cur
=
kprobe_running
();
struct
kprobe_ctlblk
*
kcb
=
get_kprobe_ctlblk
();
struct
kprobe_ctlblk
*
kcb
=
get_kprobe_ctlblk
();
...
@@ -391,14 +391,15 @@ static inline int post_kprobe_handler(struct pt_regs *regs)
...
@@ -391,14 +391,15 @@ static inline int post_kprobe_handler(struct pt_regs *regs)
}
}
}
}
/*Restore back the original saved kprobes variables and continue. */
/*
Restore back the original saved kprobes variables and continue. */
if
(
kcb
->
kprobe_status
==
KPROBE_REENTER
)
{
if
(
kcb
->
kprobe_status
==
KPROBE_REENTER
)
{
restore_previous_kprobe
(
kcb
);
restore_previous_kprobe
(
kcb
);
goto
out
;
goto
out
;
}
}
reset_current_kprobe
();
reset_current_kprobe
();
out:
out:
preempt_enable_no_resched
();
preempt_enable_no_resched
();
return
1
;
return
1
;
...
@@ -463,6 +464,7 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
...
@@ -463,6 +464,7 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
default:
default:
break
;
break
;
}
}
return
0
;
return
0
;
}
}
...
@@ -498,8 +500,8 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
...
@@ -498,8 +500,8 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
ret
=
NOTIFY_STOP
;
ret
=
NOTIFY_STOP
;
}
else
{
}
else
{
p
=
__get_cpu_var
(
current_kprobe
);
p
=
__get_cpu_var
(
current_kprobe
);
if
(
p
->
break_handler
if
(
p
->
break_handler
&&
&&
p
->
break_handler
(
p
,
args
->
regs
))
p
->
break_handler
(
p
,
args
->
regs
))
ret
=
NOTIFY_STOP
;
ret
=
NOTIFY_STOP
;
}
}
}
}
...
@@ -542,25 +544,26 @@ void __kprobes jprobe_return(void)
...
@@ -542,25 +544,26 @@ void __kprobes jprobe_return(void)
int
__kprobes
longjmp_break_handler
(
struct
kprobe
*
p
,
struct
pt_regs
*
regs
)
int
__kprobes
longjmp_break_handler
(
struct
kprobe
*
p
,
struct
pt_regs
*
regs
)
{
{
struct
kprobe_ctlblk
*
kcb
=
get_kprobe_ctlblk
();
struct
kprobe_ctlblk
*
kcb
=
get_kprobe_ctlblk
();
u8
*
addr
=
(
u8
*
)
regs
->
pc
;
unsigned
long
stack_addr
=
kcb
->
jprobe_saved_r15
;
unsigned
long
stack_addr
=
kcb
->
jprobe_saved_r15
;
u8
*
addr
=
(
u8
*
)
regs
->
pc
;
if
((
addr
>=
(
u8
*
)
jprobe_return
)
if
((
addr
>=
(
u8
*
)
jprobe_return
)
&&
&&
(
addr
<=
(
u8
*
)
jprobe_return_end
))
{
(
addr
<=
(
u8
*
)
jprobe_return_end
))
{
*
regs
=
kcb
->
jprobe_saved_regs
;
*
regs
=
kcb
->
jprobe_saved_regs
;
memcpy
((
kprobe_opcode_t
*
)
stack_addr
,
kcb
->
jprobes_stack
,
memcpy
((
kprobe_opcode_t
*
)
stack_addr
,
kcb
->
jprobes_stack
,
MIN_STACK_SIZE
(
stack_addr
));
MIN_STACK_SIZE
(
stack_addr
));
kcb
->
kprobe_status
=
KPROBE_HIT_SS
;
kcb
->
kprobe_status
=
KPROBE_HIT_SS
;
preempt_enable_no_resched
();
preempt_enable_no_resched
();
return
1
;
return
1
;
}
}
return
0
;
return
0
;
}
}
static
struct
kprobe
trampoline_p
=
{
static
struct
kprobe
trampoline_p
=
{
.
addr
=
(
kprobe_opcode_t
*
)
&
kretprobe_trampoline
,
.
addr
=
(
kprobe_opcode_t
*
)
&
kretprobe_trampoline
,
.
pre_handler
=
trampoline_probe_handler
.
pre_handler
=
trampoline_probe_handler
};
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment