tools/bpf/bpftool/jit_disasm.c
Source file repositories/reference/linux-study-clean/tools/bpf/bpftool/jit_disasm.c
File Facts
- System
- Linux kernel
- Corpus path
tools/bpf/bpftool/jit_disasm.c- Extension
.c- Size
- 9215 bytes
- Lines
- 432
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: implementation source
- Status
- source implementation candidate
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
stdio.hstdarg.hstdint.hstdlib.hunistd.hstring.hsys/stat.hlimits.hbpf/libbpf.hllvm-c/Core.hllvm-c/Disassembler.hllvm-c/Target.hllvm-c/TargetMachine.hbfd.hdis-asm.htools/dis-asm-compat.hjson_writer.hmain.h
Detected Declarations
struct disasm_infofunction printf_jsonfunction symbol_lookup_callbackfunction init_contextfunction destroy_contextfunction disassemble_insnfunction disasm_initfunction disasm_print_addrfunction get_exec_pathfunction printf_jsonfunction fprintf_jsonfunction fprintf_json_styledfunction init_contextfunction destroy_contextfunction disassemble_insnfunction disasm_initfunction disasm_print_insn
Annotated Snippet
struct disasm_info {
struct disassemble_info info;
__u64 func_ksym;
};
static void disasm_print_addr(bfd_vma addr, struct disassemble_info *info)
{
struct disasm_info *dinfo = container_of(info, struct disasm_info, info);
addr += dinfo->func_ksym;
generic_print_address(addr, info);
}
typedef struct {
struct disasm_info *info;
disassembler_ftype disassemble;
bfd *bfdf;
} disasm_ctx_t;
static int get_exec_path(char *tpath, size_t size)
{
const char *path = "/proc/self/exe";
ssize_t len;
len = readlink(path, tpath, size - 1);
if (len <= 0)
return -1;
tpath[len] = 0;
return 0;
}
static int printf_json(void *out, const char *fmt, va_list ap)
{
char *s;
int err;
err = vasprintf(&s, fmt, ap);
if (err < 0)
return -1;
if (!oper_count) {
int i;
/* Strip trailing spaces */
i = strlen(s) - 1;
while (s[i] == ' ')
s[i--] = '\0';
jsonw_string_field(json_wtr, "operation", s);
jsonw_name(json_wtr, "operands");
jsonw_start_array(json_wtr);
oper_count++;
} else if (!strcmp(fmt, ",")) {
/* Skip */
} else {
jsonw_string(json_wtr, s);
oper_count++;
}
free(s);
return 0;
}
static int fprintf_json(void *out, const char *fmt, ...)
{
va_list ap;
int r;
va_start(ap, fmt);
r = printf_json(out, fmt, ap);
va_end(ap);
return r;
}
static int fprintf_json_styled(void *out,
enum disassembler_style style __maybe_unused,
const char *fmt, ...)
{
va_list ap;
int r;
va_start(ap, fmt);
r = printf_json(out, fmt, ap);
va_end(ap);
return r;
}
Annotation
- Immediate include surface: `stdio.h`, `stdarg.h`, `stdint.h`, `stdlib.h`, `unistd.h`, `string.h`, `sys/stat.h`, `limits.h`.
- Detected declarations: `struct disasm_info`, `function printf_json`, `function symbol_lookup_callback`, `function init_context`, `function destroy_context`, `function disassemble_insn`, `function disasm_init`, `function disasm_print_addr`, `function get_exec_path`, `function printf_json`.
- Atlas domain: Support Tooling And Documentation / tools.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.