This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
[Bug translator/23407] New: bpf: backend should support strings as first class values
- From: "me at serhei dot io" <sourceware-bugzilla at sourceware dot org>
- To: systemtap at sourceware dot org
- Date: Thu, 12 Jul 2018 20:01:04 +0000
- Subject: [Bug translator/23407] New: bpf: backend should support strings as first class values
- Auto-submitted: auto-generated
https://sourceware.org/bugzilla/show_bug.cgi?id=23407
Bug ID: 23407
Summary: bpf: backend should support strings as first class
values
Product: systemtap
Version: unspecified
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: translator
Assignee: systemtap at sourceware dot org
Reporter: me at serhei dot io
Target Milestone: ---
PR created based on https://sourceware.org/ml/systemtap/2018-q3/msg00016.html
It should be possible to store string literals of reasonable size
(BPF_MAXSTRINGLEN=64, matching the 'best practice' of other eBPF tracing tools)
within local variables, associative array elements, and associative array keys,
and to pass them as function arguments.
The tentative plan is to add a new value type STR to struct value in
bpf-internal.h. In addition to doing register allocation, bpf-opt.cxx will also
lower any STR value into a set of instructions that loads the string onto the
eBPF stack (based on existing printf() code) or into memory (if writing to a
global data structure), then returns the string address. Because more than one
string can be written to the stack at once, strings may need to be written
somewhere besides the start of the stack.
Suggested testcase:
global var
global tab1
global tab2
probe begin {
printf("BEGIN\n")
var = "str1"
tab1[0] = "str2"
tab2["key"] = "str3"
}
probe end {
printf("%s\n", "str0")
printf("%s\n", var)
printf("%s\n", tab1[0])
printf("%s\n", tab2["key"])
printf("END\n")
}
--
You are receiving this mail because:
You are the assignee for the bug.