-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Description
This is mostly directed at @chriswailes, @maurer, and @mgeisler because you are the target maintainers for our Android targets.
I've been looking through our debuginfo tests, and I've found that a few of them were disabled years ago never revisited. Some of those tests are disabled only on Android. Based on the history linked from #10381, the last attempt to re-enable some of the mass-ignored android debuginfo tests was in 2015. So I'm not expecting any of you to really know the history here.
But currently (and I do not know for how long) we do not run any debuginfo tests on Android: https://github.com/rust-lang-ci/rust/actions/runs/10409799292/job/28830241725#step:25:23109
It seems like this is because compiletest
looks for a gdb
:
rust/src/tools/compiletest/src/lib.rs
Lines 1038 to 1085 in 0f442e2
/// Returns (Path to GDB, GDB Version, GDB has Rust Support) | |
fn analyze_gdb( | |
gdb: Option<String>, | |
target: &str, | |
android_cross_path: &PathBuf, | |
) -> (Option<String>, Option<u32>, bool) { | |
#[cfg(not(windows))] | |
const GDB_FALLBACK: &str = "gdb"; | |
#[cfg(windows)] | |
const GDB_FALLBACK: &str = "gdb.exe"; | |
const MIN_GDB_WITH_RUST: u32 = 7011010; | |
let fallback_gdb = || { | |
if is_android_gdb_target(target) { | |
let mut gdb_path = match android_cross_path.to_str() { | |
Some(x) => x.to_owned(), | |
None => panic!("cannot find android cross path"), | |
}; | |
gdb_path.push_str("/bin/gdb"); | |
gdb_path | |
} else { | |
GDB_FALLBACK.to_owned() | |
} | |
}; | |
let gdb = match gdb { | |
None => fallback_gdb(), | |
Some(ref s) if s.is_empty() => fallback_gdb(), // may be empty if configure found no gdb | |
Some(ref s) => s.to_owned(), | |
}; | |
let mut version_line = None; | |
if let Ok(output) = Command::new(&gdb).arg("--version").output() { | |
if let Some(first_line) = String::from_utf8_lossy(&output.stdout).lines().next() { | |
version_line = Some(first_line.to_string()); | |
} | |
} | |
let version = match version_line { | |
Some(line) => extract_gdb_version(&line), | |
None => return (None, None, false), | |
}; | |
let gdb_native_rust = version.map_or(false, |v| v >= MIN_GDB_WITH_RUST); | |
(Some(gdb), version, gdb_native_rust) | |
} |
compiletest
doesn't find one, we skip the entire suite.
There is a fair amount of code in compiletest for handling debuginfo tests on Android. Since none of any of the code associated with running debuginfo tests on Android is currently being exercised, I suspect all of that code is just a time bomb for whoever eventually decides that we need those tests to be enabled.
In #128913 I am removing a number of ignore-test
annotations from the test suite, and replacing them with more specific ignores where required. Because the entire suite is ignored for Android, I cannot do this.
So I have a few questions:
- Is anyone running the debuginfo test suite on Android?
- Would anyone object if I blindly remove all the other
ignore-android
annotations from the test suite? - Is anyone planning on working to re-enable the Android debuginfo tests? I've poked around, and it uses a bunch of Android SDK/emulator arcana that I do not understand. For example, I tried installing
gdb-multiarch
in the image, which results in the test suite managing to executearm-linux-androideabi-gdb
(which I cannot find in the container) but if I addset architecture
to the gdb commands, the output is just i686/x86_64. - In my searching around for explanations about how to debug on Android, I found some mentions that one should be using lldb instead. Is that right?