From 3d76cbdf34f5fe5e5400ccb10633c9969587b193 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Mon, 26 Jul 2021 11:00:23 -0700 Subject: [PATCH] Update `gimli` to 0.25; `addr2line` to 0.16 --- Cargo.lock | 33 ++++++++++++++----- cranelift/codegen/Cargo.toml | 2 +- cranelift/filetests/Cargo.toml | 2 +- crates/debug/Cargo.toml | 2 +- crates/debug/src/gc.rs | 4 ++- crates/debug/src/transform/attr.rs | 4 ++- crates/debug/src/transform/mod.rs | 1 + .../debug/src/transform/range_info_builder.rs | 4 +++ crates/debug/src/transform/unit.rs | 11 +++++-- crates/environ/Cargo.toml | 2 +- crates/environ/src/module_environ.rs | 6 ++-- crates/jit/Cargo.toml | 4 +-- crates/profiling/Cargo.toml | 2 +- 13 files changed, 54 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4484267fb0..f2024c767c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,7 +8,16 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03345e98af8f3d786b6d9f656ccfa6ac316d954e92bc4841f0bba20789d5fb5a" dependencies = [ - "gimli", + "gimli 0.24.0", +] + +[[package]] +name = "addr2line" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" +dependencies = [ + "gimli 0.25.0", ] [[package]] @@ -171,7 +180,7 @@ version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7815ea54e4d821e791162e078acbebfd6d8c8939cd559c9335dceb1c8ca7282" dependencies = [ - "addr2line", + "addr2line 0.15.1", "cc", "cfg-if 1.0.0", "libc", @@ -582,7 +591,7 @@ dependencies = [ "cranelift-codegen-shared", "cranelift-entity", "criterion", - "gimli", + "gimli 0.25.0", "hashbrown", "log", "peepmatic", @@ -631,7 +640,7 @@ dependencies = [ "cranelift-reader", "file-per-thread-logger", "filecheck", - "gimli", + "gimli 0.25.0", "log", "memmap2", "num_cpus", @@ -1343,6 +1352,12 @@ name = "gimli" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189" + +[[package]] +name = "gimli" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" dependencies = [ "fallible-iterator", "indexmap", @@ -3662,7 +3677,7 @@ name = "wasmtime-debug" version = "0.28.0" dependencies = [ "anyhow", - "gimli", + "gimli 0.25.0", "more-asserts", "object", "target-lexicon", @@ -3679,7 +3694,7 @@ dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-wasm", - "gimli", + "gimli 0.25.0", "indexmap", "log", "more-asserts", @@ -3739,7 +3754,7 @@ dependencies = [ name = "wasmtime-jit" version = "0.28.0" dependencies = [ - "addr2line", + "addr2line 0.16.0", "anyhow", "cfg-if 1.0.0", "cranelift-codegen", @@ -3747,7 +3762,7 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli", + "gimli 0.25.0", "log", "more-asserts", "object", @@ -3795,7 +3810,7 @@ version = "0.28.0" dependencies = [ "anyhow", "cfg-if 1.0.0", - "gimli", + "gimli 0.25.0", "ittapi-rs", "lazy_static", "libc", diff --git a/cranelift/codegen/Cargo.toml b/cranelift/codegen/Cargo.toml index 943e76e468..29ecc2de4b 100644 --- a/cranelift/codegen/Cargo.toml +++ b/cranelift/codegen/Cargo.toml @@ -21,7 +21,7 @@ target-lexicon = "0.12" log = { version = "0.4.6", default-features = false } serde = { version = "1.0.94", features = ["derive"], optional = true } bincode = { version = "1.2.1", optional = true } -gimli = { version = "0.24.0", default-features = false, features = ["write"], optional = true } +gimli = { version = "0.25.0", default-features = false, features = ["write"], optional = true } smallvec = { version = "1.6.1" } peepmatic = { path = "../peepmatic", optional = true, version = "0.75.0" } peepmatic-traits = { path = "../peepmatic/crates/traits", optional = true, version = "0.75.0" } diff --git a/cranelift/filetests/Cargo.toml b/cranelift/filetests/Cargo.toml index 6fb289d0a1..48ee89c330 100644 --- a/cranelift/filetests/Cargo.toml +++ b/cranelift/filetests/Cargo.toml @@ -18,7 +18,7 @@ cranelift-reader = { path = "../reader", version = "0.75.0" } cranelift-preopt = { path = "../preopt", version = "0.75.0" } file-per-thread-logger = "0.1.2" filecheck = "0.5.0" -gimli = { version = "0.24.0", default-features = false, features = ["read"] } +gimli = { version = "0.25.0", default-features = false, features = ["read"] } log = "0.4.6" memmap2 = "0.2.1" num_cpus = "1.8.0" diff --git a/crates/debug/Cargo.toml b/crates/debug/Cargo.toml index e9357cf204..20b2623d58 100644 --- a/crates/debug/Cargo.toml +++ b/crates/debug/Cargo.toml @@ -11,7 +11,7 @@ keywords = ["webassembly", "wasm", "debuginfo"] edition = "2018" [dependencies] -gimli = "0.24.0" +gimli = "0.25.0" wasmparser = "0.79" object = { version = "0.25.0", default-features = false, features = ["read_core", "elf", "write"] } wasmtime-environ = { path = "../environ", version = "0.28.0" } diff --git a/crates/debug/src/gc.rs b/crates/debug/src/gc.rs index 491d585799..0763119aee 100644 --- a/crates/debug/src/gc.rs +++ b/crates/debug/src/gc.rs @@ -120,7 +120,9 @@ fn has_valid_code_range>( constants::DW_TAG_subprogram => { if let Some(ranges_attr) = die.attr_value(constants::DW_AT_ranges)? { let offset = match ranges_attr { - read::AttributeValue::RangeListsRef(val) => val, + read::AttributeValue::RangeListsRef(val) => { + dwarf.ranges_offset_from_raw(unit, val) + } read::AttributeValue::DebugRngListsIndex(index) => { dwarf.ranges_offset(unit, index)? } diff --git a/crates/debug/src/transform/attr.rs b/crates/debug/src/transform/attr.rs index cb654fe790..b3a018455a 100644 --- a/crates/debug/src/transform/attr.rs +++ b/crates/debug/src/transform/attr.rs @@ -36,6 +36,7 @@ fn is_exprloc_to_loclist_allowed(attr_name: gimli::constants::DwAt) -> bool { } pub(crate) fn clone_die_attributes<'a, R>( + dwarf: &gimli::Dwarf, unit: &Unit, entry: &DebuggingInformationEntry, context: &DebugInputContext, @@ -63,7 +64,7 @@ where // FIXME for CU: currently address_transform operate on a single // function range, and when CU spans multiple ranges the // transformation may be incomplete. - RangeInfoBuilder::from(unit, entry, context, cu_low_pc)? + RangeInfoBuilder::from(dwarf, unit, entry, context, cu_low_pc)? }; range_info.build(addr_tr, out_unit, current_scope_id); @@ -139,6 +140,7 @@ where write::AttributeValue::StringRef(out_strings.add(s)) } AttributeValue::RangeListsRef(r) => { + let r = dwarf.ranges_offset_from_raw(unit, r); let range_info = RangeInfoBuilder::from_ranges_ref(unit, r, context, cu_low_pc)?; let range_list_id = range_info.build_ranges(addr_tr, &mut out_unit.ranges); write::AttributeValue::RangeListRef(range_list_id) diff --git a/crates/debug/src/transform/mod.rs b/crates/debug/src/transform/mod.rs index 2f759ecc34..e6b6bb431f 100644 --- a/crates/debug/src/transform/mod.rs +++ b/crates/debug/src/transform/mod.rs @@ -85,6 +85,7 @@ pub fn transform_dwarf( while let Some(header) = iter.next().unwrap_or(None) { let unit = di.dwarf.unit(header)?; if let Some((id, ref_map, pending_refs)) = clone_unit( + &di.dwarf, unit, &context, &addr_tr, diff --git a/crates/debug/src/transform/range_info_builder.rs b/crates/debug/src/transform/range_info_builder.rs index 23c2b33e3d..13176b60b4 100644 --- a/crates/debug/src/transform/range_info_builder.rs +++ b/crates/debug/src/transform/range_info_builder.rs @@ -15,6 +15,7 @@ pub(crate) enum RangeInfoBuilder { impl RangeInfoBuilder { pub(crate) fn from( + dwarf: &gimli::Dwarf, unit: &Unit, entry: &DebuggingInformationEntry, context: &DebugInputContext, @@ -24,6 +25,7 @@ impl RangeInfoBuilder { R: Reader, { if let Some(AttributeValue::RangeListsRef(r)) = entry.attr_value(gimli::DW_AT_ranges)? { + let r = dwarf.ranges_offset_from_raw(unit, r); return RangeInfoBuilder::from_ranges_ref(unit, r, context, cu_low_pc); }; @@ -80,6 +82,7 @@ impl RangeInfoBuilder { } pub(crate) fn from_subprogram_die( + dwarf: &gimli::Dwarf, unit: &Unit, entry: &DebuggingInformationEntry, context: &DebugInputContext, @@ -100,6 +103,7 @@ impl RangeInfoBuilder { } else if let Some(AttributeValue::RangeListsRef(r)) = entry.attr_value(gimli::DW_AT_ranges)? { + let r = dwarf.ranges_offset_from_raw(unit, r); let mut ranges = context.rnglists.ranges( r, unit_encoding, diff --git a/crates/debug/src/transform/unit.rs b/crates/debug/src/transform/unit.rs index 655d7738ee..d46e4085fb 100644 --- a/crates/debug/src/transform/unit.rs +++ b/crates/debug/src/transform/unit.rs @@ -244,6 +244,7 @@ where } pub(crate) fn clone_unit<'a, R>( + dwarf: &gimli::Dwarf, unit: Unit, context: &DebugInputContext, addr_tr: &'a AddressTransform, @@ -302,6 +303,7 @@ where }; clone_die_attributes( + dwarf, &unit, entry, context, @@ -369,8 +371,9 @@ where current_scope_ranges.update(new_stack_len); current_value_range.update(new_stack_len); let range_builder = if entry.tag() == gimli::DW_TAG_subprogram { - let range_builder = - RangeInfoBuilder::from_subprogram_die(&unit, entry, context, addr_tr, cu_low_pc)?; + let range_builder = RangeInfoBuilder::from_subprogram_die( + dwarf, &unit, entry, context, addr_tr, cu_low_pc, + )?; if let RangeInfoBuilder::Function(func_index) = range_builder { if let Some(frame_info) = get_function_frame_info(memory_offset, funcs, func_index) { @@ -387,7 +390,8 @@ where let high_pc = entry.attr_value(gimli::DW_AT_high_pc)?; let ranges = entry.attr_value(gimli::DW_AT_ranges)?; if high_pc.is_some() || ranges.is_some() { - let range_builder = RangeInfoBuilder::from(&unit, entry, context, cu_low_pc)?; + let range_builder = + RangeInfoBuilder::from(dwarf, &unit, entry, context, cu_low_pc)?; current_scope_ranges.push(new_stack_len, range_builder.get_ranges(addr_tr)); Some(range_builder) } else { @@ -443,6 +447,7 @@ where die_ref_map.insert(entry.offset(), die_id); clone_die_attributes( + dwarf, &unit, entry, context, diff --git a/crates/environ/Cargo.toml b/crates/environ/Cargo.toml index 7400e09f2b..15f284ac21 100644 --- a/crates/environ/Cargo.toml +++ b/crates/environ/Cargo.toml @@ -21,7 +21,7 @@ serde = { version = "1.0.94", features = ["derive"] } log = { version = "0.4.8", default-features = false } more-asserts = "0.2.1" cfg-if = "1.0" -gimli = "0.24" +gimli = "0.25.0" [badges] maintenance = { status = "actively-developed" } diff --git a/crates/environ/src/module_environ.rs b/crates/environ/src/module_environ.rs index 2fc012b675..7cffaaf000 100644 --- a/crates/environ/src/module_environ.rs +++ b/crates/environ/src/module_environ.rs @@ -204,10 +204,9 @@ impl<'data> ModuleEnvironment<'data> { let slice = gimli::EndianSlice::new(data, endian); match name { - // Dwarf fields. + // `gimli::Dwarf` fields. ".debug_abbrev" => dwarf.debug_abbrev = gimli::DebugAbbrev::new(data, endian), ".debug_addr" => dwarf.debug_addr = gimli::DebugAddr::from(slice), - // TODO aranges? ".debug_info" => dwarf.debug_info = gimli::DebugInfo::new(data, endian), ".debug_line" => dwarf.debug_line = gimli::DebugLine::new(data, endian), ".debug_line_str" => dwarf.debug_line_str = gimli::DebugLineStr::from(slice), @@ -226,6 +225,9 @@ impl<'data> ModuleEnvironment<'data> { ".debug_ranges" => info.debug_ranges = gimli::DebugRanges::new(data, endian), ".debug_rnglists" => info.debug_rnglists = gimli::DebugRngLists::new(data, endian), + // We don't use these at the moment. + ".debug_aranges" | ".debug_pubnames" | ".debug_pubtypes" => return, + other => { log::warn!("unknown debug section `{}`", other); return; diff --git a/crates/jit/Cargo.toml b/crates/jit/Cargo.toml index 66562cc996..10c6016f2f 100644 --- a/crates/jit/Cargo.toml +++ b/crates/jit/Cargo.toml @@ -32,10 +32,10 @@ more-asserts = "0.2.1" anyhow = "1.0" cfg-if = "1.0" log = "0.4" -gimli = { version = "0.24.0", default-features = false, features = ["write"] } +gimli = { version = "0.25.0", default-features = false, features = ["write"] } object = { version = "0.25.0", default-features = false, features = ["write"] } serde = { version = "1.0.94", features = ["derive"] } -addr2line = { version = "0.15", default-features = false } +addr2line = { version = "0.16.0", default-features = false } [target.'cfg(target_os = "windows")'.dependencies] winapi = { version = "0.3.8", features = ["winnt", "impl-default"] } diff --git a/crates/profiling/Cargo.toml b/crates/profiling/Cargo.toml index 0e9d3be82c..aa7d83c953 100644 --- a/crates/profiling/Cargo.toml +++ b/crates/profiling/Cargo.toml @@ -12,7 +12,7 @@ edition = "2018" [dependencies] anyhow = "1.0" cfg-if = "1.0" -gimli = { version = "0.24.0", optional = true } +gimli = { version = "0.25.0", optional = true } lazy_static = "1.4" libc = { version = "0.2.60", default-features = false } scroll = { version = "0.10.1", features = ["derive"], optional = true }