xref: /wasmtime-44.0.1/crates/cranelift/src/debug/transform/utils.rs (revision eb2602dc)
  • Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use super::address_transform::AddressTransform;
2 use super::expression::{CompiledExpression, FunctionFrameInfo};
3 use anyhow::Error;
4 use cranelift_codegen::isa::TargetIsa;
5 use gimli::write;
6 
7 pub(crate) fn append_vmctx_info(
8     comp_unit: &mut write::Unit,
9     parent_id: write::UnitEntryId,
10     vmctx_ptr_die_ref: write::Reference,
11     addr_tr: &AddressTransform,
12     frame_info: Option<&FunctionFrameInfo>,
13     scope_ranges: &[(u64, u64)],
14     out_strings: &mut write::StringTable,
15     isa: &dyn TargetIsa,
16 ) -> Result<(), Error> {
17     let loc = {
18         let expr = CompiledExpression::vmctx();
19         let locs = expr
20             .build_with_locals(scope_ranges, addr_tr, frame_info, isa)
21             .map(|i| {
22                 i.map(|(begin, length, data)| write::Location::StartLength {
23                     begin,
24                     length,
25                     data,
26                 })
27             })
28             .collect::<Result<Vec<_>, _>>()?;
29         let list_id = comp_unit.locations.add(write::LocationList(locs));
30         write::AttributeValue::LocationListRef(list_id)
31     };
32 
33     let var_die_id = comp_unit.add(parent_id, gimli::DW_TAG_variable);
34     let var_die = comp_unit.get_mut(var_die_id);
35     var_die.set(
36         gimli::DW_AT_name,
37         write::AttributeValue::StringRef(out_strings.add("__vmctx")),
38     );
39     var_die.set(
40         gimli::DW_AT_type,
41         write::AttributeValue::DebugInfoRef(vmctx_ptr_die_ref),
42     );
43     var_die.set(gimli::DW_AT_location, loc);
44 
45     Ok(())
46 }
47 

served by {OpenGrok

Last Index Update: Fri May 15 20:09:11 GMT 2026