| # Copyright 2007-2021 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 to \"auto\" \\(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. |
| # TRANS_MODE indicates how newlines should be represented; it should |
| # be one of the values supported by "fconfigure -translation". |
| |
| proc set_arch { arch which trans_mode } { |
| global gdb_prompt |
| global subdir |
| |
| set filename [standard_output_file tdesc-arch.xml] |
| set fd [open $filename w] |
| fconfigure $fd -translation $trans_mode |
| puts $fd \ |
| "<target> |
| <architecture>$arch</architecture> |
| </target>" |
| close $fd |
| if {[is_remote host]} { |
| set filename [remote_download host $filename tdesc-arch.xml] |
| } |
| |
| # Anchor the test output, so that error messages are detected. |
| set cmd "set tdesc filename $filename" |
| set msg "set tdesc filename tdesc-arch.xml ($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 to \"auto\" \\(currently \"$arch\"\\)\\." \ |
| "$cmd ($which architecture)" |
| |
| remote_file host delete $filename |
| } |
| |
| set_arch $arch1 first lf |
| set_arch $arch2 second lf |
| |
| with_test_prefix crlf { |
| set_arch $arch1 first crlf |
| set_arch $arch2 second crlf |
| } |
| |
| # Check an invalid architecture setting. |
| set filename [standard_output_file tdesc-arch.xml] |
| set fd [open $filename w] |
| puts $fd \ |
| "<target> |
| <architecture>invalid</architecture> |
| </target>" |
| close $fd |
| if {[is_remote host]} { |
| set filename [remote_download host $filename "tdesc-arch.xml"] |
| } |
| |
| set cmd "set tdesc filename $filename" |
| gdb_test $cmd \ |
| "warning:.*Target description specified unknown architecture.*" \ |
| "set tdesc filename tdesc-arch.xml (invalid architecture)" |
| |
| set cmd "show architecture" |
| gdb_test $cmd \ |
| "The target architecture is set to \"auto\" \\(currently \"$default_arch\"\\)\\." \ |
| "$cmd (invalid architecture)" |
| |
| remote_file host delete $filename |