102155232SChris Fallin use filecheck::{CheckerBuilder, NO_VARIABLES};
202155232SChris Fallin use std::env;
302155232SChris Fallin use std::io::Write;
402155232SChris Fallin use std::process::Command;
502155232SChris Fallin use tempfile::NamedTempFile;
602155232SChris Fallin use test_programs_artifacts::*;
794740588SNick Fitzgerald use wasmtime::{Result, bail, format_err};
802155232SChris Fallin
902155232SChris Fallin macro_rules! assert_test_exists {
1002155232SChris Fallin ($name:ident) => {
1102155232SChris Fallin #[expect(unused_imports, reason = "here to assert tests exist")]
1202155232SChris Fallin use self::$name as _;
1302155232SChris Fallin };
1402155232SChris Fallin }
1502155232SChris Fallin foreach_dwarf!(assert_test_exists);
1602155232SChris Fallin
lldb_with_script(args: &[&str], script: &str) -> Result<String>1702155232SChris Fallin fn lldb_with_script(args: &[&str], script: &str) -> Result<String> {
1802155232SChris Fallin let _ = env_logger::try_init();
1902155232SChris Fallin
2002155232SChris Fallin let lldb_path = env::var("LLDB").unwrap_or("lldb".to_string());
2102155232SChris Fallin let mut cmd = Command::new(&lldb_path);
2202155232SChris Fallin
2302155232SChris Fallin cmd.arg("--batch");
2402155232SChris Fallin if cfg!(target_os = "macos") {
2502155232SChris Fallin cmd.args(&["-o", "settings set plugin.jit-loader.gdb.enable on"]);
2602155232SChris Fallin }
2702155232SChris Fallin let mut script_file = NamedTempFile::new()?;
2802155232SChris Fallin script_file.write(script.as_bytes())?;
2902155232SChris Fallin let script_path = script_file.path().to_str().unwrap();
3002155232SChris Fallin cmd.args(&["-s", &script_path]);
3102155232SChris Fallin
3202155232SChris Fallin let mut me = std::env::current_exe().expect("current_exe specified");
3302155232SChris Fallin me.pop(); // chop off the file name
3402155232SChris Fallin me.pop(); // chop off `deps`
3502155232SChris Fallin if cfg!(target_os = "windows") {
3602155232SChris Fallin me.push("wasmtime.exe");
3702155232SChris Fallin } else {
3802155232SChris Fallin me.push("wasmtime");
3902155232SChris Fallin }
4002155232SChris Fallin cmd.arg(me);
4102155232SChris Fallin
4202155232SChris Fallin cmd.arg("--");
4302155232SChris Fallin cmd.args(args);
4402155232SChris Fallin
4502155232SChris Fallin log::trace!("Running command: {cmd:?}");
4602155232SChris Fallin let output = cmd.output().expect("success");
4702155232SChris Fallin
4802155232SChris Fallin let stdout = String::from_utf8(output.stdout)?;
4902155232SChris Fallin log::trace!("--- sdout ---\n{stdout}");
5002155232SChris Fallin
5102155232SChris Fallin let stderr = String::from_utf8(output.stderr)?;
5202155232SChris Fallin log::trace!("--- sderr ---\n{stderr}");
5302155232SChris Fallin
5402155232SChris Fallin if !output.status.success() {
5502155232SChris Fallin bail!(
5602155232SChris Fallin "failed to execute {cmd:?}:\n\
5702155232SChris Fallin --- stderr ---\n\
5802155232SChris Fallin {stderr}\n\
5902155232SChris Fallin --- stdout ---\n\
6002155232SChris Fallin {stdout}",
6102155232SChris Fallin );
6202155232SChris Fallin }
6302155232SChris Fallin Ok(stdout)
6402155232SChris Fallin }
6502155232SChris Fallin
check_lldb_output(output: &str, directives: &str) -> Result<()>6602155232SChris Fallin fn check_lldb_output(output: &str, directives: &str) -> Result<()> {
6702155232SChris Fallin let mut builder = CheckerBuilder::new();
6802155232SChris Fallin builder
6902155232SChris Fallin .text(directives)
7002155232SChris Fallin .map_err(|e| format_err!("unable to build checker: {e:?}"))?;
7102155232SChris Fallin let checker = builder.finish();
7202155232SChris Fallin let check = checker
7302155232SChris Fallin .explain(output, NO_VARIABLES)
7402155232SChris Fallin .map_err(|e| format_err!("{e:?}"))?;
7502155232SChris Fallin assert!(check.0, "didn't pass check {}", check.1);
7602155232SChris Fallin Ok(())
7702155232SChris Fallin }
7802155232SChris Fallin
7902155232SChris Fallin #[allow(dead_code, reason = "tested elsewhere")]
dwarf_dead_code()8002155232SChris Fallin fn dwarf_dead_code() {} // this is tested over in `translate.rs`
8102155232SChris Fallin
8202155232SChris Fallin #[test]
8302155232SChris Fallin #[ignore]
dwarf_fib_wasm() -> Result<()>8402155232SChris Fallin pub fn dwarf_fib_wasm() -> Result<()> {
8502155232SChris Fallin let output = lldb_with_script(
8602155232SChris Fallin &[
8702155232SChris Fallin "-Ccache=n",
8802155232SChris Fallin "-Ddebug-info",
8902155232SChris Fallin "-Oopt-level=0",
9002155232SChris Fallin "--invoke",
9102155232SChris Fallin "fib",
9202155232SChris Fallin DWARF_FIB_WASM,
9302155232SChris Fallin "3",
9402155232SChris Fallin ],
9502155232SChris Fallin r#"b fib
9602155232SChris Fallin r
9702155232SChris Fallin fr v
9802155232SChris Fallin c"#,
9902155232SChris Fallin )?;
10002155232SChris Fallin
10102155232SChris Fallin check_lldb_output(
10202155232SChris Fallin &output,
10302155232SChris Fallin r#"
10402155232SChris Fallin check: Breakpoint 1: no locations (pending)
10502155232SChris Fallin check: Unable to resolve breakpoint to any actual locations.
10602155232SChris Fallin check: 1 location added to breakpoint 1
10702155232SChris Fallin check: stop reason = breakpoint 1.1
10802155232SChris Fallin check: frame #0
10902155232SChris Fallin sameln: JIT
11002155232SChris Fallin sameln: fib(n=3)
11102155232SChris Fallin check: n = 3
11202155232SChris Fallin check: a = 0
11302155232SChris Fallin check: resuming
11402155232SChris Fallin check: exited with status
11502155232SChris Fallin "#,
11602155232SChris Fallin )?;
11702155232SChris Fallin Ok(())
11802155232SChris Fallin }
11902155232SChris Fallin
12002155232SChris Fallin #[test]
12102155232SChris Fallin #[ignore]
dwarf_fib_wasm_dwarf5() -> Result<()>12202155232SChris Fallin pub fn dwarf_fib_wasm_dwarf5() -> Result<()> {
12302155232SChris Fallin let output = lldb_with_script(
12402155232SChris Fallin &[
12502155232SChris Fallin "-Ccache=n",
12602155232SChris Fallin "-Ddebug-info",
12702155232SChris Fallin "-Oopt-level=0",
12802155232SChris Fallin "--invoke",
12902155232SChris Fallin "fib",
13002155232SChris Fallin DWARF_FIB_WASM_DWARF5,
13102155232SChris Fallin "3",
13202155232SChris Fallin ],
13302155232SChris Fallin r#"b fib
13402155232SChris Fallin r
13502155232SChris Fallin fr v
13602155232SChris Fallin c"#,
13702155232SChris Fallin )?;
13802155232SChris Fallin
13902155232SChris Fallin check_lldb_output(
14002155232SChris Fallin &output,
14102155232SChris Fallin r#"
14202155232SChris Fallin check: Breakpoint 1: no locations (pending)
14302155232SChris Fallin check: Unable to resolve breakpoint to any actual locations.
14402155232SChris Fallin check: 1 location added to breakpoint 1
14502155232SChris Fallin check: stop reason = breakpoint 1.1
14602155232SChris Fallin check: frame #0
14702155232SChris Fallin sameln: JIT
14802155232SChris Fallin sameln: fib(n=3)
14902155232SChris Fallin check: n = 3
15002155232SChris Fallin check: a = 0
15102155232SChris Fallin check: resuming
15202155232SChris Fallin check: exited with status
15302155232SChris Fallin "#,
15402155232SChris Fallin )?;
15502155232SChris Fallin Ok(())
15602155232SChris Fallin }
15702155232SChris Fallin
15802155232SChris Fallin #[test]
15902155232SChris Fallin #[ignore]
dwarf_fib_wasm_split4() -> Result<()>16002155232SChris Fallin pub fn dwarf_fib_wasm_split4() -> Result<()> {
16102155232SChris Fallin let output = lldb_with_script(
16202155232SChris Fallin &[
16302155232SChris Fallin "-Ccache=n",
16402155232SChris Fallin "-Ddebug-info",
16502155232SChris Fallin "-Oopt-level=0",
16602155232SChris Fallin "--invoke",
16702155232SChris Fallin "fib",
16802155232SChris Fallin DWARF_FIB_WASM_SPLIT4,
16902155232SChris Fallin "3",
17002155232SChris Fallin ],
17102155232SChris Fallin r#"b fib
17202155232SChris Fallin r
17302155232SChris Fallin fr v
17402155232SChris Fallin c"#,
17502155232SChris Fallin )?;
17602155232SChris Fallin
17702155232SChris Fallin check_lldb_output(
17802155232SChris Fallin &output,
17902155232SChris Fallin r#"
18002155232SChris Fallin check: Breakpoint 1: no locations (pending)
18102155232SChris Fallin check: Unable to resolve breakpoint to any actual locations.
18202155232SChris Fallin check: 1 location added to breakpoint 1
18302155232SChris Fallin check: stop reason = breakpoint 1.1
18402155232SChris Fallin check: frame #0
18502155232SChris Fallin sameln: JIT
18602155232SChris Fallin sameln: fib(n=3)
18702155232SChris Fallin check: n = 3
18802155232SChris Fallin check: a = 0
18902155232SChris Fallin check: resuming
19002155232SChris Fallin check: exited with status
19102155232SChris Fallin "#,
19202155232SChris Fallin )?;
19302155232SChris Fallin Ok(())
19402155232SChris Fallin }
19502155232SChris Fallin
19602155232SChris Fallin #[test]
19702155232SChris Fallin #[ignore]
dwarf_generic() -> Result<()>19802155232SChris Fallin pub fn dwarf_generic() -> Result<()> {
19902155232SChris Fallin let output = lldb_with_script(
20002155232SChris Fallin &["-Ccache=n", "-Ddebug-info", "-Oopt-level=0", DWARF_GENERIC],
20102155232SChris Fallin r#"br set -n debug_break -C up
20202155232SChris Fallin r
20302155232SChris Fallin p __vmctx->set()
20402155232SChris Fallin p (x + x)
20502155232SChris Fallin c
20602155232SChris Fallin p (x + x)
20702155232SChris Fallin c
20802155232SChris Fallin p inst.BaseValue + inst.DerivedValue
20902155232SChris Fallin c
21002155232SChris Fallin type lookup DerivedType
21102155232SChris Fallin c
21202155232SChris Fallin p __this->BaseValue + __this->DerivedValue
21302155232SChris Fallin c
21402155232SChris Fallin p __this->BaseValue + __this->DerivedValue
21502155232SChris Fallin c
21602155232SChris Fallin p __this->BaseValue + __this->DerivedValue
21702155232SChris Fallin c
21802155232SChris Fallin f
21902155232SChris Fallin n
22002155232SChris Fallin s
22102155232SChris Fallin v var0
22202155232SChris Fallin v var1
22302155232SChris Fallin c"#,
22402155232SChris Fallin )?;
22502155232SChris Fallin
22602155232SChris Fallin check_lldb_output(
22702155232SChris Fallin &output,
22802155232SChris Fallin r#"
22902155232SChris Fallin check: stop reason = breakpoint 1.1
23002155232SChris Fallin check: 2
23102155232SChris Fallin check: stop reason = breakpoint 1.1
23202155232SChris Fallin check: 4
23302155232SChris Fallin check: stop reason = breakpoint 1.1
23402155232SChris Fallin check: 3
23502155232SChris Fallin check: stop reason = breakpoint 1.1
23602155232SChris Fallin check: static int InstanceMethod
23702155232SChris Fallin check: static int ConstInstanceMethod
23802155232SChris Fallin check: stop reason = breakpoint 1.1
23902155232SChris Fallin check: 6
24002155232SChris Fallin check: stop reason = breakpoint 1.1
24102155232SChris Fallin check: 7
24202155232SChris Fallin check: stop reason = breakpoint 1.1
24302155232SChris Fallin check: 8
24402155232SChris Fallin check: stop reason = breakpoint 1.1
24502155232SChris Fallin check: 9
24602155232SChris Fallin check: 10
24702155232SChris Fallin check: exited with status = 0
24802155232SChris Fallin "#,
24902155232SChris Fallin )?;
25002155232SChris Fallin Ok(())
25102155232SChris Fallin }
25202155232SChris Fallin
25302155232SChris Fallin #[test]
25402155232SChris Fallin #[ignore]
dwarf_codegen_optimized() -> Result<()>25502155232SChris Fallin pub fn dwarf_codegen_optimized() -> Result<()> {
25602155232SChris Fallin let output = lldb_with_script(
25702155232SChris Fallin &[
25802155232SChris Fallin "-Ccache=n",
25902155232SChris Fallin "-Ddebug-info",
26002155232SChris Fallin "-Oopt-level=2",
26102155232SChris Fallin DWARF_CODEGEN_OPTIMIZED,
26202155232SChris Fallin ],
26302155232SChris Fallin r#"b InitializeTest
26402155232SChris Fallin r
26533224b22SAlex Crichton b dwarf_codegen_optimized.cc:25
26633224b22SAlex Crichton b dwarf_codegen_optimized.cc:26
26702155232SChris Fallin c
26802155232SChris Fallin v x
26902155232SChris Fallin c
27002155232SChris Fallin v x
27102155232SChris Fallin c"#,
27202155232SChris Fallin )?;
27302155232SChris Fallin
27402155232SChris Fallin check_lldb_output(
27502155232SChris Fallin &output,
27602155232SChris Fallin r#"
27702155232SChris Fallin check: stop reason = breakpoint 1.1
27802155232SChris Fallin check: stop reason = breakpoint 2.1
27902155232SChris Fallin check: x = 42
28002155232SChris Fallin check: stop reason = breakpoint 3.1
28102155232SChris Fallin check: x = <variable not available>
28202155232SChris Fallin check: exited with status = 0
28302155232SChris Fallin "#,
28402155232SChris Fallin )?;
28502155232SChris Fallin Ok(())
28602155232SChris Fallin }
28702155232SChris Fallin
28802155232SChris Fallin #[test]
28902155232SChris Fallin #[ignore]
dwarf_codegen_optimized_wasm_optimized() -> Result<()>29002155232SChris Fallin pub fn dwarf_codegen_optimized_wasm_optimized() -> Result<()> {
29102155232SChris Fallin let output = lldb_with_script(
29202155232SChris Fallin &[
29302155232SChris Fallin "-Ccache=n",
29402155232SChris Fallin "-Ddebug-info",
29502155232SChris Fallin "-Oopt-level=2",
29602155232SChris Fallin DWARF_CODEGEN_OPTIMIZED_WASM_OPTIMIZED,
29702155232SChris Fallin ],
29802155232SChris Fallin r#"b InitializeTest
29902155232SChris Fallin r
30033224b22SAlex Crichton b dwarf_codegen_optimized_wasm_optimized.cc:23
30133224b22SAlex Crichton b dwarf_codegen_optimized_wasm_optimized.cc:29
30202155232SChris Fallin c
30302155232SChris Fallin v b
30402155232SChris Fallin c
30502155232SChris Fallin v b
30602155232SChris Fallin c"#,
30702155232SChris Fallin )?;
30802155232SChris Fallin
30902155232SChris Fallin check_lldb_output(
31002155232SChris Fallin &output,
31102155232SChris Fallin r#"
31202155232SChris Fallin check: stop reason = breakpoint 1.1
31302155232SChris Fallin check: stop reason = breakpoint 2.1
31402155232SChris Fallin check: b = 42
31502155232SChris Fallin check: stop reason = breakpoint 3.1
31602155232SChris Fallin check: b = 43
31702155232SChris Fallin check: exited with status = 0
31802155232SChris Fallin "#,
31902155232SChris Fallin )?;
32002155232SChris Fallin Ok(())
32102155232SChris Fallin }
32202155232SChris Fallin
32302155232SChris Fallin #[test]
32402155232SChris Fallin #[ignore]
dwarf_fraction_norm() -> Result<()>32502155232SChris Fallin pub fn dwarf_fraction_norm() -> Result<()> {
32602155232SChris Fallin let output = lldb_with_script(
32702155232SChris Fallin &[
32802155232SChris Fallin "-Ccache=n",
32902155232SChris Fallin "-Oopt-level=0",
33002155232SChris Fallin "-Ddebug-info",
33102155232SChris Fallin DWARF_FRACTION_NORM,
33202155232SChris Fallin ],
33302155232SChris Fallin r#"b dwarf_fraction_norm.cc:26
33402155232SChris Fallin r
33502155232SChris Fallin p __vmctx->set(),n->denominator
33602155232SChris Fallin c"#,
33702155232SChris Fallin )?;
33802155232SChris Fallin
33902155232SChris Fallin check_lldb_output(
34002155232SChris Fallin &output,
34102155232SChris Fallin r#"
34202155232SChris Fallin check: Breakpoint 1: no locations (pending)
34302155232SChris Fallin check: stop reason = breakpoint 1.1
34402155232SChris Fallin check: frame #0
34502155232SChris Fallin sameln: norm(n=(__ptr =
34602155232SChris Fallin check: 27
34702155232SChris Fallin check: resuming
34802155232SChris Fallin "#,
34902155232SChris Fallin )?;
35002155232SChris Fallin Ok(())
35102155232SChris Fallin }
35202155232SChris Fallin
35302155232SChris Fallin #[test]
35402155232SChris Fallin #[ignore]
dwarf_two_removed_branches() -> Result<()>35502155232SChris Fallin pub fn dwarf_two_removed_branches() -> Result<()> {
35602155232SChris Fallin let output = lldb_with_script(
35702155232SChris Fallin &[
35802155232SChris Fallin "-Ccache=n",
35902155232SChris Fallin "-Oopt-level=0",
36002155232SChris Fallin "-Ddebug-info",
36102155232SChris Fallin DWARF_TWO_REMOVED_BRANCHES,
36202155232SChris Fallin ],
36302155232SChris Fallin r#"r"#,
36402155232SChris Fallin )?;
36502155232SChris Fallin
36602155232SChris Fallin // We are simply checking that the output compiles.
36702155232SChris Fallin check_lldb_output(
36802155232SChris Fallin &output,
36902155232SChris Fallin r#"
37002155232SChris Fallin check: exited with status
37102155232SChris Fallin "#,
37202155232SChris Fallin )?;
37302155232SChris Fallin Ok(())
37402155232SChris Fallin }
37502155232SChris Fallin
37602155232SChris Fallin #[test]
37702155232SChris Fallin #[ignore]
dwarf_spilled_frame_base() -> Result<()>37802155232SChris Fallin pub fn dwarf_spilled_frame_base() -> Result<()> {
37902155232SChris Fallin let output = lldb_with_script(
38002155232SChris Fallin &[
38102155232SChris Fallin "-Ccache=n",
38202155232SChris Fallin "-Oopt-level=0",
38302155232SChris Fallin "-Ddebug-info",
38402155232SChris Fallin DWARF_SPILLED_FRAME_BASE,
38502155232SChris Fallin ],
38602155232SChris Fallin r#"b dwarf_spilled_frame_base.c:13
38702155232SChris Fallin r
38802155232SChris Fallin fr v i
38902155232SChris Fallin n
39002155232SChris Fallin fr v i
39102155232SChris Fallin n
39202155232SChris Fallin fr v i
39302155232SChris Fallin n
39402155232SChris Fallin fr v i
39502155232SChris Fallin n
39602155232SChris Fallin fr v i
39702155232SChris Fallin n
39802155232SChris Fallin fr v i
39902155232SChris Fallin c
40002155232SChris Fallin "#,
40102155232SChris Fallin )?;
40202155232SChris Fallin
40302155232SChris Fallin // Check that if the frame base (shadow frame pointer) local
40402155232SChris Fallin // is spilled, we can still read locals that reference it.
40502155232SChris Fallin check_lldb_output(
40602155232SChris Fallin &output,
40702155232SChris Fallin r#"
40802155232SChris Fallin check: i = 0
40902155232SChris Fallin check: i = 1
41002155232SChris Fallin check: i = 1
41102155232SChris Fallin check: i = 1
41202155232SChris Fallin check: i = 1
41302155232SChris Fallin check: i = 1
41402155232SChris Fallin check: exited with status
41502155232SChris Fallin "#,
41602155232SChris Fallin )?;
41702155232SChris Fallin Ok(())
41802155232SChris Fallin }
41902155232SChris Fallin
42002155232SChris Fallin #[test]
42102155232SChris Fallin #[ignore]
dwarf_fission() -> Result<()>42202155232SChris Fallin pub fn dwarf_fission() -> Result<()> {
42302155232SChris Fallin let output = lldb_with_script(
42402155232SChris Fallin &["-Ccache=n", "-Ddebug-info", "-Oopt-level=0", DWARF_FISSION],
42502155232SChris Fallin r#"breakpoint set --file dwarf_fission.c --line 8
42602155232SChris Fallin r
42702155232SChris Fallin fr v
42802155232SChris Fallin s
42902155232SChris Fallin fr v
43002155232SChris Fallin c"#,
43102155232SChris Fallin )?;
43202155232SChris Fallin
43302155232SChris Fallin check_lldb_output(
43402155232SChris Fallin &output,
43502155232SChris Fallin r#"
43602155232SChris Fallin check: Breakpoint 1: no locations (pending)
43702155232SChris Fallin check: Unable to resolve breakpoint to any actual locations.
43802155232SChris Fallin check: 1 location added to breakpoint 1
43902155232SChris Fallin check: stop reason = breakpoint 1.1
44002155232SChris Fallin check: i = 1
44102155232SChris Fallin check: stop reason = step in
44202155232SChris Fallin check: i = 2
44302155232SChris Fallin check: resuming
44402155232SChris Fallin check: exited with status = 0
44502155232SChris Fallin "#,
44602155232SChris Fallin )?;
44702155232SChris Fallin Ok(())
44802155232SChris Fallin }
44902155232SChris Fallin
test_dwarf_simple(wasm: &str, extra_args: &[&str]) -> Result<()>45002155232SChris Fallin fn test_dwarf_simple(wasm: &str, extra_args: &[&str]) -> Result<()> {
45102155232SChris Fallin println!("testing {wasm:?}");
4520a55f804SAlex Crichton let mut args = vec![
4530a55f804SAlex Crichton "-Ccache=n",
4540a55f804SAlex Crichton "-Oopt-level=0",
4550a55f804SAlex Crichton "-Ddebug-info",
4560a55f804SAlex Crichton "-Wshared-memory",
4570a55f804SAlex Crichton ];
45802155232SChris Fallin args.extend(extra_args);
45902155232SChris Fallin args.push(wasm);
46002155232SChris Fallin let output = lldb_with_script(
46102155232SChris Fallin &args,
46202155232SChris Fallin r#"
46302155232SChris Fallin breakpoint set --file dwarf_simple.rs --line 3
46402155232SChris Fallin breakpoint set --file dwarf_simple.rs --line 5
46502155232SChris Fallin r
46602155232SChris Fallin fr v
46702155232SChris Fallin c
46802155232SChris Fallin fr v
46902155232SChris Fallin breakpoint disable 2
47002155232SChris Fallin c"#,
47102155232SChris Fallin )?;
47202155232SChris Fallin
47302155232SChris Fallin check_lldb_output(
47402155232SChris Fallin &output,
47502155232SChris Fallin r#"
47602155232SChris Fallin check: Breakpoint 1: no locations (pending)
47702155232SChris Fallin check: Unable to resolve breakpoint to any actual locations.
47802155232SChris Fallin check: 1 location added to breakpoint 1
47902155232SChris Fallin check: stop reason = breakpoint 1.1
48002155232SChris Fallin check: dwarf_simple.rs:3
48102155232SChris Fallin check: a = 100
48202155232SChris Fallin check: dwarf_simple.rs:5
48302155232SChris Fallin check: a = 110
48402155232SChris Fallin check: b = 117
48502155232SChris Fallin check: resuming
48602155232SChris Fallin check: exited with status = 0
48702155232SChris Fallin "#,
48802155232SChris Fallin )?;
48902155232SChris Fallin Ok(())
49002155232SChris Fallin }
49102155232SChris Fallin
49202155232SChris Fallin #[test]
49302155232SChris Fallin #[ignore]
dwarf_simple() -> Result<()>49402155232SChris Fallin fn dwarf_simple() -> Result<()> {
49502155232SChris Fallin for wasm in [DWARF_SIMPLE, DWARF_SIMPLE_COMPONENT] {
49602155232SChris Fallin test_dwarf_simple(wasm, &[])?;
49702155232SChris Fallin }
49802155232SChris Fallin Ok(())
49902155232SChris Fallin }
50002155232SChris Fallin
50102155232SChris Fallin #[test]
50202155232SChris Fallin #[ignore]
dwarf_imported_memory() -> Result<()>50302155232SChris Fallin fn dwarf_imported_memory() -> Result<()> {
50402155232SChris Fallin test_dwarf_simple(
50502155232SChris Fallin DWARF_IMPORTED_MEMORY,
50602155232SChris Fallin &["--preload=env=./tests/all/native_debug/satisfy_memory_import.wat"],
50702155232SChris Fallin )
50802155232SChris Fallin }
50902155232SChris Fallin
51002155232SChris Fallin #[test]
51102155232SChris Fallin #[ignore]
dwarf_shared_memory() -> Result<()>51202155232SChris Fallin fn dwarf_shared_memory() -> Result<()> {
51302155232SChris Fallin test_dwarf_simple(DWARF_SHARED_MEMORY, &[])
51402155232SChris Fallin }
51502155232SChris Fallin
51602155232SChris Fallin #[test]
51702155232SChris Fallin #[ignore]
dwarf_multiple_codegen_units() -> Result<()>51802155232SChris Fallin fn dwarf_multiple_codegen_units() -> Result<()> {
51902155232SChris Fallin for wasm in [
52002155232SChris Fallin DWARF_MULTIPLE_CODEGEN_UNITS,
52102155232SChris Fallin DWARF_MULTIPLE_CODEGEN_UNITS_COMPONENT,
52202155232SChris Fallin ] {
52302155232SChris Fallin println!("testing {wasm:?}");
52402155232SChris Fallin let output = lldb_with_script(
52502155232SChris Fallin &["-Ccache=n", "-Oopt-level=0", "-Ddebug-info", wasm],
52602155232SChris Fallin r#"
52702155232SChris Fallin breakpoint set --file dwarf_multiple_codegen_units.rs --line 3
52802155232SChris Fallin breakpoint set --file dwarf_multiple_codegen_units.rs --line 10
52902155232SChris Fallin r
53002155232SChris Fallin fr v
53102155232SChris Fallin c
53202155232SChris Fallin fr v
53302155232SChris Fallin breakpoint delete 2
53402155232SChris Fallin finish
53502155232SChris Fallin c"#,
53602155232SChris Fallin )?;
53702155232SChris Fallin
53802155232SChris Fallin check_lldb_output(
53902155232SChris Fallin &output,
54002155232SChris Fallin r#"
54102155232SChris Fallin check: Breakpoint 1: no locations (pending)
54202155232SChris Fallin check: Breakpoint 2: no locations (pending)
54302155232SChris Fallin check: stop reason = breakpoint 1.1
54402155232SChris Fallin check: foo::bar(a)
54502155232SChris Fallin check: a = 3
54602155232SChris Fallin check: sum += i
54702155232SChris Fallin check: x = 3
54802155232SChris Fallin check: sum = 0
54902155232SChris Fallin check: 1 breakpoints deleted
55002155232SChris Fallin check: Return value: $(=.*) 3
55102155232SChris Fallin check: exited with status = 0
55202155232SChris Fallin "#,
55302155232SChris Fallin )?;
55402155232SChris Fallin }
55502155232SChris Fallin Ok(())
55602155232SChris Fallin }
557*9fe4cc18SPhilip Craig
558*9fe4cc18SPhilip Craig #[test]
559*9fe4cc18SPhilip Craig #[ignore]
dwarf_cold_block() -> Result<()>560*9fe4cc18SPhilip Craig pub fn dwarf_cold_block() -> Result<()> {
561*9fe4cc18SPhilip Craig let output = lldb_with_script(
562*9fe4cc18SPhilip Craig &[
563*9fe4cc18SPhilip Craig "-Ccache=n",
564*9fe4cc18SPhilip Craig "-Oopt-level=0",
565*9fe4cc18SPhilip Craig "-Ddebug-info",
566*9fe4cc18SPhilip Craig DWARF_COLD_BLOCK,
567*9fe4cc18SPhilip Craig ],
568*9fe4cc18SPhilip Craig r#"b foo
569*9fe4cc18SPhilip Craig r
570*9fe4cc18SPhilip Craig p __vmctx->set(),*f1
571*9fe4cc18SPhilip Craig n
572*9fe4cc18SPhilip Craig p __vmctx->set(),*f1
573*9fe4cc18SPhilip Craig n
574*9fe4cc18SPhilip Craig p __vmctx->set(),*f1
575*9fe4cc18SPhilip Craig n
576*9fe4cc18SPhilip Craig p __vmctx->set(),*f1
577*9fe4cc18SPhilip Craig c"#,
578*9fe4cc18SPhilip Craig )?;
579*9fe4cc18SPhilip Craig
580*9fe4cc18SPhilip Craig check_lldb_output(
581*9fe4cc18SPhilip Craig &output,
582*9fe4cc18SPhilip Craig r#"
583*9fe4cc18SPhilip Craig check: Breakpoint 1: no locations (pending)
584*9fe4cc18SPhilip Craig check: stop reason = breakpoint 1.1
585*9fe4cc18SPhilip Craig check: frame #0
586*9fe4cc18SPhilip Craig sameln: foo(f1=(__ptr =
587*9fe4cc18SPhilip Craig check: data = 42
588*9fe4cc18SPhilip Craig check: data = 42
589*9fe4cc18SPhilip Craig check: data = 42
590*9fe4cc18SPhilip Craig check: data = 42
591*9fe4cc18SPhilip Craig check: resuming
592*9fe4cc18SPhilip Craig "#,
593*9fe4cc18SPhilip Craig )?;
594*9fe4cc18SPhilip Craig Ok(())
595*9fe4cc18SPhilip Craig }
596