# Copyright 2023 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 . */ # Check that epilogue unwind info is used, even if no debug info is available. require is_x86_64_m64_target set srcfile_flags {} lappend srcfile_flags debug lappend srcfile_flags nopie set srcfile2_flags {} lappend srcfile2_flags nodebug lappend srcfile_flags nopie set ldflags $srcfile_flags if [info exists COMPILE] { # Make sure that we use .eh_frame info, by generating it # using -fasynchronous-unwind-tables. if { [gdb_can_simple_compile fasynchronous-unwind-tables \ { void foo () { } } object -fasynchronous-unwind-tables] } { lappend srcfile2_flags additional_flags=-fasynchronous-unwind-tables } else { unsupported "required: .eh_frame" return } standard_testfile unwind-on-each-insn.c unwind-on-each-insn-foo.c # When updating the .s file, use these flags to generate the file: #lappend srcfile2_flags additional_flags=-save-temps #lappend srcfile2_flags additional_flags=-dA # and do the following: # - copy it in place, run the test-case and verify that all tests pass. # - confuse the amd64 epilogue unwinder by inserting the following # in foo: # nop # + pushq $.L1 # + ret # + .L1: # + nop # popq %rbp # - verify that the test-case passes. } else { standard_testfile unwind-on-each-insn.c .s } source $srcdir/$subdir/unwind-on-each-insn.exp.tcl