From 9737fc3e3e3f7d19ca683c5e7ba064278239e4a3 Mon Sep 17 00:00:00 2001 From: Chris Denton Date: Wed, 13 Nov 2024 13:51:48 +0000 Subject: [PATCH 1/2] Allow some static_mut_refs --- src/dbghelp.rs | 20 ++++++++++++-------- src/symbolize/gimli.rs | 2 ++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/dbghelp.rs b/src/dbghelp.rs index f8ea9192..09701440 100644 --- a/src/dbghelp.rs +++ b/src/dbghelp.rs @@ -111,6 +111,8 @@ macro_rules! dbghelp { #[allow(dead_code)] impl Init { $(pub fn $name(&self) -> $name { + // FIXME: https://github.com/rust-lang/backtrace-rs/issues/678 + #[allow(static_mut_refs)] unsafe { DBGHELP.$name().unwrap() } @@ -318,24 +320,26 @@ pub fn init() -> Result { // functions in it, and that's detailed more below. We only do this // once, though, so we've got a global boolean indicating whether we're // done yet or not. + // FIXME: https://github.com/rust-lang/backtrace-rs/issues/678 + #[allow(static_mut_refs)] DBGHELP.ensure_open()?; static mut INITIALIZED: bool = false; if !INITIALIZED { - set_optional_options(); + set_optional_options(ret.dbghelp()); INITIALIZED = true; } Ok(ret) } } -fn set_optional_options() -> Option<()> { +unsafe fn set_optional_options(dbghelp: *mut Dbghelp) -> Option<()> { unsafe { - let orig = DBGHELP.SymGetOptions()?(); + let orig = (*dbghelp).SymGetOptions()?(); // Ensure that the `SYMOPT_DEFERRED_LOADS` flag is set, because // according to MSVC's own docs about this: "This is the fastest, most // efficient way to use the symbol handler.", so let's do that! - DBGHELP.SymSetOptions()?(orig | SYMOPT_DEFERRED_LOADS); + (*dbghelp).SymSetOptions()?(orig | SYMOPT_DEFERRED_LOADS); // Actually initialize symbols with MSVC. Note that this can fail, but we // ignore it. There's not a ton of prior art for this per se, but LLVM @@ -349,7 +353,7 @@ fn set_optional_options() -> Option<()> { // the time, but now that it's using this crate it means that someone will // get to initialization first and the other will pick up that // initialization. - DBGHELP.SymInitializeW()?(GetCurrentProcess(), ptr::null_mut(), TRUE); + (*dbghelp).SymInitializeW()?(GetCurrentProcess(), ptr::null_mut(), TRUE); // The default search path for dbghelp will only look in the current working // directory and (possibly) `_NT_SYMBOL_PATH` and `_NT_ALT_SYMBOL_PATH`. @@ -363,7 +367,7 @@ fn set_optional_options() -> Option<()> { search_path_buf.resize(1024, 0); // Prefill the buffer with the current search path. - if DBGHELP.SymGetSearchPathW()?( + if (*dbghelp).SymGetSearchPathW()?( GetCurrentProcess(), search_path_buf.as_mut_ptr(), search_path_buf.len() as _, @@ -383,7 +387,7 @@ fn set_optional_options() -> Option<()> { let mut search_path = SearchPath::new(search_path_buf); // Update the search path to include the directory of the executable and each DLL. - DBGHELP.EnumerateLoadedModulesW64()?( + (*dbghelp).EnumerateLoadedModulesW64()?( GetCurrentProcess(), Some(enum_loaded_modules_callback), ((&mut search_path) as *mut SearchPath) as *mut c_void, @@ -392,7 +396,7 @@ fn set_optional_options() -> Option<()> { let new_search_path = search_path.finalize(); // Set the new search path. - DBGHELP.SymSetSearchPathW()?(GetCurrentProcess(), new_search_path.as_ptr()); + (*dbghelp).SymSetSearchPathW()?(GetCurrentProcess(), new_search_path.as_ptr()); } Some(()) } diff --git a/src/symbolize/gimli.rs b/src/symbolize/gimli.rs index b9f6f3d6..b3b8d057 100644 --- a/src/symbolize/gimli.rs +++ b/src/symbolize/gimli.rs @@ -363,6 +363,8 @@ impl Cache { // never happen, and symbolicating backtraces would be ssssllllooooowwww. static mut MAPPINGS_CACHE: Option = None; + // FIXME: https://github.com/rust-lang/backtrace-rs/issues/678 + #[allow(static_mut_refs)] f(MAPPINGS_CACHE.get_or_insert_with(Cache::new)) } From 2896a67bfa972254b2bb9e704561a500fa6d3817 Mon Sep 17 00:00:00 2001 From: Chris Denton Date: Wed, 13 Nov 2024 14:01:33 +0000 Subject: [PATCH 2/2] wasm32-wasi -> wasm32-wasip1 --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 140904b2..04a8c46f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -235,7 +235,7 @@ jobs: matrix: target: - wasm32-unknown-unknown - - wasm32-wasi + - wasm32-wasip1 - x86_64-unknown-fuchsia - x86_64-fortanix-unknown-sgx - x86_64-unknown-illumos