Something went wrong. Try again.
An eBPF-based profiler for process-lifecycle events.
zig ebpf profilers
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566const std = @import("std");const root = @import("root.zig");const print = std.debug.print;const testing = std.testing;const allocator = root.allocator;const libbpf = root.libbpf;
test "array" { _ = libbpf.libbpf_set_print(root.dbg_printf);
const path = try allocator.dupeZ(u8, @import("@build_options").prog_array_path); defer allocator.free(path); const obj = libbpf.bpf_object__open(path); if (obj == null) { print("failed to open bpf object: {}\n", .{std.posix.errno(-1)}); return error.OPEN; } defer libbpf.bpf_object__close(obj);
var ret = libbpf.bpf_object__load(obj); if (ret != 0) { print("failed to load bpf object: {}\n", .{std.posix.errno(-1)}); return error.LOAD; }
if (libbpf.bpf_object__next_program(obj, null)) |prog| { const map = libbpf.bpf_object__next_map(obj, null).?;
// map[0] = 1 var k: u32 = 0; var v: u32 = 1; ret = libbpf.bpf_map__update_elem(map, &k, @sizeOf(@TypeOf(k)), &v, @sizeOf(@TypeOf(v)), 0); if (ret != 0) { print("failed update map element: {}\n", .{std.posix.errno(-1)}); return error.MAP_UPDATE; }
// run bpf program const fd = libbpf.bpf_program__fd(prog); var buf: [32]u8 = undefined;
var attr = std.mem.zeroInit(libbpf.bpf_test_run_opts, .{ .sz = @sizeOf(libbpf.bpf_test_run_opts), .data_in = &buf, .data_size_in = 32, .data_out = &buf, }); ret = libbpf.bpf_prog_test_run_opts(fd, &attr); if (ret != 0) { print("failed run prog: {}\n", .{std.posix.errno(-1)}); return error.RUN; } try testing.expectEqual(@as(@TypeOf(attr.retval), 0), attr.retval);
// expect map[1] == 2 k = 1; ret = libbpf.bpf_map__lookup_elem(map, &k, @sizeOf(@TypeOf(k)), &v, @sizeOf(@TypeOf(v)), 0); if (ret != 0) { print("failed loopup map element: {}\n", .{std.posix.errno(-1)}); return error.MAP_LOOKUP; }
try testing.expectEqual(@as(@TypeOf(v), 2), v); }}