Skip to content

Commit 646873b

Browse files
committed
Auto merge of #40684 - alexcrichton:another-bet-anext, r=brson
[beta] std: Back out backtrace pruning logic on beta It was discovered #40264 that this backtrace pruning logic is a little too aggressive, so while we figure how out to handle #40264 this commit backs out the changes on beta to prune frames. Note that other cosmetic changes, such as better path printing and such remain.
2 parents b7c2766 + 7573111 commit 646873b

File tree

2 files changed

+22
-81
lines changed

2 files changed

+22
-81
lines changed

src/ci/docker/emscripten/build-emscripten.sh

+18-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,24 @@ exit 1
2929
}
3030

3131
curl https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz | \
32-
tar xzf -
32+
tar xzf -
33+
34+
# Some versions of the EMSDK archive have their contents in .emsdk-portable
35+
# and others in emsdk_portable. Make sure the EMSDK ends up in a fixed path.
36+
if [ -d emsdk-portable ]; then
37+
mv emsdk-portable emsdk_portable
38+
fi
39+
40+
if [ ! -d emsdk_portable ]; then
41+
echo "ERROR: Invalid emsdk archive. Dumping working directory." >&2
42+
ls -l
43+
exit 1
44+
fi
45+
46+
# Some versions of the EMSDK set the permissions of the root directory to
47+
# 0700. Ensure the directory is readable by all users.
48+
chmod 755 emsdk_portable
49+
3350
source emsdk_portable/emsdk_env.sh
3451
hide_output emsdk update
3552
hide_output emsdk install --build=Release sdk-tag-1.37.1-32bit

src/libstd/sys_common/backtrace.rs

+4-80
Original file line numberDiff line numberDiff line change
@@ -93,87 +93,11 @@ fn _print(w: &mut Write, format: PrintFormat) -> io::Result<()> {
9393
Ok(())
9494
}
9595

96-
fn filter_frames(frames: &[Frame],
97-
format: PrintFormat,
98-
context: &BacktraceContext) -> (usize, usize)
96+
fn filter_frames(_frames: &[Frame],
97+
_format: PrintFormat,
98+
_context: &BacktraceContext) -> (usize, usize)
9999
{
100-
if format == PrintFormat::Full {
101-
return (0, 0);
102-
}
103-
104-
// We want to filter out frames with some prefixes
105-
// from both top and bottom of the call stack.
106-
static BAD_PREFIXES_TOP: &'static [&'static str] = &[
107-
"_ZN3std3sys3imp9backtrace",
108-
"ZN3std3sys3imp9backtrace",
109-
"std::sys::imp::backtrace",
110-
"_ZN3std10sys_common9backtrace",
111-
"ZN3std10sys_common9backtrace",
112-
"std::sys_common::backtrace",
113-
"_ZN3std9panicking",
114-
"ZN3std9panicking",
115-
"std::panicking",
116-
"_ZN4core9panicking",
117-
"ZN4core9panicking",
118-
"core::panicking",
119-
"_ZN4core6result13unwrap_failed",
120-
"ZN4core6result13unwrap_failed",
121-
"core::result::unwrap_failed",
122-
"rust_begin_unwind",
123-
"_ZN4drop",
124-
"mingw_set_invalid_parameter_handler",
125-
];
126-
static BAD_PREFIXES_BOTTOM: &'static [&'static str] = &[
127-
"_ZN3std9panicking",
128-
"ZN3std9panicking",
129-
"std::panicking",
130-
"_ZN3std5panic",
131-
"ZN3std5panic",
132-
"std::panic",
133-
"_ZN4core9panicking",
134-
"ZN4core9panicking",
135-
"core::panicking",
136-
"_ZN3std2rt10lang_start",
137-
"ZN3std2rt10lang_start",
138-
"std::rt::lang_start",
139-
"panic_unwind::__rust_maybe_catch_panic",
140-
"__rust_maybe_catch_panic",
141-
"_rust_maybe_catch_panic",
142-
"__libc_start_main",
143-
"__rust_try",
144-
"_start",
145-
"main",
146-
"BaseThreadInitThunk",
147-
"RtlInitializeExceptionChain",
148-
"__scrt_common_main_seh",
149-
"_ZN4drop",
150-
"mingw_set_invalid_parameter_handler",
151-
];
152-
153-
let is_good_frame = |frame: Frame, bad_prefixes: &[&str]| {
154-
resolve_symname(frame, |symname| {
155-
if let Some(mangled_symbol_name) = symname {
156-
if !bad_prefixes.iter().any(|s| mangled_symbol_name.starts_with(s)) {
157-
return Ok(())
158-
}
159-
}
160-
Err(io::Error::from(io::ErrorKind::Other))
161-
}, context).is_ok()
162-
};
163-
164-
let skipped_before = frames.iter().position(|frame| {
165-
is_good_frame(*frame, BAD_PREFIXES_TOP)
166-
}).unwrap_or(frames.len());
167-
let skipped_after = frames[skipped_before..].iter().rev().position(|frame| {
168-
is_good_frame(*frame, BAD_PREFIXES_BOTTOM)
169-
}).unwrap_or(frames.len() - skipped_before);
170-
171-
if skipped_before + skipped_after == frames.len() {
172-
// Avoid showing completely empty backtraces
173-
return (0, 0);
174-
}
175-
176-
(skipped_before, skipped_after)
100+
(0, 0)
177101
}
178102

179103
/// Controls how the backtrace should be formated.

0 commit comments

Comments
 (0)