diff options
author | Vyacheslav Cherkashin <v.cherkashin@samsung.com> | 2013-10-04 18:38:47 +0400 |
---|---|---|
committer | Vyacheslav Cherkashin <v.cherkashin@samsung.com> | 2013-10-04 18:38:47 +0400 |
commit | a11f828df3f3ab4a0f9d14b49c54c31e9e7b24f1 (patch) | |
tree | 4bc367c8648bbf0b0871ec43de26deb3601be8d1 /writer | |
parent | b12df65abbf3dbb4dd730fc5b9fbb5ef3d2ec84d (diff) | |
download | swap-modules-a11f828df3f3ab4a0f9d14b49c54c31e9e7b24f1.tar.gz swap-modules-a11f828df3f3ab4a0f9d14b49c54c31e9e7b24f1.tar.bz2 swap-modules-a11f828df3f3ab4a0f9d14b49c54c31e9e7b24f1.zip |
{IMPROVE] add ret_addr for exit_event()
Change-Id: I0e1c6e11442c94befe6a45f528d511af87f31395
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
Diffstat (limited to 'writer')
-rw-r--r-- | writer/swap_writer_module.c | 11 | ||||
-rw-r--r-- | writer/swap_writer_module.h | 3 |
2 files changed, 10 insertions, 4 deletions
diff --git a/writer/swap_writer_module.c b/writer/swap_writer_module.c index 9b294a1c..b710d2f9 100644 --- a/writer/swap_writer_module.c +++ b/writer/swap_writer_module.c @@ -542,11 +542,14 @@ struct msg_func_exit { u32 pid; u32 tid; u64 pc_addr; + u64 caller_pc_addr; u32 cpu_num; u64 ret_val; } __attribute__((packed)); -static char *pack_msg_func_exit(char *payload, struct pt_regs *regs, unsigned long func_addr) +static char *pack_msg_func_exit(char *payload, struct pt_regs *regs, + unsigned long func_addr, + unsigned long ret_addr) { struct msg_func_exit *mfe = (struct msg_func_exit *)payload; struct task_struct *task = current; @@ -555,12 +558,14 @@ static char *pack_msg_func_exit(char *payload, struct pt_regs *regs, unsigned lo mfe->tid = task->pid; mfe->cpu_num = task_cpu(task); mfe->pc_addr = func_addr; + mfe->caller_pc_addr = ret_addr; mfe->ret_val = get_regs_ret_val(regs); return payload + sizeof(*mfe); } -int exit_event(struct pt_regs *regs, unsigned long func_addr) +int exit_event(struct pt_regs *regs, unsigned long func_addr, + unsigned long ret_addr) { char *buf, *payload, *buf_end; @@ -569,7 +574,7 @@ int exit_event(struct pt_regs *regs, unsigned long func_addr) buf = get_current_buf(); payload = pack_basic_msg_fmt(buf, MSG_FUNCTION_EXIT); - buf_end = pack_msg_func_exit(payload, regs, func_addr); + buf_end = pack_msg_func_exit(payload, regs, func_addr, ret_addr); set_len_msg(buf, buf_end); return write_to_buffer(buf); diff --git a/writer/swap_writer_module.h b/writer/swap_writer_module.h index 60acd5f6..ca502161 100644 --- a/writer/swap_writer_module.h +++ b/writer/swap_writer_module.h @@ -57,7 +57,8 @@ int sample_msg(struct pt_regs *regs); int entry_event(const char *fmt, struct pt_regs *regs, enum PROBE_TYPE pt, int sub_type); -int exit_event(struct pt_regs *regs, unsigned long func_addr); +int exit_event(struct pt_regs *regs, unsigned long func_addr, + unsigned long ret_addr); int switch_entry(struct pt_regs *regs); int switch_exit(struct pt_regs *regs); |