Comments (6)
For a smaller test case, compile the following using g++ -g -Os -std=gnu++11 -fno-exceptions
#include <iostream>
struct Foo { Foo() { std::cout << "Foo\n"; } };
typedef struct { Foo foo; } Bar;
int main() { new Bar(); }
The constructor for Bar
is missing a name in the DWARF. Sometimes the compiler gives it a name, but not with those specific compilation options. Seems like a compiler bug? We should still handle it by ignoring that subroutine, instead of raising an error.
from addr2line.
We're in the process of moving to goblin
for object file needs -- will need STR + test case to see if this panic still reproduces once we've moved this crate over as well.
Thanks @mstange !
from addr2line.
I've experimentally updated the object
dependency in addr2line
from 0.1.0
to 0.3.0
, and now it's no longer panicking, but the mapping returns an error:
Compiling addr2line v0.3.0 (file:///home/mstange/code/addr2line)
Compiling addr2line-libxul v0.1.0 (file:///home/mstange/code/addr2line-libxul)
Finished dev [unoptimized + debuginfo] target(s) in 5.66 secs
Running `target/debug/addr2line-libxul`
thread 'main' panicked at 'Mapping libxul.so failed: Error(Msg("failed to analyze debug information"), State { next_error: Some(Error(Msg("encountered invalid compilation unit"), State { next_error: Some(Error(InvalidDebugSymbols(SubroutineMissingName(483643027, 3111142)), State { next_error: None, backtrace: Some(stack backtrace:
0: 0x5628b7fb0b94 - backtrace::backtrace::libunwind::trace
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.2/src/backtrace/libunwind.rs:53
- backtrace::backtrace::trace<closure>
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.2/src/backtrace/mod.rs:42
1: 0x5628b7fb0f5f - backtrace::capture::{{impl}}::new
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.2/src/capture.rs:64
2: 0x5628b7fa5b9c - error_chain::make_backtrace
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/error-chain-0.7.2/src/lib.rs:411
3: 0x5628b7fa5c5f - error_chain::{{impl}}::default
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/error-chain-0.7.2/src/lib.rs:462
4: 0x5628b7f1336c - addr2line::errors::{{impl}}::from_kind
at /home/mstange/code/addr2line-libxul/<error_chain_processed macros>:48
5: 0x5628b7f13659 - addr2line::errors::{{impl}}::from
at /home/mstange/code/addr2line-libxul/<error_chain_processed macros>:8
6: 0x5628b7f0aa38 - addr2line::{{impl}}::parse<gimli::endianity::LittleEndian>
at /home/mstange/code/addr2line/src/lib.rs:732
7: 0x5628b7effc95 - addr2line::{{impl}}::new<gimli::endianity::LittleEndian>
at /home/mstange/code/addr2line/src/lib.rs:287
8: 0x5628b7efeeab - addr2line::{{impl}}::symbolicate
at /home/mstange/code/addr2line/src/lib.rs:250
9: 0x5628b7efe8ed - addr2line::{{impl}}::new_inner::{{closure}}::{{closure}}
at /home/mstange/code/addr2line/src/lib.rs:229
10: 0x5628b7ebfa9b - owning_ref::{{impl}}::try_new<alloc::boxed::Box<object::elf::Elf>,alloc::boxed::Box<addr2line::EndianDebugInfo>,closure,addr2line::errors::Error>
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/owning_ref-0.2.4/src/lib.rs:475
11: 0x5628b7efebd0 - addr2line::{{impl}}::new_inner::{{closure}}
at /home/mstange/code/addr2line/src/lib.rs:227
12: 0x5628b7ebf7bb - owning_ref::{{impl}}::try_new<alloc::boxed::Box<memmap::Mmap>,alloc::boxed::Box<addr2line::MmapDerived>,closure,addr2line::errors::Error>
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/owning_ref-0.2.4/src/lib.rs:475
13: 0x5628b7efe4e5 - addr2line::{{impl}}::new_inner
at /home/mstange/code/addr2line/src/lib.rs:223
14: 0x5628b7e5f941 - addr2line::{{impl}}::build<&str>
at /home/mstange/code/addr2line/src/lib.rs:173
15: 0x5628b7e5fa17 - addr2line_libxul::main
at src/main.rs:4
16: 0x5628b7fd63dc - panic_unwind::__rust_maybe_catch_panic
at /checkout/src/libpanic_unwind/lib.rs:98
17: 0x5628b7fcfbf4 - std::panicking::try<(),closure>
at /checkout/src/libstd/panicking.rs:458
- std::panic::catch_unwind<closure,()>
at /checkout/src/libstd/panic.rs:361
- std::rt::lang_start
at /checkout/src/libstd/rt.rs:59
18: 0x5628b7e5fbd2 - main
19: 0x7ff6e19ba3f0 - __libc_start_main
20: 0x5628b7e59409 - _start
21: 0x0 - <unknown>) })), backtrace: Some(stack backtrace:
0: 0x5628b7fb0b94 - backtrace::backtrace::libunwind::trace
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.2/src/backtrace/libunwind.rs:53
- backtrace::backtrace::trace<closure>
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.2/src/backtrace/mod.rs:42
1: 0x5628b7fb0f5f - backtrace::capture::{{impl}}::new
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.2/src/capture.rs:64
2: 0x5628b7fa5b9c - error_chain::make_backtrace
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/error-chain-0.7.2/src/lib.rs:411
3: 0x5628b7fa5c5f - error_chain::{{impl}}::default
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/error-chain-0.7.2/src/lib.rs:462
4: 0x5628b7f1336c - addr2line::errors::{{impl}}::from_kind
at /home/mstange/code/addr2line-libxul/<error_chain_processed macros>:48
5: 0x5628b7f13659 - addr2line::errors::{{impl}}::from
at /home/mstange/code/addr2line-libxul/<error_chain_processed macros>:8
6: 0x5628b7f0aa38 - addr2line::{{impl}}::parse<gimli::endianity::LittleEndian>
at /home/mstange/code/addr2line/src/lib.rs:732
7: 0x5628b7effc95 - addr2line::{{impl}}::new<gimli::endianity::LittleEndian>
at /home/mstange/code/addr2line/src/lib.rs:287
8: 0x5628b7efeeab - addr2line::{{impl}}::symbolicate
at /home/mstange/code/addr2line/src/lib.rs:250
9: 0x5628b7efe8ed - addr2line::{{impl}}::new_inner::{{closure}}::{{closure}}
at /home/mstange/code/addr2line/src/lib.rs:229
10: 0x5628b7ebfa9b - owning_ref::{{impl}}::try_new<alloc::boxed::Box<object::elf::Elf>,alloc::boxed::Box<addr2line::EndianDebugInfo>,closure,addr2line::errors::Error>
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/owning_ref-0.2.4/src/lib.rs:475
11: 0x5628b7efebd0 - addr2line::{{impl}}::new_inner::{{closure}}
at /home/mstange/code/addr2line/src/lib.rs:227
12: 0x5628b7ebf7bb - owning_ref::{{impl}}::try_new<alloc::boxed::Box<memmap::Mmap>,alloc::boxed::Box<addr2line::MmapDerived>,closure,addr2line::errors::Error>
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/owning_ref-0.2.4/src/lib.rs:475
13: 0x5628b7efe4e5 - addr2line::{{impl}}::new_inner
at /home/mstange/code/addr2line/src/lib.rs:223
14: 0x5628b7e5f941 - addr2line::{{impl}}::build<&str>
at /home/mstange/code/addr2line/src/lib.rs:173
15: 0x5628b7e5fa17 - addr2line_libxul::main
at src/main.rs:4
16: 0x5628b7fd63dc - panic_unwind::__rust_maybe_catch_panic
at /checkout/src/libpanic_unwind/lib.rs:98
17: 0x5628b7fcfbf4 - std::panicking::try<(),closure>
at /checkout/src/libstd/panicking.rs:458
- std::panic::catch_unwind<closure,()>
at /checkout/src/libstd/panic.rs:361
- std::rt::lang_start
at /checkout/src/libstd/rt.rs:59
18: 0x5628b7e5fbd2 - main
19: 0x7ff6e19ba3f0 - __libc_start_main
20: 0x5628b7e59409 - _start
21: 0x0 - <unknown>) })), backtrace: Some(stack backtrace:
0: 0x5628b7fb0b94 - backtrace::backtrace::libunwind::trace
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.2/src/backtrace/libunwind.rs:53
- backtrace::backtrace::trace<closure>
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.2/src/backtrace/mod.rs:42
1: 0x5628b7fb0f5f - backtrace::capture::{{impl}}::new
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.2/src/capture.rs:64
2: 0x5628b7fa5b9c - error_chain::make_backtrace
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/error-chain-0.7.2/src/lib.rs:411
3: 0x5628b7fa5c5f - error_chain::{{impl}}::default
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/error-chain-0.7.2/src/lib.rs:462
4: 0x5628b7f1336c - addr2line::errors::{{impl}}::from_kind
at /home/mstange/code/addr2line-libxul/<error_chain_processed macros>:48
5: 0x5628b7f13659 - addr2line::errors::{{impl}}::from
at /home/mstange/code/addr2line-libxul/<error_chain_processed macros>:8
6: 0x5628b7f0aa38 - addr2line::{{impl}}::parse<gimli::endianity::LittleEndian>
at /home/mstange/code/addr2line/src/lib.rs:732
7: 0x5628b7effc95 - addr2line::{{impl}}::new<gimli::endianity::LittleEndian>
at /home/mstange/code/addr2line/src/lib.rs:287
8: 0x5628b7efeeab - addr2line::{{impl}}::symbolicate
at /home/mstange/code/addr2line/src/lib.rs:250
9: 0x5628b7efe8ed - addr2line::{{impl}}::new_inner::{{closure}}::{{closure}}
at /home/mstange/code/addr2line/src/lib.rs:229
10: 0x5628b7ebfa9b - owning_ref::{{impl}}::try_new<alloc::boxed::Box<object::elf::Elf>,alloc::boxed::Box<addr2line::EndianDebugInfo>,closure,addr2line::errors::Error>
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/owning_ref-0.2.4/src/lib.rs:475
11: 0x5628b7efebd0 - addr2line::{{impl}}::new_inner::{{closure}}
at /home/mstange/code/addr2line/src/lib.rs:227
12: 0x5628b7ebf7bb - owning_ref::{{impl}}::try_new<alloc::boxed::Box<memmap::Mmap>,alloc::boxed::Box<addr2line::MmapDerived>,closure,addr2line::errors::Error>
at /home/mstange/.cargo/registry/src/github.com-1ecc6299db9ec823/owning_ref-0.2.4/src/lib.rs:475
13: 0x5628b7efe4e5 - addr2line::{{impl}}::new_inner
at /home/mstange/code/addr2line/src/lib.rs:223
14: 0x5628b7e5f941 - addr2line::{{impl}}::build<&str>
at /home/mstange/code/addr2line/src/lib.rs:173
15: 0x5628b7e5fa17 - addr2line_libxul::main
at src/main.rs:4
16: 0x5628b7fd63dc - panic_unwind::__rust_maybe_catch_panic
at /checkout/src/libpanic_unwind/lib.rs:98
17: 0x5628b7fcfbf4 - std::panicking::try<(),closure>
at /checkout/src/libstd/panicking.rs:458
- std::panic::catch_unwind<closure,()>
at /checkout/src/libstd/panic.rs:361
- std::rt::lang_start
at /checkout/src/libstd/rt.rs:59
18: 0x5628b7e5fbd2 - main
19: 0x7ff6e19ba3f0 - __libc_start_main
20: 0x5628b7e59409 - _start
21: 0x0 - <unknown>) })', /checkout/src/libcore/result.rs:860:4
stack backtrace:
0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace
at /checkout/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::_print
at /checkout/src/libstd/sys_common/backtrace.rs:71
2: std::panicking::default_hook::{{closure}}
at /checkout/src/libstd/sys_common/backtrace.rs:60
at /checkout/src/libstd/panicking.rs:380
3: std::panicking::default_hook
at /checkout/src/libstd/panicking.rs:396
4: std::panicking::rust_panic_with_hook
at /checkout/src/libstd/panicking.rs:611
5: std::panicking::begin_panic_new
at /checkout/src/libstd/panicking.rs:553
6: std::panicking::begin_panic_fmt
at /checkout/src/libstd/panicking.rs:521
7: rust_begin_unwind
at /checkout/src/libstd/panicking.rs:497
8: core::panicking::panic_fmt
at /checkout/src/libcore/panicking.rs:92
9: core::result::unwrap_failed
at /checkout/src/libcore/macros.rs:31
10: <core::result::Result<T, E>>::expect
at /checkout/src/libcore/result.rs:762
11: addr2line_libxul::main
at src/main.rs:4
12: __rust_maybe_catch_panic
at /checkout/src/libpanic_unwind/lib.rs:98
13: std::rt::lang_start
at /checkout/src/libstd/panicking.rs:458
at /checkout/src/libstd/panic.rs:361
at /checkout/src/libstd/rt.rs:59
14: main
15: __libc_start_main
16: _start
And that's because resolve_name
falls through all the cases and reaches the Ok(None)
at the end for what seems like all programs.
from addr2line.
Oh, this new error only starts appearing if I add .with_functions()
. With my original code (using the default options), mapping succeeds but locate
returns Ok(None)
.
from addr2line.
Seems like a compiler bug?
Care to file a bug with gcc?
We should still handle it by ignoring that subroutine, instead of raising an error.
👍
from addr2line.
Care to file a bug with gcc?
I gave up on that, they don't make it easy to file bugs, and this one seems minor.
from addr2line.
Related Issues (20)
- Promote the CLI example to a `bin` crate HOT 2
- No line information found in jitted-1234-56.so files generated by perf inject --jit HOT 5
- Can't resolve libc symbol - which is found by C addr2line HOT 4
- New release HOT 3
- Remove `Context::new` HOT 1
- Tests are failing with nightly rust due to packed debuginfo HOT 4
- Errors when parsing DWARF from Wasm objects HOT 20
- Broken with clang-16 debug info on Linux HOT 2
- How to locate a symbol using this crate? HOT 4
- There is a bug when ```find_location_range``` is used to parse an relocatable object file. HOT 14
- Fails consistently with "failed to process type: 68 [Numerical result out of range]" HOT 5
- Use `gimli::UnitRef`
- Replace LazyCell with core::std::OnceCell
- Promote the speed of Gimli-based addr2line HOT 9
- Missing function names (due to overlapping unit ranges?) on debug files of `ls` HOT 2
- Add new compatibility mode to binary, to be able to replace llvm-symbolizer/addr2line HOT 1
- Handle discriminators
- Lazy abbreviations parsing
- Differences from LLVM output HOT 1
- InvalidAddressRange on a special address should not make process crash or exit HOT 48
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from addr2line.