summaryrefslogtreecommitdiff
path: root/writer
diff options
context:
space:
mode:
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>2013-12-12 12:37:07 +0400
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>2013-12-12 09:30:55 +0000
commitf4090951e881507a44f0620c002c2b0db248fa51 (patch)
treefbb9a34f97845f874d8183ef9da2b9320c609849 /writer
parentf44dc29191d10a6df92e3227451555828553fd74 (diff)
downloadswap-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.c12
-rw-r--r--writer/swap_writer_module.h4
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);