Skip to content

Commit 99e8663

Browse files
committed
auto merge of #10261 : ksh8281/rust/makecheck_debuginfo_arm-linux-androideabi, r=brson
In order to pass make check on android target credit to @ksh8281
2 parents 7fb583b + 4e54828 commit 99e8663

File tree

63 files changed

+264
-22
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+264
-22
lines changed

src/compiletest/compiletest.rs

+13
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,19 @@ pub fn mode_str(mode: mode) -> ~str {
220220
}
221221

222222
pub fn run_tests(config: &config) {
223+
if config.target == ~"arm-linux-androideabi" {
224+
match config.mode{
225+
mode_debug_info => {
226+
println("arm-linux-androideabi debug-info \
227+
test uses tcp 5039 port. please reserve it");
228+
//arm-linux-androideabi debug-info test uses remote debugger
229+
//so, we test 1 task at once
230+
os::setenv("RUST_TEST_TASKS","1");
231+
}
232+
_ =>{}
233+
}
234+
}
235+
223236
let opts = test_opts(config);
224237
let tests = make_tests(config);
225238
// sadly osx needs some file descriptor limits raised for running tests in

src/compiletest/procsrv.rs

+23
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,26 @@ pub fn run(lib_path: &str,
6767
err: str::from_utf8(output.error)
6868
}
6969
}
70+
71+
pub fn run_background(lib_path: &str,
72+
prog: &str,
73+
args: &[~str],
74+
env: ~[(~str, ~str)],
75+
input: Option<~str>) -> run::Process {
76+
77+
let env = env + target_env(lib_path, prog);
78+
let mut process = run::Process::new(prog, args, run::ProcessOptions {
79+
env: Some(env),
80+
dir: None,
81+
in_fd: None,
82+
out_fd: None,
83+
err_fd: None
84+
});
85+
86+
for input in input.iter() {
87+
process.input().write(input.as_bytes());
88+
}
89+
90+
return process;
91+
}
92+

src/compiletest/runtest.rs

+112-22
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ use std::rt::io::File;
2626
use std::os;
2727
use std::str;
2828
use std::vec;
29+
use std::rt::io::net::tcp;
30+
use std::rt::io::net::ip::{Ipv4Addr, SocketAddr};
31+
use std::task;
32+
use std::rt::io::timer;
2933

3034
use extra::test::MetricMap;
3135

@@ -245,6 +249,7 @@ actual:\n\
245249
}
246250

