From 83616a8dbce5bcbbc72453c834082e4e3284d151 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Sun, 13 Jan 2013 13:26:21 +0100 Subject: [PATCH] Fix internal error on finish with inlined frame (BZ 894678). --- gdb-upstream.patch | 524 +++++++++++++++++++++++++++++++++++++++++++++ gdb.spec | 5 +- 2 files changed, 528 insertions(+), 1 deletion(-) diff --git a/gdb-upstream.patch b/gdb-upstream.patch index e66d245..6f5f282 100644 --- a/gdb-upstream.patch +++ b/gdb-upstream.patch @@ -297,3 +297,527 @@ http://sourceware.org/ml/gdb-cvs/2012-02/msg00119.html } static int + + + +http://sourceware.org/ml/gdb-cvs/2012-09/msg00081.html + +### src/gdb/ChangeLog 2012/09/17 07:14:54 1.14469.2.32 +### src/gdb/ChangeLog 2012/09/17 07:17:25 1.14469.2.33 +## -1,4 +1,11 @@ + 2012-09-17 Jan Kratochvil ++ ++ PR 14119 ++ * frame.c (skip_inlined_frames): Skip also TAILCALL_FRAME frames. ++ (frame_pop): Drop also TAILCALL_FRAME frames. ++ * infcmd.c (finish_command): Ignore also TAILCALL_FRAME frames. ++ ++2012-09-17 Jan Kratochvil + Pedro Alves + + PR 14548 +--- src/gdb/frame.c 2012/03/01 20:48:56 1.306 ++++ src/gdb/frame.c 2012/09/17 07:17:27 1.306.2.1 +@@ -309,7 +309,8 @@ + static struct frame_info * + skip_inlined_frames (struct frame_info *frame) + { +- while (get_frame_type (frame) == INLINE_FRAME) ++ while (get_frame_type (frame) == INLINE_FRAME ++ || get_frame_type (frame) == TAILCALL_FRAME) + frame = get_prev_frame (frame); + + return frame; +@@ -814,6 +815,11 @@ + if (!prev_frame) + error (_("Cannot pop the initial frame.")); + ++ /* Ignore TAILCALL_FRAME type frames, they were executed already before ++ entering THISFRAME. */ ++ while (get_frame_type (prev_frame) == TAILCALL_FRAME) ++ prev_frame = get_prev_frame (prev_frame); ++ + /* Make a copy of all the register values unwound from this frame. + Save them in a scratch buffer so that there isn't a race between + trying to extract the old values from the current regcache while +--- src/gdb/infcmd.c 2012/06/29 22:46:44 1.306 ++++ src/gdb/infcmd.c 2012/09/17 07:17:27 1.306.2.1 +@@ -1777,6 +1777,11 @@ + return; + } + ++ /* Ignore TAILCALL_FRAME type frames, they were executed already before ++ entering THISFRAME. */ ++ while (get_frame_type (frame) == TAILCALL_FRAME) ++ frame = get_prev_frame (frame); ++ + /* Find the function we will return from. */ + + function = find_pc_function (get_frame_pc (get_selected_frame (NULL))); +### src/gdb/testsuite/ChangeLog 2012/09/17 07:14:55 1.3295.2.22 +### src/gdb/testsuite/ChangeLog 2012/09/17 07:17:27 1.3295.2.23 +## -1,5 +1,15 @@ + 2012-09-17 Jan Kratochvil + ++ PR 14119 ++ * gdb.arch/amd64-tailcall-ret.S: New file. ++ * gdb.arch/amd64-tailcall-ret.c: New file. ++ * gdb.arch/amd64-tailcall-ret.exp: New file. ++ * gdb.reverse/amd64-tailcall-reverse.S: New file. ++ * gdb.reverse/amd64-tailcall-reverse.c: New file. ++ * gdb.reverse/amd64-tailcall-reverse.exp: New file. ++ ++2012-09-17 Jan Kratochvil ++ + PR 14548 + * gdb.reverse/singlejmp-reverse-nodebug.S: New file. + * gdb.reverse/singlejmp-reverse-nodebug.c: New file. +--- src/gdb/testsuite/gdb.arch/amd64-tailcall-ret.S ++++ src/gdb/testsuite/gdb.arch/amd64-tailcall-ret.S 2013-01-13 07:24:23.894972000 +0000 +@@ -0,0 +1,357 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2012 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 . */ ++ ++/* This source file was generated by: ++ gcc -o gdb.arch/amd64-tailcall-ret.S gdb.arch/amd64-tailcall-ret.c -Wall -S -dA -O2 -g ++ */ ++ ++ .file "amd64-tailcall-ret.c" ++ .text ++.Ltext0: ++ .p2align 4,,15 ++ .type g, @function ++g: ++.LFB0: ++ .file 1 "gdb.arch/amd64-tailcall-ret.c" ++ # gdb.arch/amd64-tailcall-ret.c:22 ++ .loc 1 22 0 ++ .cfi_startproc ++# BLOCK 2 freq:10000 seq:0 ++# PRED: ENTRY [100.0%] (fallthru) ++ # gdb.arch/amd64-tailcall-ret.c:23 ++ .loc 1 23 0 ++ movl $2, v(%rip) ++# SUCC: EXIT [100.0%] ++ ret ++ .cfi_endproc ++.LFE0: ++ .size g, .-g ++ .p2align 4,,15 ++ .type f, @function ++f: ++.LFB1: ++ # gdb.arch/amd64-tailcall-ret.c:28 ++ .loc 1 28 0 ++ .cfi_startproc ++# BLOCK 2 freq:10000 seq:0 ++# PRED: ENTRY [100.0%] (fallthru) ++ # gdb.arch/amd64-tailcall-ret.c:29 ++ .loc 1 29 0 ++ jmp g ++# SUCC: EXIT [100.0%] (ab,sibcall) ++.LVL0: ++ .cfi_endproc ++.LFE1: ++ .size f, .-f ++ .section .text.startup,"ax",@progbits ++ .p2align 4,,15 ++ .globl main ++ .type main, @function ++main: ++.LFB2: ++ # gdb.arch/amd64-tailcall-ret.c:34 ++ .loc 1 34 0 ++ .cfi_startproc ++# BLOCK 2 freq:10000 seq:0 ++# PRED: ENTRY [100.0%] (fallthru) ++ # gdb.arch/amd64-tailcall-ret.c:35 ++ .loc 1 35 0 ++ call f ++.LVL1: ++ # gdb.arch/amd64-tailcall-ret.c:36 ++ .loc 1 36 0 ++ call f ++.LVL2: ++ # gdb.arch/amd64-tailcall-ret.c:37 ++ .loc 1 37 0 ++ movl $3, v(%rip) ++ # gdb.arch/amd64-tailcall-ret.c:39 ++ .loc 1 39 0 ++ xorl %eax, %eax ++# SUCC: EXIT [100.0%] ++ ret ++ .cfi_endproc ++.LFE2: ++ .size main, .-main ++ .comm v,4,4 ++ .text ++.Letext0: ++ .section .debug_info,"",@progbits ++.Ldebug_info0: ++ .long 0xd5 # Length of Compilation Unit Info ++ .value 0x2 # DWARF version number ++ .long .Ldebug_abbrev0 # Offset Into Abbrev. Section ++ .byte 0x8 # Pointer Size (in bytes) ++ .uleb128 0x1 # (DIE (0xb) DW_TAG_compile_unit) ++ .long .LASF0 # DW_AT_producer: "GNU C 4.7.2 20120911 (prerelease)" ++ .byte 0x1 # DW_AT_language ++ .long .LASF1 # DW_AT_name: "gdb.arch/amd64-tailcall-ret.c" ++ .long .LASF2 # DW_AT_comp_dir: "" ++ .long .Ldebug_ranges0+0 # DW_AT_ranges ++ .quad 0 # DW_AT_low_pc ++ .quad 0 # DW_AT_entry_pc ++ .long .Ldebug_line0 # DW_AT_stmt_list ++ .uleb128 0x2 # (DIE (0x31) DW_TAG_subprogram) ++ .ascii "g\0" # DW_AT_name ++ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-ret.c) ++ .byte 0x15 # DW_AT_decl_line ++ .byte 0x1 # DW_AT_prototyped ++ .quad .LFB0 # DW_AT_low_pc ++ .quad .LFE0 # DW_AT_high_pc ++ .byte 0x2 # DW_AT_frame_base ++ .byte 0x77 # DW_OP_breg7 ++ .sleb128 8 ++ .byte 0x1 # DW_AT_GNU_all_call_sites ++ .uleb128 0x3 # (DIE (0x4b) DW_TAG_subprogram) ++ .ascii "f\0" # DW_AT_name ++ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-ret.c) ++ .byte 0x1b # DW_AT_decl_line ++ .byte 0x1 # DW_AT_prototyped ++ .quad .LFB1 # DW_AT_low_pc ++ .quad .LFE1 # DW_AT_high_pc ++ .byte 0x2 # DW_AT_frame_base ++ .byte 0x77 # DW_OP_breg7 ++ .sleb128 8 ++ .byte 0x1 # DW_AT_GNU_all_call_sites ++ .long 0x78 # DW_AT_sibling ++ .uleb128 0x4 # (DIE (0x69) DW_TAG_GNU_call_site) ++ .quad .LVL0 # DW_AT_low_pc ++ .byte 0x1 # DW_AT_GNU_tail_call ++ .long 0x31 # DW_AT_abstract_origin ++ .byte 0 # end of children of DIE 0x4b ++ .uleb128 0x5 # (DIE (0x78) DW_TAG_subprogram) ++ .byte 0x1 # DW_AT_external ++ .long .LASF3 # DW_AT_name: "main" ++ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-ret.c) ++ .byte 0x21 # DW_AT_decl_line ++ .byte 0x1 # DW_AT_prototyped ++ .long 0xb8 # DW_AT_type ++ .quad .LFB2 # DW_AT_low_pc ++ .quad .LFE2 # DW_AT_high_pc ++ .byte 0x2 # DW_AT_frame_base ++ .byte 0x77 # DW_OP_breg7 ++ .sleb128 8 ++ .byte 0x1 # DW_AT_GNU_all_call_sites ++ .long 0xb8 # DW_AT_sibling ++ .uleb128 0x6 # (DIE (0x9d) DW_TAG_GNU_call_site) ++ .quad .LVL1 # DW_AT_low_pc ++ .long 0x4b # DW_AT_abstract_origin ++ .uleb128 0x6 # (DIE (0xaa) DW_TAG_GNU_call_site) ++ .quad .LVL2 # DW_AT_low_pc ++ .long 0x4b # DW_AT_abstract_origin ++ .byte 0 # end of children of DIE 0x78 ++ .uleb128 0x7 # (DIE (0xb8) DW_TAG_base_type) ++ .byte 0x4 # DW_AT_byte_size ++ .byte 0x5 # DW_AT_encoding ++ .ascii "int\0" # DW_AT_name ++ .uleb128 0x8 # (DIE (0xbf) DW_TAG_variable) ++ .ascii "v\0" # DW_AT_name ++ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-ret.c) ++ .byte 0x12 # DW_AT_decl_line ++ .long 0xd3 # DW_AT_type ++ .byte 0x1 # DW_AT_external ++ .byte 0x9 # DW_AT_location ++ .byte 0x3 # DW_OP_addr ++ .quad v ++ .uleb128 0x9 # (DIE (0xd3) DW_TAG_volatile_type) ++ .long 0xb8 # DW_AT_type ++ .byte 0 # end of children of DIE 0xb ++ .section .debug_abbrev,"",@progbits ++.Ldebug_abbrev0: ++ .uleb128 0x1 # (abbrev code) ++ .uleb128 0x11 # (TAG: DW_TAG_compile_unit) ++ .byte 0x1 # DW_children_yes ++ .uleb128 0x25 # (DW_AT_producer) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x13 # (DW_AT_language) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x1b # (DW_AT_comp_dir) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x55 # (DW_AT_ranges) ++ .uleb128 0x6 # (DW_FORM_data4) ++ .uleb128 0x11 # (DW_AT_low_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x52 # (DW_AT_entry_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x10 # (DW_AT_stmt_list) ++ .uleb128 0x6 # (DW_FORM_data4) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x2 # (abbrev code) ++ .uleb128 0x2e # (TAG: DW_TAG_subprogram) ++ .byte 0 # DW_children_no ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0x8 # (DW_FORM_string) ++ .uleb128 0x3a # (DW_AT_decl_file) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3b # (DW_AT_decl_line) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x27 # (DW_AT_prototyped) ++ .uleb128 0xc # (DW_FORM_flag) ++ .uleb128 0x11 # (DW_AT_low_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x12 # (DW_AT_high_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x40 # (DW_AT_frame_base) ++ .uleb128 0xa # (DW_FORM_block1) ++ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) ++ .uleb128 0xc # (DW_FORM_flag) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x3 # (abbrev code) ++ .uleb128 0x2e # (TAG: DW_TAG_subprogram) ++ .byte 0x1 # DW_children_yes ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0x8 # (DW_FORM_string) ++ .uleb128 0x3a # (DW_AT_decl_file) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3b # (DW_AT_decl_line) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x27 # (DW_AT_prototyped) ++ .uleb128 0xc # (DW_FORM_flag) ++ .uleb128 0x11 # (DW_AT_low_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x12 # (DW_AT_high_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x40 # (DW_AT_frame_base) ++ .uleb128 0xa # (DW_FORM_block1) ++ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) ++ .uleb128 0xc # (DW_FORM_flag) ++ .uleb128 0x1 # (DW_AT_sibling) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x4 # (abbrev code) ++ .uleb128 0x4109 # (TAG: DW_TAG_GNU_call_site) ++ .byte 0 # DW_children_no ++ .uleb128 0x11 # (DW_AT_low_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x2115 # (DW_AT_GNU_tail_call) ++ .uleb128 0xc # (DW_FORM_flag) ++ .uleb128 0x31 # (DW_AT_abstract_origin) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x5 # (abbrev code) ++ .uleb128 0x2e # (TAG: DW_TAG_subprogram) ++ .byte 0x1 # DW_children_yes ++ .uleb128 0x3f # (DW_AT_external) ++ .uleb128 0xc # (DW_FORM_flag) ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x3a # (DW_AT_decl_file) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3b # (DW_AT_decl_line) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x27 # (DW_AT_prototyped) ++ .uleb128 0xc # (DW_FORM_flag) ++ .uleb128 0x49 # (DW_AT_type) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .uleb128 0x11 # (DW_AT_low_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x12 # (DW_AT_high_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x40 # (DW_AT_frame_base) ++ .uleb128 0xa # (DW_FORM_block1) ++ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) ++ .uleb128 0xc # (DW_FORM_flag) ++ .uleb128 0x1 # (DW_AT_sibling) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x6 # (abbrev code) ++ .uleb128 0x4109 # (TAG: DW_TAG_GNU_call_site) ++ .byte 0 # DW_children_no ++ .uleb128 0x11 # (DW_AT_low_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x31 # (DW_AT_abstract_origin) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x7 # (abbrev code) ++ .uleb128 0x24 # (TAG: DW_TAG_base_type) ++ .byte 0 # DW_children_no ++ .uleb128 0xb # (DW_AT_byte_size) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3e # (DW_AT_encoding) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0x8 # (DW_FORM_string) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x8 # (abbrev code) ++ .uleb128 0x34 # (TAG: DW_TAG_variable) ++ .byte 0 # DW_children_no ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0x8 # (DW_FORM_string) ++ .uleb128 0x3a # (DW_AT_decl_file) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3b # (DW_AT_decl_line) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x49 # (DW_AT_type) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .uleb128 0x3f # (DW_AT_external) ++ .uleb128 0xc # (DW_FORM_flag) ++ .uleb128 0x2 # (DW_AT_location) ++ .uleb128 0xa # (DW_FORM_block1) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x9 # (abbrev code) ++ .uleb128 0x35 # (TAG: DW_TAG_volatile_type) ++ .byte 0 # DW_children_no ++ .uleb128 0x49 # (DW_AT_type) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .section .debug_aranges,"",@progbits ++ .long 0x3c # Length of Address Ranges Info ++ .value 0x2 # DWARF Version ++ .long .Ldebug_info0 # Offset of Compilation Unit Info ++ .byte 0x8 # Size of Address ++ .byte 0 # Size of Segment Descriptor ++ .value 0 # Pad to 16 byte boundary ++ .value 0 ++ .quad .Ltext0 # Address ++ .quad .Letext0-.Ltext0 # Length ++ .quad .LFB2 # Address ++ .quad .LFE2-.LFB2 # Length ++ .quad 0 ++ .quad 0 ++ .section .debug_ranges,"",@progbits ++.Ldebug_ranges0: ++ .quad .Ltext0 # Offset 0 ++ .quad .Letext0 ++ .quad .LFB2 # Offset 0x10 ++ .quad .LFE2 ++ .quad 0 ++ .quad 0 ++ .section .debug_line,"",@progbits ++.Ldebug_line0: ++ .section .debug_str,"MS",@progbits,1 ++.LASF0: ++ .string "GNU C 4.7.2 20120911 (prerelease)" ++.LASF1: ++ .string "gdb.arch/amd64-tailcall-ret.c" ++.LASF2: ++ .string "" ++.LASF3: ++ .string "main" ++ .ident "GCC: (GNU) 4.7.2 20120911 (prerelease)" ++ .section .note.GNU-stack,"",@progbits +--- src/gdb/testsuite/gdb.arch/amd64-tailcall-ret.c ++++ src/gdb/testsuite/gdb.arch/amd64-tailcall-ret.c 2013-01-13 07:24:24.648595000 +0000 +@@ -0,0 +1,39 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2012 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 . */ ++ ++volatile int v; ++ ++static __attribute__ ((noinline, noclone)) void ++g (void) ++{ ++ v = 2; ++} ++ ++static __attribute__ ((noinline, noclone)) void ++f (void) ++{ ++ g (); ++} ++ ++int ++main (void) ++{ ++ f (); /* first */ ++ f (); /* second */ ++ v = 3; ++ return 0; ++} +--- src/gdb/testsuite/gdb.arch/amd64-tailcall-ret.exp ++++ src/gdb/testsuite/gdb.arch/amd64-tailcall-ret.exp 2013-01-13 07:24:25.267748000 +0000 +@@ -0,0 +1,44 @@ ++# Copyright (C) 2012 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 . ++set testfile "amd64-tailcall-ret" ++set opts {} ++set srcfile "amd64-tailcall-ret.S" ++ ++if [info exists COMPILE] { ++ # make check RUNTESTFLAGS="gdb.arch/amd64-tailcall-ret.exp COMPILE=1" ++ #standard_testfile ++ lappend opts debug optimize=-O2 ++} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } { ++ verbose "Skipping ${testfile}." ++ return ++} ++ ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} $opts] } { ++ return -1 ++} ++ ++if ![runto_main] { ++ return -1 ++} ++ ++gdb_breakpoint "g" ++gdb_continue_to_breakpoint "g" ".* v = 2;" ++ ++gdb_test "return" { f \(\); /\* second \*/} "return" \ ++ {Make g return now\? \(y or n\) } "y" ++ ++gdb_continue_to_breakpoint "g" ".* v = 2;" ++ ++gdb_test "finish" " v = 3;" diff --git a/gdb.spec b/gdb.spec index 32fe287..c4b93d3 100644 --- a/gdb.spec +++ b/gdb.spec @@ -35,7 +35,7 @@ Version: 7.4.50.%{snap} # The release always contains a leading reserved number, start it at 1. # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing. -Release: 53%{?dist} +Release: 54%{?dist} License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain Group: Development/Debuggers @@ -1459,6 +1459,9 @@ fi %endif # 0%{!?el5:1} || "%{_target_cpu}" == "noarch" %changelog +* Sun Jan 13 2013 Jan Kratochvil - 7.4.50.20120120-54.fc17 +- Fix internal error on finish with inlined frame (BZ 894678). + * Sun Jan 13 2013 Jan Kratochvil - 7.4.50.20120120-53.fc17 - [testsuite] Fix gdb-orphanripper.c lockup on F-17 (/dev/pts/* glibc chown).