diff --git a/src/cc/frontends/clang/b_frontend_action.cc b/src/cc/frontends/clang/b_frontend_action.cc index 14bad3b0b3f2..11a0221f9626 100644 --- a/src/cc/frontends/clang/b_frontend_action.cc +++ b/src/cc/frontends/clang/b_frontend_action.cc @@ -64,7 +64,10 @@ bool BMapDeclVisitor::VisitRecordDecl(RecordDecl *D) { result_ += "\", ["; for (auto F : D->getDefinition()->fields()) { result_ += "["; - TraverseDecl(F); + if (F->getType()->isPointerType()) + result_ += "\"unsigned long long\""; + else + TraverseDecl(F); if (F->isBitField()) result_ += ", " + to_string(F->getBitWidthValue(C)); result_ += "], "; diff --git a/tests/cc/test_clang.py b/tests/cc/test_clang.py index 1a24004e7533..a53b431fd0e2 100755 --- a/tests/cc/test_clang.py +++ b/tests/cc/test_clang.py @@ -65,5 +65,26 @@ def test_sscanf(self): self.assertEqual(l.s.a, 5) self.assertEqual(l.s.b, 6) + def test_iosnoop(self): + text = """ +#include +#include + +struct key_t { + struct request *req; +}; + +BPF_TABLE("hash", struct key_t, u64, start, 1024); +int do_request(struct pt_regs *ctx, struct request *req) { + struct key_t key = {}; + + bpf_trace_printk("traced start %d\\n", req->__data_len); + + return 0; +} +""" + b = BPF(text=text, debug=0) + fn = b.load_func("do_request", BPF.KPROBE) + if __name__ == "__main__": main()