diff options
author | Vyacheslav Cherkashin <v.cherkashin@samsung.com> | 2013-12-12 12:37:07 +0400 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.vlan144.tizendev.org> | 2013-12-12 09:30:55 +0000 |
commit | f4090951e881507a44f0620c002c2b0db248fa51 (patch) | |
tree | fbb9a34f97845f874d8183ef9da2b9320c609849 /writer | |
parent | f44dc29191d10a6df92e3227451555828553fd74 (diff) | |
download | swap-modules-f4090951e881507a44f0620c002c2b0db248fa51.tar.gz swap-modules-f4090951e881507a44f0620c002c2b0db248fa51.tar.bz2 swap-modules-f4090951e881507a44f0620c002c2b0db248fa51.zip |
[FIX] send original address, which set probe (US)
Change-Id: I99f03ae6e869c0d28713c6f8ab2f3f0dc7b120bd
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
Diffstat (limited to 'writer')
-rw-r--r-- | writer/swap_writer_module.c | 12 | ||||
-rw-r--r-- | writer/swap_writer_module.h | 4 |
2 files changed, 9 insertions, 7 deletions
diff --git a/writer/swap_writer_module.c b/writer/swap_writer_module.c index 046b23b7..fb51d8ad 100644 --- a/writer/swap_writer_module.c +++ b/writer/swap_writer_module.c @@ -513,7 +513,8 @@ struct msg_func_entry { char args[0]; } __attribute__((packed)); -static char *pack_msg_func_entry(char *payload, const char *fmt, struct pt_regs *regs, +static char *pack_msg_func_entry(char *payload, const char *fmt, + unsigned long func_addr, struct pt_regs *regs, enum PROBE_TYPE pt, int sub_type) { struct msg_func_entry *mfe = (struct msg_func_entry *)payload; @@ -522,7 +523,7 @@ static char *pack_msg_func_entry(char *payload, const char *fmt, struct pt_regs mfe->pid = task->tgid; mfe->tid = task->pid; mfe->cpu_num = smp_processor_id(); - mfe->pc_addr = get_regs_ip(regs); + mfe->pc_addr = func_addr; mfe->caller_pc_addr = get_regs_ret_func(regs); mfe->probe_type = pt; mfe->probe_sub_type = sub_type; @@ -629,8 +630,8 @@ static int pack_args(char *buf, int len, const char *fmt, struct pt_regs *regs) return buf - buf_old; } -int entry_event(const char *fmt, struct pt_regs *regs, - enum PROBE_TYPE pt, int sub_type) +int entry_event(const char *fmt, unsigned long func_addr, struct pt_regs *regs, + enum PROBE_TYPE pt, int sub_type) { char *buf, *payload, *args, *buf_end; int ret; @@ -640,7 +641,8 @@ int entry_event(const char *fmt, struct pt_regs *regs, buf = get_current_buf(); payload = pack_basic_msg_fmt(buf, MSG_FUNCTION_ENTRY); - args = pack_msg_func_entry(payload, fmt, regs, pt, sub_type); + args = pack_msg_func_entry(payload, fmt, func_addr, + regs, pt, sub_type); /* FIXME: len = 1024 */ ret = pack_args(args, 1024, fmt, regs); diff --git a/writer/swap_writer_module.h b/writer/swap_writer_module.h index d709174d..89f2c73f 100644 --- a/writer/swap_writer_module.h +++ b/writer/swap_writer_module.h @@ -60,8 +60,8 @@ void pcoc_map_msg(struct vm_area_struct *vma); void proc_unmap_msg(unsigned long start, unsigned long end); 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 entry_event(const char *fmt, unsigned long func_addr, struct pt_regs *regs, + enum PROBE_TYPE pt, int sub_type); int exit_event(char ret_type, struct pt_regs *regs, unsigned long func_addr, unsigned long ret_addr); |