# Copyright 2007-2020 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 . 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 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. # 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 \ " $arch " 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 automatically \\(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 \ " invalid " 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 automatically \\(currently $default_arch\\)" \ "$cmd (invalid architecture)" remote_file host delete $filename