247251
fn run_debuginfo_test(config: &config, props: &TestProps, testfile: &Path) {
252+
248253
// do not optimize debuginfo tests
249254
let mut config = match config.rustcflags {
250255
Some(ref flags) => config {
@@ -254,39 +259,125 @@ fn run_debuginfo_test(config: &config, props: &TestProps, testfile: &Path) {
254259
None => (*config).clone()
255260
};
256261
let config = &mut config;
257-
let cmds = props.debugger_cmds.connect("\n");
258262
let check_lines = &props.check_lines;
263+
let mut cmds = props.debugger_cmds.connect("\n");
259264

260265
// compile test file (it shoud have 'compile-flags:-g' in the header)
261266
let mut ProcRes = compile_test(config, props, testfile);
262267
if ProcRes.status != 0 {
263268
fatal_ProcRes(~"compilation failed!", &ProcRes);
264269
}
265270

266-
// write debugger script
267-
let script_str = [~"set charset UTF-8",
268-
cmds,
269-
~"quit\n"].connect("\n");
270-
debug!("script_str = {}", script_str);
271-
dump_output_file(config, testfile, script_str, "debugger.script");
272-
273-
// run debugger script with gdb
274-
#[cfg(windows)]
275-
fn debugger() -> ~str { ~"gdb.exe" }
276-
#[cfg(unix)]
277-
fn debugger() -> ~str { ~"gdb" }
278-
let debugger_script = make_out_name(config, testfile, "debugger.script");
279271
let exe_file = make_exe_name(config, testfile);
280-
// FIXME (#9639): This needs to handle non-utf8 paths
281-
let debugger_opts = ~[~"-quiet", ~"-batch", ~"-nx",
282-
~"-command=" + debugger_script.as_str().unwrap().to_owned(),
283-
exe_file.as_str().unwrap().to_owned()];
284-
let ProcArgs = ProcArgs {prog: debugger(), args: debugger_opts};
285-
ProcRes = compose_and_run(config, testfile, ProcArgs, ~[], "", None);
272+
273+
let mut ProcArgs;
274+
match config.target {
275+
~"arm-linux-androideabi" => {
276+
if (config.adb_device_status) {
277+
278+
cmds = cmds.replace("run","continue");
279+
280+
// write debugger script
281+
let script_str = [~"set charset UTF-8",
282+
format!("file {}",exe_file.as_str().unwrap().to_owned()),
283+
~"target remote :5039",
284+
cmds,
285+
~"quit"].connect("\n");
286+
debug!("script_str = {}", script_str);
287+
dump_output_file(config, testfile, script_str, "debugger.script");
288+
289+
290+
procsrv::run("", config.adb_path.clone(),
291+
[~"push", exe_file.as_str().unwrap().to_owned(), config.adb_test_dir.clone()],
292+
~[(~"",~"")], Some(~""));
293+
294+
procsrv::run("", config.adb_path,
295+
[~"forward", ~"tcp:5039", ~"tcp:5039"],
296+
~[(~"",~"")], Some(~""));
297+
298+
let adb_arg = format!("export LD_LIBRARY_PATH={}; gdbserver :5039 {}/{}",
299+
config.adb_test_dir.clone(), config.adb_test_dir.clone(),
300+
str::from_utf8(exe_file.filename().unwrap())).clone();
301+
302+
let mut process = procsrv::run_background("", config.adb_path.clone(),
303+
[~"shell",adb_arg.clone()],~[(~"",~"")], Some(~""));
304+
loop {
305+
//waiting 1 second for gdbserver start
306+
timer::sleep(1000);
307+
let result = do task::try {
308+
tcp::TcpStream::connect(
309+
SocketAddr { ip: Ipv4Addr(127, 0, 0, 1), port: 5039 });
310+
};
311+
if result.is_err() {
312+
continue;
313+
}
314+
break;
315+
}
316+
317+
let args = split_maybe_args(&config.rustcflags);
318+
let mut tool_path:~str = ~"";
319+
for arg in args.iter() {
320+
if arg.contains("--android-cross-path=") {
321+
tool_path = arg.replace("--android-cross-path=","");
322+
break;
323+
}
324+
}
325+
326+
if tool_path.equals(&~"") {
327+
fatal(~"cannot found android cross path");
328+
}
329+
330+
let debugger_script = make_out_name(config, testfile, "debugger.script");
331+
// FIXME (#9639): This needs to handle non-utf8 paths
332+
let debugger_opts = ~[~"-quiet", ~"-batch", ~"-nx",
333+
"-command=" + debugger_script.as_str().unwrap().to_owned()];
334+
335+
let procsrv::Result{ out, err, status }=
336+
procsrv::run("",
337+
tool_path.append("/bin/arm-linux-androideabi-gdb"),
338+
debugger_opts, ~[(~"",~"")], None);
339+
let cmdline = {
340+
let cmdline = make_cmdline("", "arm-linux-androideabi-gdb", debugger_opts);
341+
logv(config, format!("executing {}", cmdline));
342+
cmdline
343+
};
344+
345+
ProcRes = ProcRes {status: status,
346+
stdout: out,
347+
stderr: err,
348+
cmdline: cmdline};
349+
process.force_destroy();
350+
}
351+
}
352+
353+
_=> {
354+
// write debugger script
355+
let script_str = [~"set charset UTF-8",
356+
cmds,
357+
~"quit\n"].connect("\n");
358+
debug!("script_str = {}", script_str);
359+
dump_output_file(config, testfile, script_str, "debugger.script");
360+
361+
// run debugger script with gdb
362+
#[cfg(windows)]
363+
fn debugger() -> ~str { ~"gdb.exe" }
364+
#[cfg(unix)]
365+
fn debugger() -> ~str { ~"gdb" }
366+
367+
let debugger_script = make_out_name(config, testfile, "debugger.script");
368+
369+
// FIXME (#9639): This needs to handle non-utf8 paths
370+
let debugger_opts = ~[~"-quiet", ~"-batch", ~"-nx",
371+
"-command=" + debugger_script.as_str().unwrap().to_owned(),
372+
exe_file.as_str().unwrap().to_owned()];
373+
ProcArgs = ProcArgs {prog: debugger(), args: debugger_opts};
374+
ProcRes = compose_and_run(config, testfile, ProcArgs, ~[], "", None);
375+
}
376+
}
377+
286378
if ProcRes.status != 0 {
287379
fatal(~"gdb failed to execute");
288380
}
289-
290381
let num_check_lines = check_lines.len();
291382
if num_check_lines > 0 {
292383
// Allow check lines to leave parts unspecified (e.g., uninitialized
@@ -834,7 +925,6 @@ fn _arm_exec_compiled_test(config: &config, props: &TestProps,
834925
for tv in args.args.iter() {
835926
runargs.push(tv.to_owned());
836927
}
837-
838928
procsrv::run("", config.adb_path, runargs, ~[(~"",~"")], Some(~""));
839929
840930
// get exitcode of result

src/test/debug-info/basic-types-metadata.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/basic-types.rs

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
// about UTF-32 character encoding and will print a rust char as only
1515
// its numerical value.
1616

17+
// xfail-android
18+
1719
// compile-flags:-Z extra-debug-info
1820
// debugger:rbreak zzz
1921
// debugger:run

src/test/debug-info/borrowed-basic.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// Gdb doesn't know about UTF-32 character encoding and will print a rust char as only
1214
// its numerical value.
1315

src/test/debug-info/borrowed-c-style-enum.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/borrowed-enum.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/boxed-vec.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
#[feature(managed_boxes)];
1214

1315
// compile-flags:-Z extra-debug-info

src/test/debug-info/by-value-non-immediate-argument.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/by-value-self-argument-in-trait-impl.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
#[feature(managed_boxes)];
1214

1315
// compile-flags:-Z extra-debug-info

src/test/debug-info/c-style-enum.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/closure-in-generic-function.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/destructured-fn-argument.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
#[feature(managed_boxes)];
1214

1315
// compile-flags:-Z extra-debug-info

src/test/debug-info/evec-in-struct.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:set print pretty off
1315
// debugger:rbreak zzz

src/test/debug-info/generic-function.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/generic-functions-nested.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/generic-method-on-generic-struct.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/generic-static-method-on-struct-and-enum.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/generic-struct-style-enum.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:set print union on
1315
// debugger:rbreak zzz

src/test/debug-info/generic-struct.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:rbreak zzz
1315
// debugger:run

src/test/debug-info/generic-tuple-style-enum.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// xfail-android
12+
1113
// compile-flags:-Z extra-debug-info
1214
// debugger:set print union on
1315
// debugger:rbreak zzz

src/test/debug-info/lexical-scope-in-for-loop.rs

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// except according to those terms.
1010

1111
// xfail-win32
12+
// xfail-android
1213

1314
// compile-flags:-Z extra-debug-info
1415
// debugger:rbreak zzz

0 commit comments

Comments
 (0)