Skip to content

Commit aacf7f3

Browse files
d-e-s-oanakryiko
authored andcommitted
deps: update blazesym submodule
Update the blazesym submodule to the most recent snapshot. Signed-off-by: Daniel Müller <deso@posteo.net>
1 parent 859c233 commit aacf7f3

File tree

6 files changed

+61
-101
lines changed

6 files changed

+61
-101
lines changed

blazesym

examples/c/Makefile

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ LIBBPF_OBJ := $(abspath $(OUTPUT)/libbpf.a)
77
BPFTOOL_OUTPUT ?= $(abspath $(OUTPUT)/bpftool)
88
BPFTOOL ?= $(BPFTOOL_OUTPUT)/bootstrap/bpftool
99
LIBBLAZESYM_SRC := $(abspath ../../blazesym/)
10+
LIBBLAZESYM_INC := $(abspath $(LIBBLAZESYM_SRC)/include)
1011
LIBBLAZESYM_OBJ := $(abspath $(OUTPUT)/libblazesym.a)
11-
LIBBLAZESYM_HEADER := $(abspath $(OUTPUT)/blazesym.h)
1212
ARCH ?= $(shell uname -m | sed 's/x86_64/x86/' \
1313
| sed 's/arm.*/arm/' \
1414
| sed 's/aarch64/arm64/' \
@@ -20,7 +20,7 @@ VMLINUX := ../../vmlinux/$(ARCH)/vmlinux.h
2020
# Use our own libbpf API headers and Linux UAPI headers distributed with
2121
# libbpf to avoid dependency on system-wide headers, which could be missing or
2222
# outdated
23-
INCLUDES := -I$(OUTPUT) -I../../libbpf/include/uapi -I$(dir $(VMLINUX))
23+
INCLUDES := -I$(OUTPUT) -I../../libbpf/include/uapi -I$(dir $(VMLINUX)) -I$(LIBBLAZESYM_INC)
2424
CFLAGS := -g -Wall
2525
ALL_LDFLAGS := $(LDFLAGS) $(EXTRA_LDFLAGS)
2626

@@ -95,16 +95,12 @@ $(BPFTOOL): | $(BPFTOOL_OUTPUT)
9595

9696

9797
$(LIBBLAZESYM_SRC)/target/release/libblazesym.a::
98-
$(Q)cd $(LIBBLAZESYM_SRC) && $(CARGO) build --features=cheader,dont-generate-test-files --release
98+
$(Q)cd $(LIBBLAZESYM_SRC) && $(CARGO) build --release
9999

100100
$(LIBBLAZESYM_OBJ): $(LIBBLAZESYM_SRC)/target/release/libblazesym.a | $(OUTPUT)
101101
$(call msg,LIB, $@)
102102
$(Q)cp $(LIBBLAZESYM_SRC)/target/release/libblazesym.a $@
103103

104-
$(LIBBLAZESYM_HEADER): $(LIBBLAZESYM_SRC)/target/release/libblazesym.a | $(OUTPUT)
105-
$(call msg,LIB,$@)
106-
$(Q)cp $(LIBBLAZESYM_SRC)/target/release/blazesym.h $@
107-
108104
# Build BPF code
109105
$(OUTPUT)/%.bpf.o: %.bpf.c $(LIBBPF_OBJ) $(wildcard %.h) $(VMLINUX) | $(OUTPUT) $(BPFTOOL)
110106
$(call msg,BPF,$@)
@@ -125,7 +121,7 @@ $(OUTPUT)/%.o: %.c $(wildcard %.h) | $(OUTPUT)
125121
$(call msg,CC,$@)
126122
$(Q)$(CC) $(CFLAGS) $(INCLUDES) -c $(filter %.c,$^) -o $@
127123

128-
$(patsubst %,$(OUTPUT)/%.o,$(BZS_APPS)): $(LIBBLAZESYM_HEADER)
124+
$(patsubst %,$(OUTPUT)/%.o,$(BZS_APPS)): $(LIBBLAZESYM_OBJ)
129125

130126
$(BZS_APPS): $(LIBBLAZESYM_OBJ)
131127

examples/c/profile.c

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
22
/* Copyright (c) 2022 Facebook */
3+
#include <assert.h>
4+
#include <stdint.h>
35
#include <stdio.h>
46
#include <unistd.h>
57
#include <string.h>
@@ -30,25 +32,26 @@ static long perf_event_open(struct perf_event_attr *hw_event, pid_t pid, int cpu
3032
return ret;
3133
}
3234

33-
static struct blazesym *symbolizer;
35+
static struct blaze_symbolizer *symbolizer;
3436

3537
static void show_stack_trace(__u64 *stack, int stack_sz, pid_t pid)
3638
{
37-
const struct blazesym_result *result;
38-
const struct blazesym_csym *sym;
39-
sym_src_cfg src;
39+
const struct blaze_result *result;
40+
const struct blaze_sym *sym;
4041
int i, j;
4142

43+
assert(sizeof(uintptr_t) == sizeof(uint64_t));
44+
4245
if (pid) {
43-
src.src_type = SRC_T_PROCESS;
44-
src.params.process.pid = pid;
46+
struct blaze_symbolize_src_process src = {
47+
.pid = pid,
48+
};
49+
result = blaze_symbolize_process(symbolizer, &src, (const uintptr_t *)stack, stack_sz);
4550
} else {
46-
src.src_type = SRC_T_KERNEL;
47-
src.params.kernel.kallsyms = NULL;
48-
src.params.kernel.kernel_image = NULL;
51+
struct blaze_symbolize_src_kernel src = {};
52+
result = blaze_symbolize_kernel(symbolizer, &src, (const uintptr_t *)stack, stack_sz);
4953
}
5054

51-
result = blazesym_symbolize(symbolizer, &src, 1, (const uint64_t *)stack, stack_sz);
5255

5356
for (i = 0; i < stack_sz; i++) {
5457
if (!result || result->size <= i || !result->entries[i].size) {
@@ -60,11 +63,11 @@ static void show_stack_trace(__u64 *stack, int stack_sz, pid_t pid)
6063
sym = &result->entries[i].syms[0];
6164
if (sym->path && sym->path[0]) {
6265
printf(" %d [<%016llx>] %s+0x%llx %s:%ld\n", i, stack[i],
63-
sym->symbol, stack[i] - sym->start_address, sym->path,
64-
sym->line_no);
66+
sym->symbol, stack[i] - sym->addr, sym->path,
67+
sym->line);
6568
} else {
6669
printf(" %d [<%016llx>] %s+0x%llx\n", i, stack[i], sym->symbol,
67-
stack[i] - sym->start_address);
70+
stack[i] - sym->addr);
6871
}
6972
continue;
7073
}
@@ -74,15 +77,15 @@ static void show_stack_trace(__u64 *stack, int stack_sz, pid_t pid)
7477
sym = &result->entries[i].syms[j];
7578
if (sym->path && sym->path[0]) {
7679
printf(" %s+0x%llx %s:%ld\n", sym->symbol,
77-
stack[i] - sym->start_address, sym->path, sym->line_no);
80+
stack[i] - sym->addr, sym->path, sym->line);
7881
} else {
7982
printf(" %s+0x%llx\n", sym->symbol,
80-
stack[i] - sym->start_address);
83+
stack[i] - sym->addr);
8184
}
8285
}
8386
}
8487

85-
blazesym_result_free(result);
88+
blaze_result_free(result);
8689
}
8790

8891
/* Receive events from the ring buffer. */
@@ -166,7 +169,7 @@ int main(int argc, char *const argv[])
166169
goto cleanup;
167170
}
168171

169-
symbolizer = blazesym_new();
172+
symbolizer = blaze_symbolizer_new();
170173
if (!symbolizer) {
171174
fprintf(stderr, "Fail to create a symbolizer\n");
172175
err = -1;
@@ -235,7 +238,7 @@ int main(int argc, char *const argv[])
235238
}
236239
ring_buffer__free(ring_buf);
237240
profile_bpf__destroy(skel);
238-
blazesym_free(symbolizer);
241+
blaze_symbolizer_free(symbolizer);
239242
free(online_mask);
240243
return -err;
241244
}

examples/rust/Cargo.lock

Lines changed: 1 addition & 53 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/rust/profile/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ license = "GPL-2.0 OR BSD-3-Clause"
77
[dependencies]
88
libbpf-rs = "0.19"
99
nix = "0.24.1"
10-
blazesym = { path = "../../../blazesym", features = ["cheader", "dont-generate-test-files"] }
10+
blazesym = { path = "../../../blazesym", default-features = false, features = ["dont-generate-test-files"] }
1111
libc = "*"
1212
clap = { version = "3.1.18", features = ["derive"] }
1313

examples/rust/profile/src/main.rs

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ mod profile;
1919
use profile::*;
2020

2121
extern crate blazesym;
22-
use blazesym::*;
22+
use blazesym::symbolize;
2323

2424
extern crate libc;
2525

@@ -73,17 +73,30 @@ fn attach_perf_event(
7373
}
7474

7575
// Pid 0 means a kernel space stack.
76-
fn show_stack_trace(stack: &[u64], symbolizer: &BlazeSymbolizer, pid: u32) {
76+
fn show_stack_trace(stack: &[u64], symbolizer: &symbolize::Symbolizer, pid: u32) {
77+
let converted_stack;
78+
// The kernel always reports `u64` addresses, whereas blazesym uses `usize`.
79+
// Convert the stack trace as necessary.
80+
let stack = if mem::size_of::<blazesym::Addr>() != mem::size_of::<u64>() {
81+
converted_stack = stack
82+
.iter()
83+
.copied()
84+
.map(|addr| addr as blazesym::Addr)
85+
.collect::<Vec<_>>();
86+
converted_stack.as_slice()
87+
} else {
88+
// SAFETY: `Addr` has the same size as `u64`, so it can be trivially and
89+
// safely converted.
90+
unsafe { mem::transmute::<_, &[blazesym::Addr]>(stack) }
91+
};
92+
7793
let src = if pid == 0 {
78-
SymbolSrcCfg::Kernel {
79-
kallsyms: None,
80-
kernel_image: None,
81-
}
94+
symbolize::Source::from(symbolize::Kernel::default())
8295
} else {
83-
SymbolSrcCfg::Process { pid: Some(pid) }
96+
symbolize::Source::from(symbolize::Process::new(pid.into()))
8497
};
8598

86-
let syms = symbolizer.symbolize(&[src], stack);
99+
let syms = symbolizer.symbolize(&src, stack).unwrap();
87100
for i in 0..stack.len() {
88101
if syms.len() <= i || syms[i].len() == 0 {
89102
println!(" {} [<{:016x}>]", i, stack[i]);
@@ -92,23 +105,23 @@ fn show_stack_trace(stack: &[u64], symbolizer: &BlazeSymbolizer, pid: u32) {
92105

93106
if syms[i].len() == 1 {
94107
let sym = &syms[i][0];
95-
if !sym.path.is_empty() {
108+
if !sym.path.as_os_str().is_empty() {
96109
println!(
97110
" {} [<{:016x}>] {}+0x{:x} {}:{}",
98111
i,
99112
stack[i],
100113
sym.symbol,
101-
stack[i] - sym.start_address,
102-
sym.path,
103-
sym.line_no
114+
stack[i] - sym.addr,
115+
sym.path.display(),
116+
sym.line
104117
);
105118
} else {
106119
println!(
107120
" {} [<{:016x}>] {}+0x{}",
108121
i,
109122
stack[i],
110123
sym.symbol,
111-
stack[i] - sym.start_address
124+
stack[i] - sym.addr
112125
);
113126
}
114127
continue;
@@ -117,22 +130,22 @@ fn show_stack_trace(stack: &[u64], symbolizer: &BlazeSymbolizer, pid: u32) {
117130
println!(" {} [<{:016x}>]", i, stack[i]);
118131

119132
for sym in &syms[i] {
120-
if !sym.path.is_empty() {
133+
if !sym.path.as_os_str().is_empty() {
121134
println!(
122135
" {}+0x{:x} {}:{}",
123136
sym.symbol,
124-
stack[i] - sym.start_address,
125-
sym.path,
126-
sym.line_no
137+
stack[i] - sym.addr,
138+
sym.path.display(),
139+
sym.line
127140
);
128141
} else {
129-
println!(" {}+0x{}", sym.symbol, stack[i] - sym.start_address);
142+
println!(" {}+0x{}", sym.symbol, stack[i] - sym.addr);
130143
}
131144
}
132145
}
133146
}
134147

135-
fn event_handler(symbolizer: &BlazeSymbolizer, data: &[u8]) -> ::std::os::raw::c_int {
148+
fn event_handler(symbolizer: &symbolize::Symbolizer, data: &[u8]) -> ::std::os::raw::c_int {
136149
if data.len() != mem::size_of::<stacktrace_event>() {
137150
eprintln!(
138151
"Invalid size {} != {}",
@@ -190,7 +203,7 @@ fn main() -> Result<(), Error> {
190203
let args = Args::parse();
191204
let freq = if args.freq < 1 { 1 } else { args.freq };
192205

193-
let symbolizer = BlazeSymbolizer::new()?;
206+
let symbolizer = symbolize::Symbolizer::new();
194207

195208
let skel_builder = ProfileSkelBuilder::default();
196209
let open_skel = skel_builder.open().unwrap();

0 commit comments

Comments
 (0)