From 053757fa9a5ea6b2f39a725003ef96bd4134e177 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Sat, 29 Aug 2020 18:34:53 +0200 Subject: [PATCH 1/3] Don't substract 1 from end_addr in line program writing Fixes #2173 --- crates/debug/src/transform/line_program.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/debug/src/transform/line_program.rs b/crates/debug/src/transform/line_program.rs index 0de0a39d83a8..ba40a3e94b9d 100644 --- a/crates/debug/src/transform/line_program.rs +++ b/crates/debug/src/transform/line_program.rs @@ -271,7 +271,7 @@ where } } } - let end_addr = (map.offset + map.len - 1) as u64; + let end_addr = (map.offset + map.len) as u64; out_program.end_sequence(end_addr); } Ok((out_program, offset, files, file_index_base)) From 4bc140c8d5f9414aafdfe9a978f508d20b16f582 Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Sun, 30 Aug 2020 00:18:21 +0200 Subject: [PATCH 2/3] add testcase for end_sequence having offset past retq (#1) --- tests/all/debug/translate.rs | 39 ++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/all/debug/translate.rs b/tests/all/debug/translate.rs index 390067c17e5f..58332dceabd0 100644 --- a/tests/all/debug/translate.rs +++ b/tests/all/debug/translate.rs @@ -24,6 +24,25 @@ fn check_wasm(wasm_path: &str, directives: &str) -> Result<()> { Ok(()) } +#[allow(dead_code)] +fn check_line_program(wasm_path: &str, directives: &str) -> Result<()> { + let wasm = read(wasm_path)?; + let obj_file = NamedTempFile::new()?; + let obj_path = obj_file.path().to_str().unwrap(); + compile_cranelift(&wasm, None, obj_path)?; + let dump = get_dwarfdump(obj_path, DwarfDumpSection::DebugLine)?; + let mut builder = CheckerBuilder::new(); + builder + .text(directives) + .map_err(|e| format_err!("unable to build checker: {:?}", e))?; + let checker = builder.finish(); + let check = checker + .explain(&dump, NO_VARIABLES) + .map_err(|e| format_err!("{:?}", e))?; + assert!(check.0, "didn't pass check {}", check.1); + Ok(()) +} + #[test] #[ignore] #[cfg(all( @@ -89,3 +108,23 @@ check: DW_AT_decl_line (10) "##, ) } + +#[test] +#[ignore] +#[cfg(all( + any(target_os = "linux", target_os = "macos"), + target_arch = "x86_64", + target_pointer_width = "64" +))] +fn test_debug_dwarf5_translate_lines() -> Result<()> { + check_line_program( + "tests/all/debug/testsuite/fib-wasm-dwarf5.wasm", + r##" +check: Address Line Column File ISA Discriminator Flags +check: 0x000000000000013c 15 3 1 0 0 +# The important point is that the following offset must be _after_ the `ret` instruction. +# FIXME: this +1 increment might vary on other archs. +check: 0x000000000000013d 15 3 1 0 0 end_sequence + "##, + ) +} From d5d22c26e0b1ab39663de500ef7b3dff8f9b62dc Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Mon, 31 Aug 2020 17:01:01 +0200 Subject: [PATCH 3/3] Update tests/all/debug/translate.rs Co-authored-by: Gabor Greif --- tests/all/debug/translate.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/all/debug/translate.rs b/tests/all/debug/translate.rs index 58332dceabd0..e8ceb7bd9ebc 100644 --- a/tests/all/debug/translate.rs +++ b/tests/all/debug/translate.rs @@ -124,7 +124,7 @@ check: Address Line Column File ISA Discriminator Flags check: 0x000000000000013c 15 3 1 0 0 # The important point is that the following offset must be _after_ the `ret` instruction. # FIXME: this +1 increment might vary on other archs. -check: 0x000000000000013d 15 3 1 0 0 end_sequence +nextln: 0x000000000000013d 15 3 1 0 0 end_sequence "##, ) }