4 changed files with 488 additions and 0 deletions
@ -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 |
|||
@ -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; |
|||
} |
|||
@ -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" |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue