| # Copyright 2023-2025 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/>. */ |
| |
| # 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 |