From 7445d54f4034116e7276c23c414ea019c5466472 Mon Sep 17 00:00:00 2001 From: Francis Deslauriers Date: Wed, 29 Aug 2018 12:49:59 -0400 Subject: [PATCH] Fix: instruction pointer has different names across arch Different terms are used to refer to the instruction pointer depending on the CPU architecture. For example: x86 -> ip powerpc -> nip RISC-V -> sepc ARM -> ARM_pc Microblaze -> pc To fix this issue, we use the instruction_pointer() kernel function (or macro depending on the arch) to get the right field in the pt_regs struct for the current architecture. Signed-off-by: Francis Deslauriers Signed-off-by: Mathieu Desnoyers --- probes/lttng-uprobes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/probes/lttng-uprobes.c b/probes/lttng-uprobes.c index 47f3599f..0b399291 100644 --- a/probes/lttng-uprobes.c +++ b/probes/lttng-uprobes.c @@ -67,7 +67,7 @@ int lttng_uprobes_handler_pre(struct uprobe_consumer *uc, struct pt_regs *regs) return 0; /* Event payload. */ - payload.ip = regs->ip; + payload.ip = (unsigned long)instruction_pointer(regs); lib_ring_buffer_align_ctx(&ctx, lttng_alignof(payload)); chan->ops->event_write(&ctx, &payload, sizeof(payload)); -- 2.34.1