Hello.

I noticed that b0f891d129a9b372 ("Force udst ctx->#reg load to be volatile")
broke an USDT probe example shown below.

----------
#!/usr/bin/python
>from bcc import BPF, USDT
import sys
import ctypes as ct

def usage():
    print("USAGE: usdt PID")
    exit()
if len(sys.argv) < 1:
    usage()
if sys.argv[1][0:1] == "-":
    usage()
pid = int(sys.argv[1])
QUERY_MAX = 504

bpf_text = """
#include <uapi/linux/ptrace.h>
#define QUERY_MAX       """ + str(QUERY_MAX) + """
BPF_PERF_OUTPUT(events);
int do_start(struct pt_regs *ctx) {
    char *cp = NULL;
    bpf_usdt_readarg(1, ctx, &cp);
    struct { char query[QUERY_MAX]; } data = { };
    bpf_probe_read(&data.query, sizeof(data.query), (void *) cp);
    events.perf_submit(ctx, &data, sizeof(data));
    return 0;
};
"""

u = USDT(pid=pid)
u.enable_probe(probe="query__start", fn_name="do_start")
b = BPF(text=bpf_text, usdt_contexts=[u])

class Data(ct.Structure):
    _fields_ = [ ("query", ct.c_char * QUERY_MAX) ]

def print_event(cpu, data, size):
    event = ct.cast(data, ct.POINTER(Data)).contents
    print("%s" % (event.query))

b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
    b.kprobe_poll()
----------

Since bpf_probe_read() no longer reads PostgreSQL query string
passed to query__start event, nothing is printed out.
(Oh, I forgot to check whether cp != NULL.
Maybe it is bpf_usdt_readarg() which got broken?)

# git bisect log
# bad: [505c110a5f4f48cff1a501f8b83a548ade6a7739] Add a python test for usdt
# good: [aa4543ff2d42a2ca38a52963af9d6d078e48809a] Mention that linux-headers 
deb must be installed.
git bisect start '505c110a5f4f48cff1a501f8b83a548ade6a7739' 
'aa4543ff2d42a2ca38a52963af9d6d078e48809a'
# good: [a934c903583c415ebed70d03a6c15e9b20c52efa] Add linux/sched.h to list of 
libbpf.c includes
git bisect good a934c903583c415ebed70d03a6c15e9b20c52efa
# bad: [cb8e704ca64de58aab6137faa0b8d6b96f24a257] Merge pull request #1212 from 
iovisor/yhs_dev
git bisect bad cb8e704ca64de58aab6137faa0b8d6b96f24a257
# bad: [b0f891d129a9b372e7e8af5b951a1b63985afe26] Force udst ctx->#reg load to 
be volatile
git bisect bad b0f891d129a9b372e7e8af5b951a1b63985afe26
# good: [e7b0ab2dc44b244ef6600630c4e7b16c1f3b123a] Merge pull request #1211 
from iovisor/libbpf_c_includes
git bisect good e7b0ab2dc44b244ef6600630c4e7b16c1f3b123a
# first bad commit: [b0f891d129a9b372e7e8af5b951a1b63985afe26] Force udst 
ctx->#reg load to be volatile
_______________________________________________
iovisor-dev mailing list
iovisor-dev@lists.iovisor.org
https://lists.iovisor.org/mailman/listinfo/iovisor-dev

Reply via email to