Commit | Line | Data |
---|---|---|
57553dfd MD |
1 | // SPDX-License-Identifier: MIT |
2 | /* | |
3 | * Copyright 2022-2023 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | |
4 | */ | |
5 | ||
b8dfb348 MD |
6 | #ifndef SIDE_ABI_VISITOR_H |
7 | #define SIDE_ABI_VISITOR_H | |
57553dfd MD |
8 | |
9 | #include <stdint.h> | |
10 | #include <side/macros.h> | |
11 | #include <side/endian.h> | |
12 | ||
35e4f870 MD |
13 | /* |
14 | * SIDE ABI for visitor pattern. | |
15 | * | |
16 | * The visitor pattern is a double-dispatch visitor. Changing this ABI | |
17 | * is a breaking ABI change. | |
18 | * | |
19 | * This ABI is a contract between the instrumented application and | |
20 | * user-space tracers. Kernel tracers are not expected to interact with | |
21 | * visitors directly: a proxy in libside should execute visitors to | |
22 | * convert their output to other types which can be read by the kernel | |
23 | * tracers. | |
24 | */ | |
25 | ||
57553dfd MD |
26 | struct side_arg; |
27 | struct side_arg_dynamic_field; | |
28 | struct side_tracer_visitor_ctx; | |
29 | struct side_tracer_dynamic_struct_visitor_ctx; | |
30 | ||
57553dfd MD |
31 | |
32 | typedef enum side_visitor_status (*side_write_elem_func)( | |
33 | const struct side_tracer_visitor_ctx *tracer_ctx, | |
34 | const struct side_arg *elem); | |
35 | typedef enum side_visitor_status (*side_visitor_func)( | |
36 | const struct side_tracer_visitor_ctx *tracer_ctx, | |
37 | void *app_ctx); | |
38 | ||
39 | struct side_tracer_visitor_ctx { | |
40 | side_write_elem_func write_elem; | |
41 | void *priv; /* Private tracer context. */ | |
42 | } SIDE_PACKED; | |
43 | ||
44 | typedef enum side_visitor_status (*side_write_field_func)( | |
45 | const struct side_tracer_dynamic_struct_visitor_ctx *tracer_ctx, | |
46 | const struct side_arg_dynamic_field *dynamic_field); | |
47 | typedef enum side_visitor_status (*side_dynamic_struct_visitor_func)( | |
48 | const struct side_tracer_dynamic_struct_visitor_ctx *tracer_ctx, | |
49 | void *app_ctx); | |
50 | ||
51 | struct side_tracer_dynamic_struct_visitor_ctx { | |
52 | side_write_field_func write_field; | |
53 | void *priv; /* Private tracer context. */ | |
54 | } SIDE_PACKED; | |
55 | ||
b8dfb348 | 56 | #endif /* SIDE_ABI_VISITOR_H */ |