ggreif commented on Issue #1410:
@yurydelendik does your self-assignment mean I shouldn't add any more commits?
bjorn3 commented on Issue #1410:
No, it means that he will review this PR once it is ready.
ggreif commented on Issue #1410:
@yurydelendik I have now added
DW_FORM_addrx*
in two spots, and I would expect that frames for subprograms would fill with parameters inlldb
. They do forfib-was.c
but not for myfib-was.mo.wasm
on this branch. I wonder what I am missing here. Where should I start debugging this? Any tips?
yurydelendik commented on Issue #1410:
They do for fib-was.c but not for my fib-was.mo.wasm on this branch. I wonder what I am missing here.
@ggreif I don't see
DW_AT_high_pc
defined for any subprogram in fib-was.mo.wasm. I'm sure how the transform will behave for subprogram without code range defined.
yurydelendik edited a comment on Issue #1410:
They do for fib-was.c but not for my fib-was.mo.wasm on this branch. I wonder what I am missing here.
@ggreif I don't see
DW_AT_high_pc
defined for any subprogram in fib-was.mo.wasm. I'm not sure how the transform will behave for subprogram without code range defined.
ggreif commented on Issue #1410:
Correct. I didn't bother adding
DW_AT_high_pc
yet. But I have seen that the garbage collector does mark my subprograms as live even without it, so I should be safe.I am mostly wondering if there are any gotchas about the frame structure that I should know. I guess the type definitions are passed through unchanged.
ggreif edited a comment on Issue #1410:
Correct. I didn't bother adding
DW_AT_high_pc
yet. But I have seen that the garbage collector does mark my subprograms as live even without it, so I should be safe. I should say that I can set breakpoints, but(lldb) frame var
will be empty a.t.m.I am mostly wondering if there are any gotchas about the frame structure that I should know. I guess the type definitions are passed through unchanged.
yurydelendik commented on Issue #1410:
I didn't bother adding DW_AT_high_pc yet.
Can you add support for
DW_AT_high_pc
? That's one of main differences between fib-was.c and fib-was.mo.
yurydelendik edited a comment on Issue #1410:
I didn't bother adding DW_AT_high_pc yet.
Can you add support for
DW_AT_high_pc
? That's one of main differences between fib-was.c and fib-was.mo.P.S. that might be affecting
frame var
ggreif commented on Issue #1410:
I have updated the binary with
DW_AT_high_pc
, but I still cannot see the formal parameter inlldb
. I am beginning to think that a DWARF-5-ism is the reason, and the code bails out somewhere. I guess theDW_AT_language
is not a significant difference?
yurydelendik commented on Issue #1410:
Hard to say, I just tried running your branch and it failed at clone_line_program -- the .debug_line format can differ between v4 and v5.
Also DWARF expressions look rather weird: just
DW_OP_plus_uconst
is old and it also will not work withoutDW_AT_frame_base
.Try to use
cargo run -- wasm2obj
to generate object file and inspect the result file using dwarfdump.
ggreif commented on Issue #1410:
Hard to say, I just tried running your branch and it failed at clone_line_program -- the .debug_line format can differ between v4 and v5.
I have a quick hack for that. The reason is that file number
0
is allowed in DWARF-5, but not in 4.Here is the diff
diff --git a/crates/debug/src/transform/line_program.rs b/crates/debug/src/transform/line_program.rs index 499a1300..862bf5d3 100644 --- a/crates/debug/src/transform/line_program.rs +++ b/crates/debug/src/transform/line_program.rs @@ -238,7 +238,8 @@ where }; out_program.row().address_offset = address_offset; out_program.row().op_index = *op_index; - out_program.row().file = files[(file_index - 1) as usize]; + out_program.row().file = files[(if *file_index as i64 <= 0 {0} else {file_index - 1}) as usize]; + // out_program.row().file = if *file_index as i64 <= 0 {write::line::id::zero()} else {files[(file_index - 1) as usize]}; out_program.row().line = *line; out_program.row().column = *column; out_program.row().discriminator = *discriminator;Sorry!
Regarding
DW_OP_plus_uconst
, yes this is a provocation tolldb
which would emit warnings whenframe var
is processed. Alas they don't appear with my program. They do with thefib-wasm.wasm
one.Which brings me to the question: Are the loc programs in
DW_AT_frame_base
andDW_AT_location
supposed to be concatenated for each argument/local? I am a bit puzzled to see whatclang-11
seems to emit. (Those binaries live in the main repo, I temporarily reverted them toclang-10
on my branch.)
ggreif commented on Issue #1410:
Wow, thanks for the tip!
cargo run -- wasm2obj -g tests/debug/testsuite/fib-wasm.mo.wasm tests/debug/testsuite/fib-wasm.mo.out llvm-dwarfdump tests/debug/testsuite/fib-wasm.mo.outtotally helps! :first_place: :rocket:
ggreif edited a comment on Issue #1410:
Wow, thanks for the tip!
cargo run -- wasm2obj -g tests/debug/testsuite/fib-wasm.mo.wasm tests/debug/testsuite/fib-wasm.mo.out llvm-dwarfdump tests/debug/testsuite/fib-wasm.mo.outtotally helps! :first_place: :rocket:
yurydelendik commented on Issue #1410:
Are the loc programs in DW_AT_frame_base and DW_AT_location supposed to be concatenated for each argument/local?
Nope. That was the case before DW_AT_frame_base patch landed. DW_OP_fpreg shall be used from this point on to access frame base.
ggreif commented on Issue #1410:
A quick before/after analysis shows
0x0000082b: DW_TAG_subprogram [2] * DW_AT_low_pc [DW_FORM_addrx] (indexed (00000064) address = 0x00000000000019e5) DW_AT_high_pc [DW_FORM_data4] (0x0000005e) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000004af] = "fib") DW_AT_decl_line [DW_FORM_data1] (4) DW_AT_decl_column [DW_FORM_data1] (0x00) DW_AT_prototyped [DW_FORM_flag_present] (true) DW_AT_external [DW_FORM_flag] (0x00) 0x00000838: DW_TAG_formal_parameter [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000145] = "n") DW_AT_decl_line [DW_FORM_data1] (4) DW_AT_decl_column [DW_FORM_data1] (0x09) DW_AT_type [DW_FORM_ref_udata] (cu + 0x67 => {0x00000067} "Nat16") DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x10)goes in, and the below comes out:
0x00000a9b: DW_TAG_subprogram [13] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000 ".text._wasm_function_100") DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000051a] = "fib") DW_AT_decl_line [DW_FORM_udata] (4) DW_AT_decl_column [DW_FORM_udata] (0) DW_AT_prototyped [DW_FORM_flag] (0x01) DW_AT_external [DW_FORM_flag] (0x00) 0x00000aac: DW_TAG_formal_parameter [14] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001f9] = "n") DW_AT_decl_line [DW_FORM_udata] (4) DW_AT_decl_column [DW_FORM_udata] (9) DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x10) DW_AT_type [DW_FORM_ref4] (cu + 0x00a9 => {0x000000a9} "Nat16")Note the disappearance of
DW_AT_high_pc
. This looks suspiciously the effect of this line:
https://github.com/ggreif/wasmtime/blob/master/crates/debug/src/transform/attr.rs#L71It is explicitly discarded. I wonder why...
yurydelendik commented on Issue #1410:
It is explicitly discarded
The before says
DW_AT_high_pc [DW_FORM_data4] (0x0000005e)
which is normallyUdata
for DW_AT_high_pc. Other forms of constants as not supported yet.
yurydelendik edited a comment on Issue #1410:
It is explicitly discarded
The before says
DW_AT_high_pc [DW_FORM_data4] (0x0000005e)
which is normallyUdata
for DW_AT_high_pc. Other forms of constants is not supported yet.
yurydelendik edited a comment on Issue #1410:
It is explicitly discarded
The before says
DW_AT_high_pc [DW_FORM_data4] (0x0000005e)
which is normallyUdata
for DW_AT_high_pc. Other forms of constants are not supported yet.
ggreif commented on Issue #1410:
Right. It gets
read
asUdata
and skipped over it in lines
https://github.com/ggreif/wasmtime/blob/master/crates/debug/src/transform/attr.rs#L71-L73Similarly for
DW_AT_low_pc
forAddr
in lines
https://github.com/ggreif/wasmtime/blob/master/crates/debug/src/transform/attr.rs#L68-L70.Both won't get
write
n. But here is the twist: I useDW_FORM_addrx
(maps toDebugAddrIndex
), which ends up written (this is new code added by me) in line
https://github.com/ggreif/wasmtime/blob/master/crates/debug/src/transform/attr.rs#L88!Should I also suppress
DebugAddrIndex
withDW_AT_low_pc
?This makes me wonder how
fib-wasm.wasm
is different. The before/after picture seems to have bothDW_AT_low_pc
andDW_AT_high_pc
:0x00000026: DW_TAG_subprogram [2] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000003) DW_AT_high_pc [DW_FORM_data4] (0x000000cb) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000023] = "fib") DW_AT_decl_file [DW_FORM_data1] ("./fib-wasm.c") DW_AT_decl_line [DW_FORM_data1] (8) DW_AT_prototyped [DW_FORM_flag_present] (true) DW_AT_type [DW_FORM_ref4] (cu + 0x008a => {0x0000008a} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000039: DW_TAG_formal_parameter [3] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x1c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000002b] = "n") DW_AT_decl_file [DW_FORM_data1] ("./fib-wasm.c") DW_AT_decl_line [DW_FORM_data1] (8) DW_AT_type [DW_FORM_ref4] (cu + 0x008a => {0x0000008a} "int")After:
0x00000069: DW_TAG_subprogram [9] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_high_pc [DW_FORM_udata] (142) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000007a] = "fib") DW_AT_decl_file [DW_FORM_udata] ("./fib-wasm.c") DW_AT_decl_line [DW_FORM_udata] (8) DW_AT_prototyped [DW_FORM_flag] (0x01) DW_AT_external [DW_FORM_flag] (0x01) DW_AT_type [DW_FORM_ref4] (cu + 0x00df => {0x000000df} "int") ... 0x0000008d: DW_TAG_formal_parameter [11] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x1c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000086] = "n") DW_AT_decl_file [DW_FORM_udata] ("./fib-wasm.c") DW_AT_decl_line [DW_FORM_udata] (8) DW_AT_type [DW_FORM_ref4] (cu + 0x00df => {0x000000df} "int")
yurydelendik commented on Issue #1410:
Should I also suppress DebugAddrIndex with DW_AT_low_pc?
I guess so.
ggreif commented on Issue #1410:
@yurydelendik I am getting closer. Now I could use some guidance how to compile operand stack
Exprloc
s (https://yurydelendik.github.io/webassembly-dwarf/#location-descriptions-operand-stack) toCompiledExpression
(compile_expression
), so that it matchescranelift
's calling convention.
ggreif edited a comment on Issue #1410:
@yurydelendik I am getting closer. Now I could use some guidance how to compile operand stack
Exprloc
s (https://yurydelendik.github.io/webassembly-dwarf/#location-descriptions-operand-stack) toCompiledExpression
(compile_expression
), so that it matchescranelift
's calling convention. N.B.: I am assuming that formal parameters are passed this way, and are _not_ considered locals.
yurydelendik commented on Issue #1410:
I am assuming that formal parameters are passed this way, and are not considered locals.
That's incorrect. WebAssembly function parameters are locals (per specification).
I could use some guidance how to compile operand stack
It is not possible atm. Currently no toolset generate expressions for operand stack, and cranelift does not provide data for it -- thus such expressions are silently ignored. It is possible to use only locals atm.
ggreif commented on Issue #1410:
I am marking this as ready for first review, then. I think the changes are mostly benign and incremental, so they pose no elevated risk.
I still have my doubts about theDW_AT_addr_base = 8
thing, and will establish a mutable variable in the CU context.
- any guidance how to add sustainable and meaningful tests is welcome.
.debug_line_str
will be filled in soon (today?)
ggreif edited a comment on Issue #1410:
I am marking this as ready for first review, then. I think the changes are mostly benign and incremental, so they pose no elevated risk.
I still have my doubts about theDW_AT_addr_base = 8
thing, and will establish a mutable variable in the CU context.
- any guidance how to add sustainable and meaningful tests is welcome.
.debug_line_str
will be filled in soon (today?)- revert
clang-10
stuff, removemoc
stuff
ggreif edited a comment on Issue #1410:
Hard to say, I just tried running your branch and it failed at clone_line_program -- the .debug_line format can differ between v4 and v5.
I have a quick hack for that. The reason is that file number
0
is allowed in DWARF-5, but not in 4.Here is the diff
diff --git a/crates/debug/src/transform/line_program.rs b/crates/debug/src/transform/line_program.rs index 499a1300..862bf5d3 100644 --- a/crates/debug/src/transform/line_program.rs +++ b/crates/debug/src/transform/line_program.rs @@ -238,7 +238,8 @@ where }; out_program.row().address_offset = address_offset; out_program.row().op_index = *op_index; - out_program.row().file = files[(file_index - 1) as usize]; + out_program.row().file = files[(if *file_index as i64 <= 0 {0} else {file_index - 1}) as usize]; + // out_program.row().file = if *file_index as i64 <= 0 {write::line::id::zero()} else {files[(file_index - 1) as usize]}; out_program.row().line = *line; out_program.row().column = *column; out_program.row().discriminator = *discriminator;Sorry!
Regarding
DW_OP_plus_uconst
, yes this is a provocation tolldb
which would emit warnings whenframe var
is processed. Alas they don't appear with my program. They do with thefib-wasm.wasm
one.Which brings me to the question: Are the loc programs in
DW_AT_frame_base
andDW_AT_location
supposed to be concatenated for each argument/local? I am a bit puzzled to see whatclang-11
seems to emit. (Those binaries live in the main repo, I temporarily reverted them toclang-10
on my branch, becausenix
doesn't yet haveclang-11
.)It boils down to indexing. DWARF-4 is one-based for file and directory lists
file_names[ 1]: name: "fib-wasm.c" dir_index: 0 mod_time: 0x00000000 length: 0x00000000while DWARF-5 is zero-based:
include_directories[ 0] = .debug_line_str[0x00000000] = "." file_names[ 0]: name: .debug_line_str[0x00000002] = "fib-wasm.c" dir_index: 0 md5_checksum: 3444f0aa42db6d50ac2e4e57ac752c75
ggreif commented on Issue #1410:
@yurydelendik what about enabling these?
index 1fba1c35c..bba6aef1e 100644 --- a/tests/all/debug/translate.rs +++ b/tests/all/debug/translate.rs @@ -25,7 +25,6 @@ fn check_wasm(wasm_path: &str, directives: &str) -> Result<()> { } #[test] -#[ignore] #[cfg(all( any(target_os = "linux", target_os = "macos"), target_pointer_width = "64" @@ -58,7 +57,6 @@ check: DW_AT_decl_line (10) } #[test] -#[ignore] #[cfg(all( any(target_os = "linux", target_os = "macos"), target_pointer_width = "64"
yurydelendik commented on Issue #1410:
what about enabling these?
It requires from a developer to have lldb and dwarfdump installed: wasmtime is an umbrella for multiple (sub)project, so we decided to run these tests only on CI.
ggreif commented on Issue #1410:
Got it, let's have a look how the _ignore nothing_ flag is passed.
On 4/24/20, Yury Delendik <notifications@github.com> wrote:
what about enabling these?
It requires from a developer to have lldb and dwarfdump installed: wasmtime
is an umbrella for multiple (sub)project, so we decided to run these tests
only on CI.--
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub:
https://github.com/bytecodealliance/wasmtime/pull/1410#issuecomment-619183127
ggreif commented on Issue #1410:
@yurydelendik can you do me a favour and refresh these on my branch with clang-11 (prerelease):
tests/all/debug/testsuite/fib-wasm-dwarf5.wasm tests/all/debug/testsuite/fib-wasm.wasm
The instructions are at the top of the file
tests/all/debug/testsuite/fib-wasm.c
.
ggreif edited a comment on Issue #1410:
@yurydelendik can you do me a favour and refresh these on my branch with clang-11 (prerelease):
tests/all/debug/testsuite/fib-wasm-dwarf5.wasm tests/all/debug/testsuite/fib-wasm.wasm
The instructions are at the top of the file
tests/all/debug/testsuite/fib-wasm.c
.UPDATE: I added you to my repo collabs.
ggreif edited a comment on Issue #1410:
@yurydelendik can you do me a favour and refresh these on my branch with clang-11 (prerelease):
tests/all/debug/testsuite/fib-wasm-dwarf5.wasm tests/all/debug/testsuite/fib-wasm.wasm
The instructions are at the top of the file
tests/all/debug/testsuite/fib-wasm.c
.Reason: I don't have a bleeding edge
clang
.UPDATE: I added you to my repo collabs.
ggreif edited a comment on Issue #1410:
@yurydelendik can you do me a favour and refresh these on my branch with clang-11 (prerelease):
tests/all/debug/testsuite/fib-wasm-dwarf5.wasm tests/all/debug/testsuite/fib-wasm.wasm
The instructions are at the top of the file
tests/all/debug/testsuite/fib-wasm.c
.Reason: I don't have a bleeding edge
clang
, and using olderclang-10
doesn't supportDW_AT_frame_base
yet. This causes test failures.UPDATE: I added you to my repo collabs.
ggreif edited a comment on Issue #1410:
@yurydelendik can you do me a favour and refresh these on my branch with
clang-11
(prerelease):
tests/all/debug/testsuite/fib-wasm-dwarf5.wasm tests/all/debug/testsuite/fib-wasm.wasm
The instructions are at the top of the file
tests/all/debug/testsuite/fib-wasm.c
.Reason: I don't have a bleeding edge
clang
, and using olderclang-10
doesn't supportDW_AT_frame_base
yet. This causes test failures.UPDATE: I added you to my repo collabs.
ggreif edited a comment on Issue #1410:
Got it, let's have a look how the _ignore nothing_ flag is passed.
Like this:
cargo test translate -- --ignored
On 4/24/20, Yury Delendik <notifications@github.com> wrote:
what about enabling these?
It requires from a developer to have lldb and dwarfdump installed: wasmtime
is an umbrella for multiple (sub)project, so we decided to run these tests
only on CI.--
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub:
https://github.com/bytecodealliance/wasmtime/pull/1410#issuecomment-619183127
ggreif edited a comment on Issue #1410:
Hard to say, I just tried running your branch and it failed at clone_line_program -- the .debug_line format can differ between v4 and v5.
I have a quick hack for that. The reason is that file number
0
is allowed in DWARF-5, but not in 4.Here is the diff
diff --git a/crates/debug/src/transform/line_program.rs b/crates/debug/src/transform/line_program.rs index 499a1300..862bf5d3 100644 --- a/crates/debug/src/transform/line_program.rs +++ b/crates/debug/src/transform/line_program.rs @@ -238,7 +238,8 @@ where }; out_program.row().address_offset = address_offset; out_program.row().op_index = *op_index; - out_program.row().file = files[(file_index - 1) as usize]; + out_program.row().file = files[(if *file_index as i64 <= 0 {0} else {file_index - 1}) as usize]; + // out_program.row().file = if *file_index as i64 <= 0 {write::line::id::zero()} else {files[(file_index - 1) as usize]}; out_program.row().line = *line; out_program.row().column = *column; out_program.row().discriminator = *discriminator;Sorry!
Regarding
DW_OP_plus_uconst
, yes this is a provocation tolldb
which would emit warnings whenframe var
is processed. Alas they don't appear with my program. They do with thefib-wasm.wasm
one.Which brings me to the question: Are the loc programs in
DW_AT_frame_base
andDW_AT_location
supposed to be concatenated for each argument/local? I am a bit puzzled to see whatclang-11
seems to emit. (Those binaries live in the main repo, I temporarily reverted them toclang-10
on my branch, becausenix
doesn't yet haveclang-11
.)It boils down to indexing. DWARF-4 is one-based for file and directory lists
file_names[ 1]: name: "fib-wasm.c" dir_index: 0 mod_time: 0x00000000 length: 0x00000000while DWARF-5 is zero-based:
include_directories[ 0] = .debug_line_str[0x00000000] = "." file_names[ 0]: name: .debug_line_str[0x00000002] = "fib-wasm.c" dir_index: 0 md5_checksum: 3444f0aa42db6d50ac2e4e57ac752c75EDIT: this is fixed in d117d74.
ggreif commented on Issue #1410:
@yurydelendik I am grappling with
remove_incomplete_ranges
inexpression.rs
. Mostly because I cannot find a definition ofrange
andlabel
. This looks like a (boolean) matrix operation where labels must cover ranges, i.e. the whole row.But somehow labels correspond to local variables, and ranges are in terms of code offsets (IIUC). I end up with all ranges discarded, because
self.processed_labels = {val1, val4294967294}
with.len == 2
andp
'slabel_location
only mentions one of the variables:remove_incomplete_ranges iter CachedValueLabelRange { func_index: DefinedFuncIndex(6), start: 0, end: 62, label_location: {} } ### 0 vs. 2 remove_incomplete_ranges iter CachedValueLabelRange { func_index: DefinedFuncIndex(6), start: 62, end: 96, label_location: {val1: Stack(ss1)} } ### 1 vs. 2 remove_incomplete_ranges iter CachedValueLabelRange { func_index: DefinedFuncIndex(6), start: 96, end: 120, label_location: {} } ### 0 vs. 2 remove_incomplete_ranges iter CachedValueLabelRange { func_index: DefinedFuncIndex(6), start: 120, end: 140, label_location: {val4294967294: Stack(ss0)} } ### 1 vs. 2 remove_incomplete_ranges iter CachedValueLabelRange { func_index: DefinedFuncIndex(6), start: 140, end: 175, label_location: {} } ### 0 vs. 2I am obviously doing something wrong, but since I barely understand what is going on here, I am hard-pressed fixing it.
yurydelendik commented on Issue #1410:
I am grappling with remove_incomplete_ranges in expression.rs
Please notice I fixed lots of issues for expression.rs in https://github.com/bytecodealliance/wasmtime/pull/1572 -- currently waiting on review.
ValueLabelRangesBuilder is used during DWARF expression transformation, and if not all value labels (in your case 2 labels) present in particular item of
ranges
, DWARF expression will not be transformed successfully.
ggreif edited a comment on Issue #1410:
@yurydelendik I am grappling with
remove_incomplete_ranges
inexpression.rs
. Mostly because I cannot find a definition ofrange
andlabel
. This looks like a (boolean) matrix operation where labels must cover ranges, i.e. the whole row.But somehow labels correspond to local variables, and ranges are in terms of code offsets (IIUC). I end up with all ranges discarded, because
self.processed_labels = {val1, val4294967294}
with.len == 2
andp
'slabel_location
only mentions one of the variables:remove_incomplete_ranges iter CachedValueLabelRange { func_index: DefinedFuncIndex(6), start: 0, end: 62, label_location: {} } ### 0 vs. 2 remove_incomplete_ranges iter CachedValueLabelRange { func_index: DefinedFuncIndex(6), start: 62, end: 96, label_location: {val1: Stack(ss1)} } ### 1 vs. 2 remove_incomplete_ranges iter CachedValueLabelRange { func_index: DefinedFuncIndex(6), start: 96, end: 120, label_location: {} } ### 0 vs. 2 remove_incomplete_ranges iter CachedValueLabelRange { func_index: DefinedFuncIndex(6), start: 120, end: 140, label_location: {val4294967294: Stack(ss0)} } ### 1 vs. 2 remove_incomplete_ranges iter CachedValueLabelRange { func_index: DefinedFuncIndex(6), start: 140, end: 175, label_location: {} } ### 0 vs. 2I am obviously doing something wrong, but since I barely understand what is going on here, I am hard-pressed fixing it.
I am also happy to accept a _zoom_ lecture if that is more convenient for you.
ggreif commented on Issue #1410:
I am grappling with remove_incomplete_ranges in expression.rs
Please notice I fixed _lots_ of issues for expression.rs in #1572 -- currently waiting on review.
ValueLabelRangesBuilder is used during DWARF expression transformation, and if not all value labels (in your case 2 labels) present in particular item of
ranges
, DWARF expression will not be transformed successfully.So, next step for me to figure out why not both labels show up in
CachedValueLabelRange
, right?
yurydelendik commented on Issue #1410:
So, next step for me to figure out why not both labels show up in CachedValueLabelRange, right?
Correct. Try to use
--opt-level 0
maybe it is just cranelift optimization or bug in value label range tracking there.(BTW, would you like to join https://bytecodealliance.zulipchat.com/ for chat?)
yurydelendik commented on Issue #1410:
Let's freeze scope of this PR to the original description. I noticed you trying to work on DWARF expressions related stuff. I'll update .wasm tests and will try to finalize the review.
ggreif commented on Issue #1410:
I was trying to figure out if the
Exprloc
problems I am experiencing are DWARF-5 related. That's the background of my last Q. Never mind, I think this PR is ready. Please go ahead, and I'll iterate on theExpr
stuff with follow-up PRs.
yurydelendik commented on Issue #1410:
Updated wasm files. fwiw you don't have to provide access to entire repo, submitted as PR branch (option selected by default) gives push access for a reviewer.
ggreif commented on Issue #1410:
This looks good. Will you squash?
yurydelendik commented on Issue #1410:
Thank you for the patch
Last updated: Dec 23 2024 at 13:07 UTC