| # Copyright 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
| |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| if {[gdb_skip_xml_test]} { |
| unsupported "tdesc-arch.exp" |
| return -1 |
| } |
| |
| gdb_start |
| |
| # Find some valid architectures - we just need legitimate values |
| # to put in our <architecture> elements. |
| set arch1 "" |
| set arch2 "" |
| set msg "read valid architectures" |
| gdb_test_multiple "set architecture" $msg { |
| -re "Requires an argument. Valid arguments are (\[^ \]*), (\[^ \]*), .*auto\\.\r\n$gdb_prompt $" { |
| set arch1 $expect_out(1,string) |
| set arch2 $expect_out(2,string) |
| pass $msg |
| } |
| -re "Requires an argument. Valid arguments are (\[^ \]*), auto\\.\r\n$gdb_prompt $" { |
| # If there is just one supported architecture, we can't do this test. |
| unsupported "tdesc-arch.exp" |
| return -1 |
| } |
| } |
| |
| set default_arch "" |
| set msg "read default architecture" |
| gdb_test_multiple "show architecture" $msg { |
| -re "The target architecture is set automatically \\(currently (\[^ \]*)\\)\r\n$gdb_prompt $" { |
| set default_arch $expect_out(1,string) |
| pass $msg |
| } |
| } |
| |
| # If that did not work, no point running further tests. |
| if { "$arch1" == "" || "$arch2" == "" || "$default_arch" == "" } { |
| unresolved "architecture XML tests" |
| return -1 |
| } |
| |
| # Run these tests twice, once for $arch1 and once for $arch2, to |
| # make sure that the tdesc file overrides the global default. |
| |
| proc set_arch { arch which } { |
| global gdb_prompt |
| global subdir |
| |
| set fd [open "$subdir/tdesc-arch.xml" w] |
| puts $fd \ |
| "<target> |
| <architecture>$arch</architecture> |
| </target>" |
| close $fd |
| remote_download host "${subdir}/tdesc-arch.xml" "tdesc-arch.xml" |
| |
| # Anchor the test output, so that error messages are detected. |
| set cmd "set tdesc filename tdesc-arch.xml" |
| set msg "$cmd ($which architecture)" |
| set cmd_regex [string_to_regexp $cmd] |
| gdb_test_multiple $cmd $msg { |
| -re "^$cmd_regex\r\n$gdb_prompt $" { |
| pass $msg |
| } |
| -re "^$cmd_regex\r\nwarning: A handler for the OS ABI.*\r\n$gdb_prompt $" { |
| kfail gdb/2225 $msg |
| } |
| } |
| |
| set cmd "show architecture" |
| gdb_test $cmd \ |
| "The target architecture is set automatically \\(currently $arch\\)" \ |
| "$cmd ($which architecture)" |
| |
| file delete "${subdir}/tdesc-arch.xml" |
| remote_file host delete "tdesc-arch.xml" |
| } |
| |
| set_arch $arch1 first |
| set_arch $arch2 second |
| |
| # Check an invalid architecture setting. |
| set fd [open "${subdir}/tdesc-arch.xml" w] |
| puts $fd \ |
| "<target> |
| <architecture>invalid</architecture> |
| </target>" |
| close $fd |
| remote_download host "$subdir/tdesc-arch.xml" "tdesc-arch.xml" |
| |
| set cmd "set tdesc filename tdesc-arch.xml" |
| gdb_test $cmd \ |
| "warning:.*Target description specified unknown architecture.*" \ |
| "$cmd (invalid architecture)" |
| |
| set cmd "show architecture" |
| gdb_test $cmd \ |
| "The target architecture is set automatically \\(currently $default_arch\\)" \ |
| "$cmd (invalid architecture)" |
| |
| file delete "${subdir}/tdesc-arch.xml" |
| remote_file host delete "tdesc-arch.xml" |