bpf/samples: Fix PT_REGS_IP on s390x and use it
The files "sampleip_kern.c" and "trace_event_kern.c" directly access "ctx->regs.ip" which is not available on s390x. Fix this and use the PT_REGS_IP() macro instead. Also fix the macro for s390x and use "psw.addr" from "pt_regs". Reported-by: Zvonko Kosic <zvonko.kosic@de.ibm.com> Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com> Acked-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7a99cd6e21
commit
2dbb4c05d0
3 changed files with 3 additions and 3 deletions
|
@ -113,7 +113,7 @@ static int (*bpf_skb_under_cgroup)(void *ctx, void *map, int index) =
|
|||
#define PT_REGS_FP(x) ((x)->gprs[11]) /* Works only with CONFIG_FRAME_POINTER */
|
||||
#define PT_REGS_RC(x) ((x)->gprs[2])
|
||||
#define PT_REGS_SP(x) ((x)->gprs[15])
|
||||
#define PT_REGS_IP(x) ((x)->ip)
|
||||
#define PT_REGS_IP(x) ((x)->psw.addr)
|
||||
|
||||
#elif defined(__aarch64__)
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ int do_sample(struct bpf_perf_event_data *ctx)
|
|||
u64 ip;
|
||||
u32 *value, init_val = 1;
|
||||
|
||||
ip = ctx->regs.ip;
|
||||
ip = PT_REGS_IP(&ctx->regs);
|
||||
value = bpf_map_lookup_elem(&ip_map, &ip);
|
||||
if (value)
|
||||
*value += 1;
|
||||
|
|
|
@ -50,7 +50,7 @@ int bpf_prog1(struct bpf_perf_event_data *ctx)
|
|||
key.userstack = bpf_get_stackid(ctx, &stackmap, USER_STACKID_FLAGS);
|
||||
if ((int)key.kernstack < 0 && (int)key.userstack < 0) {
|
||||
bpf_trace_printk(fmt, sizeof(fmt), cpu, ctx->sample_period,
|
||||
ctx->regs.ip);
|
||||
PT_REGS_IP(&ctx->regs));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue