Skip to content

Commit 838e986

Browse files
d-e-s-oanakryiko
authored andcommitted
deps: update blazesym submodule to v0.2.0-alpha.5
Update the blazesym submodule to version 0.2.0-alpha.5. Also change the dependency to using the default features, which includes DWARF support and transparent symbol demangling. The profile example is overhauled to use the changed APIs and improve the code to be less redundant. Signed-off-by: Daniel Müller <deso@posteo.net>
1 parent 90fd5fc commit 838e986

File tree

5 files changed

+125
-66
lines changed

5 files changed

+125
-66
lines changed

blazesym

Submodule blazesym updated 72 files

examples/c/profile.c

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,32 +55,36 @@ static void show_stack_trace(__u64 *stack, int stack_sz, pid_t pid)
5555

5656
for (i = 0; i < stack_sz; i++) {
5757
if (!result || result->size <= i || !result->entries[i].size) {
58-
printf(" %d [<%016llx>]\n", i, stack[i]);
58+
printf(" %2d [<%016llx>]\n", i, stack[i]);
5959
continue;
6060
}
6161

6262
if (result->entries[i].size == 1) {
6363
sym = &result->entries[i].syms[0];
64-
if (sym->path && sym->path[0]) {
65-
printf(" %d [<%016llx>] %s+0x%llx %s:%ld\n", i, stack[i],
66-
sym->symbol, stack[i] - sym->addr, sym->path,
67-
sym->line);
64+
65+
if (sym->dir && sym->dir[0] != '\0' && sym->file && sym->file[0] != '\0') {
66+
printf(" %2d [<%016llx>] %s+0x%lx %s/%s:%u\n", i, stack[i],
67+
sym->name, sym->offset, sym->dir, sym->file, sym->line);
68+
} else if (sym->file && sym->file[0] != '\0') {
69+
printf(" %2d [<%016llx>] %s+0x%lx %s:%u\n", i, stack[i],
70+
sym->name, sym->offset, sym->file, sym->line);
6871
} else {
69-
printf(" %d [<%016llx>] %s+0x%llx\n", i, stack[i], sym->symbol,
70-
stack[i] - sym->addr);
72+
printf(" %2d [<%016llx>] %s+0x%lx\n", i, stack[i], sym->name, sym->offset);
7173
}
7274
continue;
7375
}
7476

75-
printf(" %d [<%016llx>]\n", i, stack[i]);
77+
printf(" %2d [<%016llx>]\n", i, stack[i]);
7678
for (j = 0; j < result->entries[i].size; j++) {
7779
sym = &result->entries[i].syms[j];
78-
if (sym->path && sym->path[0]) {
79-
printf(" %s+0x%llx %s:%ld\n", sym->symbol,
80-
stack[i] - sym->addr, sym->path, sym->line);
80+
if (sym->dir && sym->dir[0] != '\0' && sym->file && sym->file[0] != '\0') {
81+
printf(" %s+0x%lx %s/%s:%u\n", sym->name,
82+
sym->offset, sym->dir, sym->file, sym->line);
83+
} else if (sym->file && sym->file[0] != '\0') {
84+
printf(" %s+0x%lx %s:%u\n", sym->name,
85+
sym->offset, sym->file, sym->line);
8186
} else {
82-
printf(" %s+0x%llx\n", sym->symbol,
83-
stack[i] - sym->addr);
87+
printf(" %s+0x%lx\n", sym->name, sym->offset);
8488
}
8589
}
8690
}

examples/rust/Cargo.lock

Lines changed: 73 additions & 2 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
@@ -6,7 +6,7 @@ license = "GPL-2.0 OR BSD-3-Clause"
66
edition = "2021"
77

88
[dependencies]
9-
blazesym = { path = "../../../blazesym", default-features = false, features = ["dont-generate-test-files"] }
9+
blazesym = { path = "../../../blazesym" }
1010
clap = { version = "4.0", features = ["derive"] }
1111
libbpf-rs = "0.19"
1212
libc = "*"

examples/rust/profile/src/main.rs

Lines changed: 33 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
use std::u64;
2-
3-
use std::boxed::Box;
41
use std::io::Error;
52
use std::mem;
6-
use std::result::Result;
3+
use std::path::PathBuf;
74
use std::time::Duration;
85

96
use blazesym::symbolize;
@@ -93,53 +90,40 @@ fn show_stack_trace(stack: &[u64], symbolizer: &symbolize::Symbolizer, pid: u32)
9390
Ok(syms) => syms,
9491
Err(err) => {
9592
eprintln!(" failed to symbolize addresses: {err:#}");
96-
return
97-
},
98-
};
99-
100-
for i in 0..stack.len() {
101-
if syms.len() <= i || syms[i].len() == 0 {
102-
println!(" {} [<{:016x}>]", i, stack[i]);
103-
continue;
104-
}
105-
106-
if syms[i].len() == 1 {
107-
let sym = &syms[i][0];
108-
if !sym.path.as_os_str().is_empty() {
109-
println!(
110-
" {} [<{:016x}>] {}+0x{:x} {}:{}",
111-
i,
112-
stack[i],
113-
sym.symbol,
114-
stack[i] - sym.addr,
115-
sym.path.display(),
116-
sym.line
117-
);
118-
} else {
119-
println!(
120-
" {} [<{:016x}>] {}+0x{}",
121-
i,
122-
stack[i],
123-
sym.symbol,
124-
stack[i] - sym.addr
125-
);
126-
}
127-
continue;
93+
return;
12894
}
95+
};
12996

130-
println!(" {} [<{:016x}>]", i, stack[i]);
131-
132-
for sym in &syms[i] {
133-
if !sym.path.as_os_str().is_empty() {
134-
println!(
135-
" {}+0x{:x} {}:{}",
136-
sym.symbol,
137-
stack[i] - sym.addr,
138-
sym.path.display(),
139-
sym.line
140-
);
141-
} else {
142-
println!(" {}+0x{}", sym.symbol, stack[i] - sym.addr);
97+
for (i, (addr, syms)) in stack.iter().zip(syms).enumerate() {
98+
let mut addr_fmt = format!(" {i:2} [<{addr:016x}>]");
99+
if syms.is_empty() {
100+
println!("{addr_fmt}")
101+
} else {
102+
for (i, sym) in syms.into_iter().enumerate() {
103+
if i == 1 {
104+
addr_fmt = addr_fmt.replace(|_c| true, " ");
105+
}
106+
107+
let path = match (sym.dir, sym.file) {
108+
(Some(dir), Some(file)) => Some(dir.join(file)),
109+
(dir, file) => dir.or_else(|| file.map(PathBuf::from)),
110+
};
111+
112+
let src_loc = if let (Some(path), Some(line)) = (path, sym.line) {
113+
if let Some(col) = sym.column {
114+
format!(" {}:{line}:{col}", path.display())
115+
} else {
116+
format!(" {}:{line}", path.display())
117+
}
118+
} else {
119+
String::new()
120+
};
121+
122+
let symbolize::Sym {
123+
name, addr, offset, ..
124+
} = sym;
125+
126+
println!("{addr_fmt} {name} @ {addr:#x}+{offset:#x}{src_loc}");
143127
}
144128
}
145129
}

0 commit comments

Comments
 (0)