1# Copyright 2007-2016 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16# Please email any bugs, comments, and/or additions to this file to: 17# bug-gdb@gnu.org 18 19# This file is part of the gdb testsuite. 20 21# Unwinding of DW_CFA_GNU_negative_offset_extended test program. 22 23# Test i386 unwinder. 24 25 26if { ![is_x86_like_target] } then { 27 verbose "Skipping i386 unwinder tests." 28 return 29} 30 31set testfile "i386-gnu-cfi" 32set srcfilec ${testfile}.c 33set srcfileasm ${testfile}-asm.S 34set binfile [standard_output_file ${testfile}] 35 36# some targets have leading underscores on assembly symbols. 37set additional_flags [gdb_target_symbol_prefix_flags] 38 39if { [gdb_compile "${srcdir}/${subdir}/${srcfilec} ${srcdir}/${subdir}/${srcfileasm}" "${binfile}" executable [list debug $additional_flags]] != "" } { 40 untested i386-gnu-cfi.exp 41 return -1 42} 43 44# Get things started. 45 46gdb_exit 47gdb_start 48gdb_reinitialize_dir $srcdir/$subdir 49gdb_load ${binfile} 50 51# We should stop in abort(3). 52 53gdb_run_cmd 54 55gdb_test_multiple {} "continue to abort()" { 56 -re ".*Program received signal SIGABRT,.*$gdb_prompt $" { 57 pass "continue to abort()" 58 } 59} 60 61# Backtrace would crash before. 62 63gdb_test "bt" \ 64 "main \\(\\) at .*${testfile}.c.*" \ 65 "backtrace" 66 67# Check we see the inserted `DW_CFA_GNU_negative_offset_extended' CFI. 68# We see there the original CFI-stored filename `gate.c'. 69 70gdb_test "up 3" \ 71 "gate \\(\[^()\]*\\) at .*gate.c.*" \ 72 "shift up to the modified frame" 73 74gdb_test_multiple "info frame" "Existence of the CFI inserted register" { 75 -re "Stack level 3, frame at (0x\[0-9a-f\]+):.*Saved registers:.* ecx at (0x\[0-9a-f\]+),.*" { 76 pass "Existence of the CFI inserted register" 77 if { [string compare $expect_out(1,string) $expect_out(2,string)] } then { 78 fail "Value of the CFI inserted register" 79 } else { 80 pass "Value of the CFI inserted register" 81 } 82 } 83} 84