summaryrefslogtreecommitdiff
path: root/rust/examples/dwarf/dwarf_import/src/lib.rs
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2024-06-06 15:41:48 -0400
committerJosh Ferrell <josh@vector35.com>2024-06-06 15:41:48 -0400
commit783a3cb0f4c2f2943653293937010b3de1aaf900 (patch)
treefb9090dd138d4058b24b3e286d3647a95a651b13 /rust/examples/dwarf/dwarf_import/src/lib.rs
parent7dd6f311b81460478b2ffc2726bfd3cb0e62c9ed (diff)
Support for local debug directories
Diffstat (limited to 'rust/examples/dwarf/dwarf_import/src/lib.rs')
-rw-r--r--rust/examples/dwarf/dwarf_import/src/lib.rs42
1 files changed, 36 insertions, 6 deletions
diff --git a/rust/examples/dwarf/dwarf_import/src/lib.rs b/rust/examples/dwarf/dwarf_import/src/lib.rs
index c8b48792..1f4fce4d 100644
--- a/rust/examples/dwarf/dwarf_import/src/lib.rs
+++ b/rust/examples/dwarf/dwarf_import/src/lib.rs
@@ -270,7 +270,9 @@ struct DWARFParser;
impl CustomDebugInfoParser for DWARFParser {
fn is_valid(&self, view: &BinaryView) -> bool {
- dwarfreader::is_valid(view) || dwarfreader::can_use_debuginfod(view)
+ dwarfreader::is_valid(view) ||
+ dwarfreader::can_use_build_id(view) ||
+ dwarfreader::can_use_debuginfod(view)
}
fn parse_info(
@@ -280,13 +282,29 @@ impl CustomDebugInfoParser for DWARFParser {
debug_file: &BinaryView,
progress: Box<dyn Fn(usize, usize) -> Result<(), ()>>,
) -> bool {
- let external_file = if !dwarfreader::is_valid(bv) && dwarfreader::can_use_debuginfod(bv) {
- if let Ok(debug_view) = helpers::download_debug_info(bv) {
- Some(debug_view)
- } else {
+ let external_file = if !dwarfreader::is_valid(bv) {
+ if dwarfreader::can_use_build_id(bv) {
+ if let Ok(Some(debug_view)) = helpers::load_debug_info_for_build_id(bv) {
+ Some(debug_view)
+ }
+ else {
+ if dwarfreader::can_use_debuginfod(bv) {
+ if let Ok(debug_view) = helpers::download_debug_info(bv) {
+ Some(debug_view)
+ } else {
+ None
+ }
+ }
+ else {
+ None
+ }
+ }
+ }
+ else {
None
}
- } else {
+ }
+ else {
None
};
@@ -333,6 +351,18 @@ pub extern "C" fn CorePluginInit() -> bool {
}"#,
);
+ settings.register_setting_json(
+ "analysis.debugInfo.debugDirectories",
+ r#"{
+ "title" : "Debug File Directories",
+ "type" : "array",
+ "elementType" : "string",
+ "default" : [],
+ "description" : "Paths to folder containing debug info stored by build id.",
+ "ignore" : []
+ }"#,
+ );
+
DebugInfoParser::register("DWARF", DWARFParser {});
true
}