bpf_map_lookup_elem(&array, &key); return x + 1;
}
static __noinline int sub5(int v);
__noinline int sub2(int y)
{ return sub5(y + 2);
}
static __noinline int sub3(int z)
{ return z + 3 + sub1(4);
}
static __noinline int sub4(int w)
{ int key = 0;
bpf_map_lookup_elem(&array, &key); return w + sub3(5) + sub1(6);
}
/* sub5() is an identitify function, just to test weirder functions layout and * call patterns
*/ static __noinline int sub5(int v)
{ return sub1(v) - 1; /* compensates sub1()'s + 1 */
}
/* unfortunately verifier rejects `struct task_struct *t` as an unknown pointer * type, so we need to accept pointer as integer and then cast it inside the * function
*/
__noinline int get_task_tgid(uintptr_t t)
{ /* this ensures that CO-RE relocs work in multi-subprogs .text */ return BPF_CORE_READ((struct task_struct *)(void *)t, tgid);
}
int res1 = 0; int res2 = 0; int res3 = 0; int res4 = 0;
SEC("raw_tp/sys_enter") int prog1(void *ctx)
{ /* perform some CO-RE relocations to ensure they work with multi-prog * sections correctly
*/ struct task_struct *t = (void *)bpf_get_current_task();
if (!BPF_CORE_READ(t, pid) || !get_task_tgid((uintptr_t)t)) return 1;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.