From: Mike Frysinger Date: Mon, 16 May 2011 18:48:31 +0000 (+0000) Subject: sim: tests: support .S/.c files X-Git-Tag: sid-snapshot-20110601~169 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0641104b2e34f747a7b5ffb36f91b08f3c4311e6;p=thirdparty%2Fbinutils-gdb.git sim: tests: support .S/.c files Rather than requiring all sim tests to be preprocessed .s files, add support for .S and .c files so we can easily write code using a higher level language like C. Signed-off-by: Mike Frysinger --- diff --git a/sim/testsuite/ChangeLog b/sim/testsuite/ChangeLog index ac72a3c4557..9755b78f0e8 100644 --- a/sim/testsuite/ChangeLog +++ b/sim/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2011-05-16 Mike Frysinger + + * lib/sim-defs.exp: Support cc tag in test files. + (run_sim_test): Support global_cc_options in boards files. Convert + assembler options into compiler options (c_as_options) with -Wa. + Convert linker options into compiler options (c_ld_options) with -Wl. + Compile .c and .S files into .x programs. + 2011-05-11 Joseph Myers Hans-Peter Nilsson diff --git a/sim/testsuite/lib/sim-defs.exp b/sim/testsuite/lib/sim-defs.exp index 1e65817a7c2..c8093a25566 100644 --- a/sim/testsuite/lib/sim-defs.exp +++ b/sim/testsuite/lib/sim-defs.exp @@ -169,6 +169,7 @@ proc sim_run { prog sim_opts prog_opts redir options } { # mach: [all | machine names] # as[(mach-list)]: # ld[(mach-list)]: +# cc[(mach-list)]: # sim[(mach-list)]: # progopts: # output: program output pattern to match with string-match @@ -190,6 +191,7 @@ proc run_sim_test { name requested_machs } { global cpu_option global global_as_options global global_ld_options + global global_cc_options global global_sim_options if [string match "*/*" $name] { @@ -207,6 +209,7 @@ proc run_sim_test { name requested_machs } { # Clear default options set opts(as) "" set opts(ld) "" + set opts(cc) "" set opts(progopts) "" set opts(sim) "" set opts(output) "" @@ -222,6 +225,9 @@ proc run_sim_test { name requested_machs } { if ![info exists global_ld_options] { set global_ld_options "" } + if ![info exists global_cc_options] { + set global_cc_options "" + } if ![info exists global_sim_options] { set global_sim_options "" } @@ -234,6 +240,9 @@ proc run_sim_test { name requested_machs } { if [info exists opts(ld,$m)] { unset opts(ld,$m) } + if [info exists opts(cc,$m)] { + unset opts(cc,$m) + } if [info exists opts(sim,$m)] { unset opts(sim,$m) } @@ -310,23 +319,44 @@ proc run_sim_test { name requested_machs } { if [info exists cpu_option] { set as_options "$as_options $cpu_option=$mach" } - set comp_output [target_assemble $sourcefile ${name}.o "$as_options $global_as_options"] - - if ![string match "" $comp_output] { - verbose -log "$comp_output" 3 - fail "$mach $testname (assembling)" - continue - } + regsub {(^ *| +)([^ ]+)} "$as_options $global_as_options" { -Wa,\2} c_as_options if ![info exists opts(ld,$mach)] { set opts(ld,$mach) $opts(ld) } + regsub {(^ *| +)([^ ]+)} "$opts(ld,$mach) $global_ld_options" { -Wl,\2} c_ld_options + + if ![info exists opts(cc,$mach)] { + set opts(cc,$mach) $opts(cc) + } + + if [string match "*.c" $sourcefile] { + set comp_output [target_compile $sourcefile ${name}.x "executable" \ + [list "incdir=$srcdir/$subdir" "additional_flags=$c_as_options $c_ld_options $opts(cc,$mach) $global_cc_options"]] + set method "compiling/linking" + } else { + if [string match "*.S" $sourcefile] { + set comp_output [target_compile $sourcefile ${name}.o "object" \ + [list "incdir=$srcdir/$subdir" "additional_flags=$c_as_options"]] + set method "compiling" + } else { + set comp_output [target_assemble $sourcefile ${name}.o "$as_options $global_as_options"] + set method "assembling" + } + + if ![string match "" $comp_output] { + verbose -log "$comp_output" 3 + fail "$mach $testname (${method})" + continue + } - set comp_output [target_link ${name}.o ${name}.x "$opts(ld,$mach) $global_ld_options"] + set comp_output [target_link ${name}.o ${name}.x "$opts(ld,$mach) $global_ld_options"] + set method "linking" + } if ![string match "" $comp_output] { verbose -log "$comp_output" 3 - fail "$mach $testname (linking)" + fail "$mach $testname (${method})" continue }