lua: Allow LuaJIT parameterized types in `open_perf_buffer`
authorVicent Marti <tanoku@gmail.com>
Tue, 24 May 2016 15:57:34 +0000 (17:57 +0200)
committerVicent Marti <tanoku@gmail.com>
Tue, 24 May 2016 15:57:34 +0000 (17:57 +0200)
src/lua/bcc/table.lua
tools/stacksnoop.lua

index af269d8..35d93ed 100644 (file)
@@ -254,9 +254,9 @@ function PerfEventArray:_open_perf_buffer(cpu, callback, ctype)
   self._callbacks[cpu] = _cb
 end
 
-function PerfEventArray:open_perf_buffer(callback, data_type)
+function PerfEventArray:open_perf_buffer(callback, data_type, ...)
   assert(data_type, "a data type is needed for callback conversion")
-  local ctype = ffi.typeof(data_type.."*")
+  local ctype = ffi.typeof(data_type.."*", ...)
   for i = 0, Posix.cpu_count() - 1 do
     self:_open_perf_buffer(i, callback, ctype)
   end
index af9284e..8f5f5b4 100755 (executable)
@@ -100,12 +100,8 @@ return function(BPF, utils)
 
   local TASK_COMM_LEN = 16 -- linux/sched.h
 
-  bpf:get_table("events"):open_perf_buffer(print_event, [[
-    struct {
-      uint64_t stack_id;
-      uint32_t pid;
-      char comm[%d];
-    }
-  ]] % {TASK_COMM_LEN})
+  bpf:get_table("events"):open_perf_buffer(print_event,
+    "struct { uint64_t stack_id; uint32_t pid; char comm[$]; }",
+    TASK_COMM_LEN)
   bpf:kprobe_poll_loop()
 end