* gdb.arch/i386-gnu-cfi.exp, gdb.arch/i386-gnu-cfi.c,

gdb.arch/i386-gnu-cfi-asm.S: New files.
This commit is contained in:
Jan Kratochvil 2007-01-21 22:41:41 +00:00
parent 97c3f1f3a2
commit 43a9b631fc
4 changed files with 488 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2007-01-11 Jan Kratochvil <jan.kratochvil@redhat.com>
Daniel Jacobowitz <dan@codesourcery.com>
* gdb.arch/i386-gnu-cfi.exp, gdb.arch/i386-gnu-cfi.c,
gdb.arch/i386-gnu-cfi-asm.S: New files.
2007-01-14 Jan Kratochvil <jan.kratochvil@redhat.com>
* lib/gdb.exp: Abort on missing `site.exp'.

View File

@ -0,0 +1,357 @@
/* Copyright 2007 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Please email any bugs, comments, and/or additions to this file to:
* bug-gdb@gnu.org
*
* This file is part of the gdb testsuite.
*
* It was generated using
* "gcc -g -O9 -S -o gate.s gate.c -fasynchronous-unwind-tables",
* using the following source file:
*
*
* void *gate (void *(*gate) (void *data), void *data)
* {
* return 1 + (*gate) (data);
* }
*
* Changes are marked as `CHANGE' below.
*/
.file "gate.c"
.section .debug_abbrev,"",@progbits
.Ldebug_abbrev0:
.section .debug_info,"",@progbits
.Ldebug_info0:
.section .debug_line,"",@progbits
.Ldebug_line0:
.text
.Ltext0:
.p2align 4,,15
.globl gate
.type gate, @function
gate:
.LFB2:
.file 1 "gate.c"
.loc 1 2 0
.LVL0:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
subl $8, %esp
.LCFI2:
.loc 1 3 0
movl 12(%ebp), %eax
movl %eax, (%esp)
call *8(%ebp)
.loc 1 4 0
leave
.loc 1 3 0
addl $1, %eax
.loc 1 4 0
ret
.LFE2:
.size gate, .-gate
.section .debug_frame,"",@progbits
.Lframe0:
.long .LECIE0-.LSCIE0
.LSCIE0:
.long 0xffffffff
.byte 0x1
.string ""
.uleb128 0x1
.sleb128 -4
.byte 0x8
.byte 0xc
.uleb128 0x4
.uleb128 0x4
.byte 0x88
.uleb128 0x1
.align 4
.LECIE0:
.LSFDE0:
.long .LEFDE0-.LASFDE0
.LASFDE0:
.long .Lframe0
.long .LFB2
.long .LFE2-.LFB2
.byte 0x4
.long .LCFI0-.LFB2
.byte 0xe
.uleb128 0x8
.byte 0x85
.uleb128 0x2
/* CHANGE */
.byte 0x2f
.uleb128 0x1
.uleb128 0x0
/* CHANGE */
.byte 0x4
.long .LCFI1-.LCFI0
.byte 0xd
.uleb128 0x5
.align 4
.LEFDE0:
.section .eh_frame,"a",@progbits
.Lframe1:
.long .LECIE1-.LSCIE1
.LSCIE1:
.long 0x0
.byte 0x1
.string ""
.uleb128 0x1
.sleb128 -4
.byte 0x8
.byte 0xc
.uleb128 0x4
.uleb128 0x4
.byte 0x88
.uleb128 0x1
.align 4
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1
.LASFDE1:
.long .LASFDE1-.Lframe1
.long .LFB2
.long .LFE2-.LFB2
.byte 0x4
.long .LCFI0-.LFB2
.byte 0xe
.uleb128 0x8
.byte 0x85
.uleb128 0x2
/* CHANGE */
.byte 0x2f
.uleb128 0x1
.uleb128 0x0
/* CHANGE */
.byte 0x4
.long .LCFI1-.LCFI0
.byte 0xd
.uleb128 0x5
.align 4
.LEFDE1:
.text
.Letext0:
.section .debug_loc,"",@progbits
.Ldebug_loc0:
.LLST0:
.long .LFB2-.Ltext0
.long .LCFI0-.Ltext0
.value 0x2
.byte 0x74
.sleb128 4
.long .LCFI0-.Ltext0
.long .LCFI1-.Ltext0
.value 0x2
.byte 0x74
.sleb128 8
.long .LCFI1-.Ltext0
.long .LFE2-.Ltext0
.value 0x2
.byte 0x75
.sleb128 8
.long 0x0
.long 0x0
.section .debug_info
.long 0x74
.value 0x2
.long .Ldebug_abbrev0
.byte 0x4
.uleb128 0x1
.long .Ldebug_line0
.long .Letext0
.long .Ltext0
.long .LASF2
.byte 0x1
.long .LASF3
.long .LASF4
.uleb128 0x2
.long 0x5f
.byte 0x1
.long .LASF0
.byte 0x1
.byte 0x2
.byte 0x1
.long 0x5f
.long .LFB2
.long .LFE2
.long .LLST0
.uleb128 0x3
.long .LASF0
.byte 0x1
.byte 0x1
.long 0x71
.byte 0x2
.byte 0x91
.sleb128 0
.uleb128 0x3
.long .LASF1
.byte 0x1
.byte 0x1
.long 0x5f
.byte 0x2
.byte 0x91
.sleb128 4
.byte 0x0
.uleb128 0x4
.byte 0x4
.uleb128 0x5
.long 0x71
.byte 0x1
.long 0x5f
.uleb128 0x6
.long 0x5f
.byte 0x0
.uleb128 0x7
.byte 0x4
.long 0x61
.byte 0x0
.section .debug_abbrev
.uleb128 0x1
.uleb128 0x11
.byte 0x1
.uleb128 0x10
.uleb128 0x6
.uleb128 0x12
.uleb128 0x1
.uleb128 0x11
.uleb128 0x1
.uleb128 0x25
.uleb128 0xe
.uleb128 0x13
.uleb128 0xb
.uleb128 0x3
.uleb128 0xe
.uleb128 0x1b
.uleb128 0xe
.byte 0x0
.byte 0x0
.uleb128 0x2
.uleb128 0x2e
.byte 0x1
.uleb128 0x1
.uleb128 0x13
.uleb128 0x3f
.uleb128 0xc
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x27
.uleb128 0xc
.uleb128 0x49
.uleb128 0x13
.uleb128 0x11
.uleb128 0x1
.uleb128 0x12
.uleb128 0x1
.uleb128 0x40
.uleb128 0x6
.byte 0x0
.byte 0x0
.uleb128 0x3
.uleb128 0x5
.byte 0x0
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.uleb128 0x2
.uleb128 0xa
.byte 0x0
.byte 0x0
.uleb128 0x4
.uleb128 0xf
.byte 0x0
.uleb128 0xb
.uleb128 0xb
.byte 0x0
.byte 0x0
.uleb128 0x5
.uleb128 0x15
.byte 0x1
.uleb128 0x1
.uleb128 0x13
.uleb128 0x27
.uleb128 0xc
.uleb128 0x49
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x6
.uleb128 0x5
.byte 0x0
.uleb128 0x49
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x7
.uleb128 0xf
.byte 0x0
.uleb128 0xb
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.byte 0x0
.byte 0x0
.byte 0x0
.section .debug_pubnames,"",@progbits
.long 0x17
.value 0x2
.long .Ldebug_info0
.long 0x78
.long 0x25
.string "gate"
.long 0x0
.section .debug_aranges,"",@progbits
.long 0x1c
.value 0x2
.long .Ldebug_info0
.byte 0x4
.byte 0x0
.value 0x0
.value 0x0
.long .Ltext0
.long .Letext0-.Ltext0
.long 0x0
.long 0x0
.section .debug_str,"MS",@progbits,1
.LASF1:
.string "data"
.LASF0:
.string "gate"
.LASF3:
.string "gate.c"
.LASF4:
.string "/home/jkratoch/redhat/bz165025"
.LASF2:
.string "GNU C 4.1.1 20061213 (Red Hat 4.1.1-46)"
.ident "GCC: (GNU) 4.1.1 20061213 (Red Hat 4.1.1-46)"
.section .note.GNU-stack,"",@progbits

