xref: /aosp_15_r20/external/bcc/src/lua/bcc/libbcc.lua (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1--[[
2Copyright 2016 GitHub, Inc
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15]]
16local ffi = require("ffi")
17
18ffi.cdef[[
19enum bpf_prog_type {
20  BPF_PROG_TYPE_UNSPEC,
21  BPF_PROG_TYPE_SOCKET_FILTER,
22  BPF_PROG_TYPE_KPROBE,
23  BPF_PROG_TYPE_SCHED_CLS,
24  BPF_PROG_TYPE_SCHED_ACT,
25};
26
27int bcc_create_map(enum bpf_map_type map_type, int key_size, int value_size, int max_entries, int map_flags);
28int bpf_update_elem(int fd, void *key, void *value, unsigned long long flags);
29int bpf_lookup_elem(int fd, void *key, void *value);
30int bpf_delete_elem(int fd, void *key);
31int bpf_get_next_key(int fd, void *key, void *next_key);
32
33int bcc_prog_load(enum bpf_prog_type prog_type, const char *name,
34  const struct bpf_insn *insns, int insn_len,
35  const char *license, unsigned kern_version,
36  int log_level, char *log_buf, unsigned log_buf_size);
37int bpf_attach_socket(int sockfd, int progfd);
38
39/* create RAW socket and bind to interface 'name' */
40int bpf_open_raw_sock(const char *name);
41
42typedef void (*perf_reader_raw_cb)(void *cb_cookie, void *raw, int raw_size);
43typedef void (*perf_reader_lost_cb)(void *cb_cookie, uint64_t lost);
44
45int bpf_attach_kprobe(int progfd, int attach_type, const char *ev_name,
46                      const char *fn_name, uint64_t fn_offset, int maxactive);
47
48int bpf_detach_kprobe(const char *ev_name);
49
50int bpf_attach_uprobe(int progfd, int attach_type, const char *ev_name,
51                      const char *binary_path, uint64_t offset, int pid);
52
53int bpf_detach_uprobe(const char *ev_name);
54
55void * bpf_open_perf_buffer(perf_reader_raw_cb raw_cb, perf_reader_lost_cb lost_cb, void *cb_cookie, int pid, int cpu, int page_cnt);
56
57int bpf_close_perf_event_fd(int fd);
58]]
59
60ffi.cdef[[
61void * bpf_module_create_c(const char *filename, unsigned flags, const char *cflags[], int ncflags, bool allow_rlimit);
62void * bpf_module_create_c_from_string(const char *text, unsigned flags, const char *cflags[], int ncflags, bool allow_rlimit);
63void bpf_module_destroy(void *program);
64char * bpf_module_license(void *program);
65unsigned bpf_module_kern_version(void *program);
66size_t bpf_num_functions(void *program);
67const char * bpf_function_name(void *program, size_t id);
68void * bpf_function_start_id(void *program, size_t id);
69void * bpf_function_start(void *program, const char *name);
70size_t bpf_function_size_id(void *program, size_t id);
71size_t bpf_function_size(void *program, const char *name);
72size_t bpf_num_tables(void *program);
73size_t bpf_table_id(void *program, const char *table_name);
74int bpf_table_fd(void *program, const char *table_name);
75int bpf_table_fd_id(void *program, size_t id);
76int bpf_table_type(void *program, const char *table_name);
77int bpf_table_type_id(void *program, size_t id);
78size_t bpf_table_max_entries(void *program, const char *table_name);
79size_t bpf_table_max_entries_id(void *program, size_t id);
80int bpf_table_flags(void *program, const char *table_name);
81int bpf_table_flags_id(void *program, size_t id);
82const char * bpf_table_name(void *program, size_t id);
83const char * bpf_table_key_desc(void *program, const char *table_name);
84const char * bpf_table_key_desc_id(void *program, size_t id);
85const char * bpf_table_leaf_desc(void *program, const char *table_name);
86const char * bpf_table_leaf_desc_id(void *program, size_t id);
87size_t bpf_table_key_size(void *program, const char *table_name);
88size_t bpf_table_key_size_id(void *program, size_t id);
89size_t bpf_table_leaf_size(void *program, const char *table_name);
90size_t bpf_table_leaf_size_id(void *program, size_t id);
91int bpf_table_key_snprintf(void *program, size_t id, char *buf, size_t buflen, const void *key);
92int bpf_table_leaf_snprintf(void *program, size_t id, char *buf, size_t buflen, const void *leaf);
93int bpf_table_key_sscanf(void *program, size_t id, const char *buf, void *key);
94int bpf_table_leaf_sscanf(void *program, size_t id, const char *buf, void *leaf);
95]]
96
97ffi.cdef[[
98struct perf_reader;
99
100void perf_reader_free(void *ptr);
101int perf_reader_mmap(struct perf_reader *reader);
102int perf_reader_poll(int num_readers, struct perf_reader **readers, int timeout);
103int perf_reader_fd(struct perf_reader *reader);
104void perf_reader_set_fd(struct perf_reader *reader, int fd);
105]]
106
107ffi.cdef[[
108struct bcc_symbol {
109	const char *name;
110	const char *demangle_name;
111	const char *module;
112	uint64_t offset;
113};
114
115struct bcc_symbol_option {
116  int use_debug_file;
117  int check_debug_file_crc;
118  int lazy_symbolize;
119  uint32_t use_symbol_type;
120};
121
122int bcc_resolve_symname(const char *module, const char *symname, const uint64_t addr,
123                        int pid, struct bcc_symbol_option *option,
124                        struct bcc_symbol *sym);
125void bcc_procutils_free(const char *ptr);
126void *bcc_symcache_new(int pid, struct bcc_symbol_option *option);
127void bcc_symbol_free_demangle_name(struct bcc_symbol *sym);
128int bcc_symcache_resolve(void *symcache, uint64_t addr, struct bcc_symbol *sym);
129void bcc_symcache_refresh(void *resolver);
130]]
131
132ffi.cdef[[
133void *bcc_usdt_new_frompid(int pid);
134void *bcc_usdt_new_frompath(const char *path);
135void bcc_usdt_close(void *usdt);
136
137int bcc_usdt_enable_probe(void *, const char *, const char *);
138char *bcc_usdt_genargs(void *);
139
140typedef void (*bcc_usdt_uprobe_cb)(const char *, const char *, uint64_t, int);
141void bcc_usdt_foreach_uprobe(void *usdt, bcc_usdt_uprobe_cb callback);
142]]
143
144if rawget(_G, "BCC_STANDALONE") then
145  return ffi.C
146else
147  return ffi.load(
148    os.getenv("LIBBCC_SO_PATH") or
149    rawget(_G, "LIBBCC_SO_PATH") or
150    "bcc")
151end
152