This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug translator/23407] New: bpf: backend should support strings as first class values


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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]