View File

@ -0,0 +1,31 @@
/* Unwinding of DW_CFA_GNU_negative_offset_extended test program.
Copyright 2007, Free Software Foundation, Inc.
This file is part of GDB.
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 2 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, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <stdlib.h>
/* i386-gnu-cfi-asm.S: */
extern void *gate (void *(*gate) (void *data), void *data);
int main (void)
{
gate ((void *(*) (void *data)) abort, NULL);
return 0;
}

View File

@ -0,0 +1,94 @@
# Copyright 2007 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@gnu.org
# This file is part of the gdb testsuite.
# Unwinding of DW_CFA_GNU_negative_offset_extended test program.
if $tracelevel {
strace $tracelevel
}
# Test i386 unwinder.
set prms_id 0
set bug_id 0
if ![istarget "i?86-*-*"] then {
verbose "Skipping i386 unwinder tests."
return
}
set testfile "i386-gnu-cfi"
set srcfilec ${testfile}.c
set srcfileasm ${testfile}-asm.S
set binfile ${objdir}/${subdir}/${testfile}
# some targets have leading underscores on assembly symbols.
# TODO: detect this automatically
set additional_flags ""
if [istarget "i?86-*-cygwin*"] then {
set additional_flags "additional_flags=-DSYMBOL_PREFIX=\"_\""
}
if { [gdb_compile "${srcdir}/${subdir}/${srcfilec} ${srcdir}/${subdir}/${srcfileasm}" "${binfile}" executable [list debug $additional_flags]] != "" } {
untested i386-gnu-cfi.exp
return -1
}
# Get things started.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
# We should stop in abort(3).
gdb_run_cmd
gdb_test_multiple {} "continue to abort()" {
-re ".*Program received signal SIGABRT,.*$gdb_prompt $" {
pass "continue to abort()"
}
}
# Backtrace would crash before.
gdb_test "bt" \
"main \\(\\) at .*${testfile}.c.*" \
"backtrace"
# Check we see the inserted `DW_CFA_GNU_negative_offset_extended' CFI.
# We see there the original CFI-stored filename `gate.c'.
gdb_test "up 3" \
"gate \\(\[^()\]*\\) at .*gate.c.*" \
"shift up to the modified frame"
gdb_test_multiple "info frame" "Existence of the CFI inserted register" {
-re "Stack level 3, frame at (0x\[0-9a-f\]+):.*Saved registers:.* ecx at (0x\[0-9a-f\]+),.*" {
pass "Existence of the CFI inserted register"
if { [string compare $expect_out(1,string) $expect_out(2,string)] } then {
fail "Value of the CFI inserted register"
} else {
pass "Value of the CFI inserted register"
}
}
}