|
3 | 3 | -- SPDX-License-Identifier: MIT OR GPL-2.0-only |
4 | 4 | -- |
5 | 5 |
|
6 | | -local linux = require("linux") |
7 | | -local probe = require("probe") |
8 | | -local device = require("device") |
9 | | -local systab = require("syscall.table") |
10 | | - |
11 | | -local syscalls = {"openat", "read", "write", "readv", "writev", "close"} |
| 6 | +local lunatik = require("lunatik") |
| 7 | +local runner = require("lunatik.runner") |
| 8 | +local linux = require("linux") |
| 9 | +local device = require("device") |
| 10 | +local rcu = require("rcu") |
12 | 11 |
|
13 | 12 | local function nop() end -- do nothing |
14 | 13 |
|
15 | 14 | local s = linux.stat |
16 | 15 | local driver = {name = "systrack", open = nop, release = nop, mode = s.IRUGO} |
17 | 16 |
|
18 | | -local track = {} |
| 17 | +local systrack = rcu.table() |
| 18 | +lunatik._ENV.systrack = systrack |
| 19 | + |
19 | 20 | local toggle = true |
20 | 21 | function driver:read() |
21 | 22 | local log = "" |
22 | 23 | if toggle then |
23 | | - for symbol, counter in pairs(track) do |
24 | | - log = log .. string.format("%s: %d\n", symbol, counter) |
25 | | - end |
| 24 | + rcu.map(systrack, function (symbol, counter) |
| 25 | + log = log .. string.format("%s: %d\n", symbol, counter:getnumber(0)) |
| 26 | + end) |
26 | 27 | end |
27 | 28 | toggle = not toggle |
28 | 29 | return log |
29 | 30 | end |
30 | 31 |
|
31 | | -for _, symbol in ipairs(syscalls) do |
32 | | - local address = systab[symbol] |
33 | | - track[symbol] = 0 |
34 | | - |
35 | | - local function handler() |
36 | | - track[symbol] = track[symbol] + 1 |
37 | | - end |
38 | | - |
39 | | - probe.new(address, {pre = handler, post = nop}) |
40 | | -end |
41 | | - |
| 32 | +runner.run("examples/systrack/probes", false) |
42 | 33 | device.new(driver) |
43 | 34 |
|
0 commit comments