diff --git a/gdb-entryval-crash-1of3.patch b/gdb-entryval-crash-1of3.patch deleted file mode 100644 index 58fd34c..0000000 --- a/gdb-entryval-crash-1of3.patch +++ /dev/null @@ -1,194 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2014-07/msg00530.html -Subject: [read_frame_arg patch] Handle partially optimized out values similarly to unavailable values (Re: [patchv2] Fix crash on optimized-out entry data values) - - ---V88s5gaDVPzZ0KCq -Content-Type: text/plain; charset=us-ascii -Content-Disposition: inline - -On Thu, 17 Jul 2014 14:23:06 +0200, Pedro Alves wrote: -> On 07/16/2014 10:58 PM, Jan Kratochvil wrote: -> > This patch is apparently not suitable for gdb-7.8 which is I guess often -> > crashing on -O2 -g entry values so there could be some rather minimal crash -> > avoiding patch instead. -> -> Yeah. -> -> So this was originally "caused" (more exposed) by 4f14910f: -> -> gdb/ChangeLog -> 2013-11-26 Andrew Burgess -> -> * value.c (allocate_optimized_out_value): Mark value as non-lazy. -> -> I tried a few approaches in value_available_contents_eq -> today, and ended up thinking that the simplest should be to -> just revert that patch until we have the fuller fix in place. - -OK, that seems as the best solution for 7.8 to me. - - -> While doing just that fixes the crash, it surprisingly causes -> one of your new tests to FAIL: -> -> (gdb) frame -> #0 bar (ref=ref@entry=@0x7fffffffd184: 10) at gdb.arch/amd64-entry-value-paramref.cc:23 -> 23 vv++; /* break-here */ -> (gdb) FAIL: gdb.arch/amd64-entry-value-paramref.exp: frame - -There is a bug in that entry value code of mine, fix attached. -The testcase then PASSes with the reverted optimization by Andrew Burgess. - -For the attached fix - if you nitpick the missing conditional case: - value_optimized_out (val_deref) && value_optimized_out (entryval_deref) -It is not detected there but that IMO does not matter much as - * It is for 7.8 only, for trunk it will get compared correctly thanks to the - new implementation of value_available_contents_eq() - called value_contents_eq(). - * If the conditional - if (val != val_deref - && !value_optimized_out (val_deref) - && !value_optimized_out (entryval_deref) - && value_available_contents_eq (val_deref, 0, - entryval_deref, 0, - TYPE_LENGTH (type_deref))) - val_equal = 1; - fails it may just print - bar (ref=@0x7fffffffd904: , ref@entry=@0x7fffffffd904: ) - (or some variant with some partially optimized-out/unavailable parts) - instead of the more correct - bar (ref=ref@entry=@0x7fffffffd904: ) - which is not much a bug. - -The attached fix no longe makes sense after the new implementation -of value_available_contents_eq() called value_contents_eq() gets applied as it -handles all the optimized-out/unavailable values on its own, therefore the -attached patch is really only for 7.8. - - -> Turns out it's the code disabled in value_of_dwarf_reg_entry: -> -> target_val = dwarf_entry_parameter_to_value (parameter, -> TYPE_LENGTH (target_type), -> target_type, caller_frame, -> caller_per_cu); -> -> /* value_as_address dereferences TYPE_CODE_REF. */ -> addr = extract_typed_address (value_contents (outer_val), checked_type); -> -> /* The target entry value has artificial address of the entry value -> reference. */ -> VALUE_LVAL (target_val) = lval_memory; -> set_value_address (target_val, addr); -> -> It looks quite wrong to me to just change a value's lval like that. -> -> I ran the testsuite with that code disabled (like in the patch below), -> and that caused no regressions. I can't say I really understand the -> intention here though. What would we be missing if we removed that code? - -I cannot reproduce any wrong case having the code above #if 0-ed. - -I just do not find it correct to have it disabled. But at the same time I do -like much / I do not find correct the code myself. It is a bit problematic to -have struct value describing a memory content which is no longer present -there. - -What happens there: ------------------------------------------------------------------------------- -volatile int vv; -static __attribute__((noinline)) int -bar (int &ref) { - ref = 20; - vv++; /* break-here */ - return ref; -} -int main (void) { - int var = 10; - return bar (var); -} ------------------------------------------------------------------------------- - <4>: Abbrev Number: 13 (DW_TAG_GNU_call_site_parameter) - DW_AT_location : 1 byte block: 55 (DW_OP_reg5 (rdi)) - DW_AT_GNU_call_site_value: 2 byte block: 91 74 (DW_OP_fbreg: -12) - DW_AT_GNU_call_site_data_value: 1 byte block: 3a (DW_OP_lit10) ------------------------------------------------------------------------------- -gdb -ex 'b value_addr' -ex r --args ../gdb ./1 -ex 'watch vv' -ex r -ex 'p &ref@entry' --> -6 return ref; -bar (ref=@0x7fffffffd944: 20, ref@entry=@0x7fffffffd944: 10) at 1.C:25 ------------------------------------------------------------------------------- -At /* break-here */ struct value variable 'ref' is TYPE_CODE_REF. - -With FSF GDB HEAD: -(gdb) x/gx arg1.contents -0x6004000a4ad0: 0x00007fffffffd944 -(gdb) p ((struct value *)arg1.location.computed.closure).lval -$1 = lval_memory -(gdb) p/x ((struct value *)arg1.location.computed.closure).location.address -$3 = 0x7fffffffd944 - -With your #if0-ed code: -(gdb) x/gx arg1.contents -0x6004000a4ad0: 0x00007fffffffd944 -(gdb) p ((struct value *)arg1.location.computed.closure).lval -$8 = not_lval -(gdb) p/x ((struct value *)arg1.location.computed.closure).location.address -$9 = 0x0 - -I do not see how to access - ((struct value *)arg1.location.computed.closure).location.address -from GDB CLI. Trying -(gdb) p &ref@entry -will invoke value_addr()'s: - if (TYPE_CODE (type) == TYPE_CODE_REF) - /* Copy the value, but change the type from (T&) to (T*). We - keep the same location information, which is efficient, and - allows &(&X) to get the location containing the reference. */ -and therefore the address gets fetched already from - arg1.contents -and not from - ((struct value *)arg1.location.computed.closure).location.address -. - -And for any other type than TYPE_CODE_REF this code you #if 0-ed does not get -executed at all. This DW_AT_GNU_call_site_data_value DWARF was meant -primarily for Fortran but with -O0 entry values do not get produced -and with -Og and higher Fortran always optimizes out the passing by reference. - -If you do not like the #if 0 code there I am OK with removing it as I do not -know how to make it's use reproducible for user anyway. In the worst case -- if there really is some way how to exploit it - one should just get - Attempt to take address of value not located in memory. -instead of some wrong value and it may be easy to fix then. - - -Thanks for the analysis, -Jan - ---V88s5gaDVPzZ0KCq -Content-Type: text/plain; charset=us-ascii -Content-Disposition: inline; filename=1 - -gdb/ -2014-07-20 Jan Kratochvil - - * stack.c (read_frame_arg): Verify value_optimized_out before calling - value_available_contents_eq. - -diff --git a/gdb/stack.c b/gdb/stack.c -index 0d6d8e7..4db5df5 100644 ---- a/gdb/stack.c -+++ b/gdb/stack.c -@@ -413,6 +413,8 @@ read_frame_arg (struct symbol *sym, struct frame_info *frame, - /* If the reference addresses match but dereferenced - content does not match print them. */ - if (val != val_deref -+ && !value_optimized_out (val_deref) -+ && !value_optimized_out (entryval_deref) - && value_available_contents_eq (val_deref, 0, - entryval_deref, 0, - TYPE_LENGTH (type_deref))) - ---V88s5gaDVPzZ0KCq-- - diff --git a/gdb-entryval-crash-2of3.patch b/gdb-entryval-crash-2of3.patch deleted file mode 100644 index a3cfe22..0000000 --- a/gdb-entryval-crash-2of3.patch +++ /dev/null @@ -1,44 +0,0 @@ -revert: -commit 4f14910fa1331398cc695011a6af43a89252b4b1 -Author: Andrew Burgess -Date: Tue Nov 26 16:21:53 2013 +0000 - - Mark entirely optimized out value as non-lazy. - - If a value is entirely optimized out, then there's nothing for - value_fetch_lazy to fetch. Sequences like: - - if (value_lazy (retval)) - value_fetch_lazy (retval); - - End up allocating the value contents buffer, wasting memory, for no - use. - - gdb/ChangeLog - 2013-11-26 Andrew Burgess - - * value.c (allocate_optimized_out_value): Mark value as non-lazy. - -### a/gdb/ChangeLog -### b/gdb/ChangeLog -## -1,3 +1,7 @@ -+2013-11-26 Andrew Burgess -+ -+ * value.c (allocate_optimized_out_value): Mark value as non-lazy. -+ - 2013-11-26 Tom Tromey - - * dwarf2-frame.c (dwarf2_frame_cache): Revert patch from -diff --git a/gdb/value.c b/gdb/value.c -index 29abe5f..f073d71 100644 ---- a/gdb/value.c -+++ b/gdb/value.c -@@ -906,7 +906,7 @@ allocate_optimized_out_value (struct type *type) - struct value *retval = allocate_value_lazy (type); - - set_value_optimized_out (retval, 1); -- set_value_lazy (retval, 0); -+ - return retval; - } - diff --git a/gdb-entryval-crash-3of3.patch b/gdb-entryval-crash-3of3.patch deleted file mode 100644 index a8ea099..0000000 --- a/gdb-entryval-crash-3of3.patch +++ /dev/null @@ -1,1011 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2014-07/msg00277.html -Subject: [patchv3] Fix crash on optimized-out entry data values - - ---Dxnq1zWXvFF0Q93v -Content-Type: text/plain; charset=us-ascii -Content-Disposition: inline - -On Wed, 09 Jul 2014 17:31:21 +0200, Jan Kratochvil wrote: -> On Wed, 09 Jul 2014 13:52:00 +0200, Pedro Alves wrote: -> > On 07/09/2014 11:33 AM, Jan Kratochvil wrote: -> > > --- a/gdb/value.c -> > > +++ b/gdb/value.c -> > > @@ -198,12 +198,13 @@ struct value -> > > unsigned int lazy : 1; -> > > -> > > /* If nonzero, this is the value of a variable that does not -> > > - actually exist in the program. If nonzero, and LVAL is -> > > + actually fully exist in the program. If nonzero, and LVAL is -> > > lval_register, this is a register ($pc, $sp, etc., never a -> > > program variable) that has not been saved in the frame. All -> > > optimized-out values are treated pretty much the same, except -> > > registers have a different string representation and related -> > > - error strings. */ -> > > + error strings. It is true also for only partially optimized -> > > + out variables - see the 'unavailable' field below. */ -> > > unsigned int optimized_out : 1; -> > > -> > > /* If value is a variable, is it initialized or not. */ -> > > @@ -334,7 +335,10 @@ struct value -> > > valid if lazy is nonzero. */ -> > > gdb_byte *contents; -> > > -> > > - /* Unavailable ranges in CONTENTS. We mark unavailable ranges, -> > > + /* If OPTIMIZED_OUT is false then UNAVAILABLE must be VEC_empty -> > > + (not necessarily NULL). -> > -> > Hmm, why? We can collect only part of a non-optimized out value. -> > What am I missing? -> -> I miss some documentation how these availability fields interact together. - ->From a comment in mail - Message-Id: <201102071427.55970.pedro@codesourcery.com> - We give preference to printing rather - than , since if a value had been optimized out - at compile time, it can never be collected at run-time. - -it seems it is just reversed, that 'unavailable' can exist only for -!optimized_out and it cannot exist for for optimized_out values. - - -> You are right, this patch regresses during gdbserver mode. - -It PASSes now even in gdbserver mode. - - -Thanks, -Jan - ---Dxnq1zWXvFF0Q93v -Content-Type: text/plain; charset=us-ascii -Content-Disposition: inline; filename="optimfix3.patch" - -gdb/ -2014-07-09 Jan Kratochvil - -removed: - * value.c (struct value): Extend the comment for fields optimized_out - and unavailable. - (value_available_contents_bits_eq): Handle OPTIMIZED_OUT values as - special cases. - -gdb/testsuite/ -2014-07-09 Jan Kratochvil - - * gdb.arch/amd64-entry-value-paramref.S: New file. - * gdb.arch/amd64-entry-value-paramref.cc: New file. - * gdb.arch/amd64-entry-value-paramref.exp: New file. - * gdb.arch/amd64-optimout-repeat.S: New file. - * gdb.arch/amd64-optimout-repeat.c: New file. - * gdb.arch/amd64-optimout-repeat.exp: New file. - -diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.S b/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.S -new file mode 100644 -index 0000000..a1e9d0a ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.S -@@ -0,0 +1,459 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 2014 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 file is compiled from gdb.arch/amd64-entry-value-paramref.cc -+ using -g -dA -S -O2. -+ Additionally it has been patched. */ -+ -+ .file "amd64-entry-value-paramref.cc" -+ .text -+.Ltext0: -+ .p2align 4,,15 -+ .type _ZL3barRi.constprop.0, @function -+_ZL3barRi.constprop.0: -+.LFB2: -+ .file 1 "gdb.arch/amd64-entry-value-paramref.cc" -+ # gdb.arch/amd64-entry-value-paramref.cc:21 -+ .loc 1 21 0 -+ .cfi_startproc -+.LVL0: -+# BLOCK 2 freq:10000 seq:0 -+# PRED: ENTRY [100.0%] (FALLTHRU) -+ # gdb.arch/amd64-entry-value-paramref.cc:23 -+ .loc 1 23 0 -+ movl vv(%rip), %eax -+ # gdb.arch/amd64-entry-value-paramref.cc:24 -+ .loc 1 24 0 -+ movq %rdi, p(%rip) -+ # gdb.arch/amd64-entry-value-paramref.cc:23 -+ .loc 1 23 0 -+ addl $1, %eax -+ movl %eax, vv(%rip) -+ # gdb.arch/amd64-entry-value-paramref.cc:25 -+ .loc 1 25 0 -+ movl (%rdi), %eax -+# SUCC: EXIT [100.0%] -+ # gdb.arch/amd64-entry-value-paramref.cc:26 -+ .loc 1 26 0 -+ ret -+ .cfi_endproc -+.LFE2: -+ .size _ZL3barRi.constprop.0, .-_ZL3barRi.constprop.0 -+ .section .text.startup,"ax",@progbits -+ .p2align 4,,15 -+ .globl main -+ .type main, @function -+main: -+.LFB1: -+ # gdb.arch/amd64-entry-value-paramref.cc:30 -+ .loc 1 30 0 -+ .cfi_startproc -+# BLOCK 2 freq:10000 seq:0 -+# PRED: ENTRY [100.0%] (FALLTHRU) -+ subq $16, %rsp -+ .cfi_def_cfa_offset 24 -+.LBB2: -+ # gdb.arch/amd64-entry-value-paramref.cc:32 -+ .loc 1 32 0 -+ leaq 12(%rsp), %rdi -+ # gdb.arch/amd64-entry-value-paramref.cc:31 -+ .loc 1 31 0 -+ movl $10, 12(%rsp) -+ # gdb.arch/amd64-entry-value-paramref.cc:32 -+ .loc 1 32 0 -+ call _ZL3barRi.constprop.0 -+.LVL1: -+.LBE2: -+ # gdb.arch/amd64-entry-value-paramref.cc:33 -+ .loc 1 33 0 -+ addq $16, %rsp -+ .cfi_def_cfa_offset 8 -+# SUCC: EXIT [100.0%] -+ ret -+ .cfi_endproc -+.LFE1: -+ .size main, .-main -+ .globl p -+ .bss -+ .align 8 -+ .type p, @object -+ .size p, 8 -+p: -+ .zero 8 -+ .globl vv -+ .align 4 -+ .type vv, @object -+ .size vv, 4 -+vv: -+ .zero 4 -+ .text -+.Letext0: -+ .section .debug_info,"",@progbits -+.Ldebug_info0: -+ .long .Linfo_end - .Linfo_start # Length of Compilation Unit Info -+.Linfo_start: -+ .value 0x4 # 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.8.2 20131212 (Red Hat 4.8.2-7) -mtune=generic -march=x86-64 -g -O2" -+ .byte 0x4 # DW_AT_language -+ .long .LASF1 # DW_AT_name: "gdb.arch/amd64-entry-value-paramref.cc" -+ .long .LASF2 # DW_AT_comp_dir: "" -+ .long .Ldebug_ranges0+0 # DW_AT_ranges -+ .quad 0 # DW_AT_low_pc -+ .long .Ldebug_line0 # DW_AT_stmt_list -+DIE29: .uleb128 0x2 # (DIE (0x29) DW_TAG_subprogram) -+ .ascii "bar\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-entry-value-paramref.cc) -+ .byte 0x15 # DW_AT_decl_line -+ .long DIE45 # DW_AT_type -+ .byte 0x1 # DW_AT_inline -+DIE39: .uleb128 0x3 # (DIE (0x39) DW_TAG_formal_parameter) -+ .ascii "ref\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-entry-value-paramref.cc) -+ .byte 0x15 # DW_AT_decl_line -+ .long DIE4c # DW_AT_type -+ .byte 0 # end of children of DIE 0x29 -+DIE45: .uleb128 0x4 # (DIE (0x45) DW_TAG_base_type) -+ .byte 0x4 # DW_AT_byte_size -+ .byte 0x5 # DW_AT_encoding -+ .ascii "int\0" # DW_AT_name -+DIE4c: .uleb128 0x5 # (DIE (0x4c) DW_TAG_const_type) -+ .long DIE51 # DW_AT_type -+DIE51: .uleb128 0x6 # (DIE (0x51) DW_TAG_reference_type) -+ .byte 0x8 # DW_AT_byte_size -+ .long DIE45 # DW_AT_type -+DIE57: .uleb128 0x7 # (DIE (0x57) DW_TAG_subprogram) -+ .long DIE29 # DW_AT_abstract_origin -+ .quad .LFB2 # DW_AT_low_pc -+ .quad .LFE2-.LFB2 # DW_AT_high_pc -+ .uleb128 0x1 # DW_AT_frame_base -+ .byte 0x9c # DW_OP_call_frame_cfa -+ # DW_AT_GNU_all_call_sites -+DIE72: .uleb128 0x8 # (DIE (0x72) DW_TAG_formal_parameter) -+ .long DIE39 # DW_AT_abstract_origin -+ .uleb128 0x1 # DW_AT_location -+ .byte 0x55 # DW_OP_reg5 -+ .byte 0 # end of children of DIE 0x57 -+DIE7a: .uleb128 0x9 # (DIE (0x7a) DW_TAG_subprogram) -+ # DW_AT_external -+ .long .LASF3 # DW_AT_name: "main" -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-entry-value-paramref.cc) -+ .byte 0x1d # DW_AT_decl_line -+ .long DIE45 # DW_AT_type -+ .quad .LFB1 # DW_AT_low_pc -+ .quad .LFE1-.LFB1 # DW_AT_high_pc -+ .uleb128 0x1 # DW_AT_frame_base -+ .byte 0x9c # DW_OP_call_frame_cfa -+ # DW_AT_GNU_all_call_sites -+DIE9b: .uleb128 0xa # (DIE (0x9b) DW_TAG_lexical_block) -+ .quad .LBB2 # DW_AT_low_pc -+ .quad .LBE2-.LBB2 # DW_AT_high_pc -+DIEac: .uleb128 0xb # (DIE (0xac) DW_TAG_variable) -+ .ascii "var\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-entry-value-paramref.cc) -+ .byte 0x1f # DW_AT_decl_line -+ .long DIE45 # DW_AT_type -+ .uleb128 0x2 # DW_AT_location -+ .byte 0x91 # DW_OP_fbreg -+ .sleb128 -12 -+DIEba: .uleb128 0xc # (DIE (0xba) DW_TAG_GNU_call_site) -+ .quad .LVL1 # DW_AT_low_pc -+ .long DIE57 # DW_AT_abstract_origin -+DIEc7: .uleb128 0xd # (DIE (0xc7) DW_TAG_GNU_call_site_parameter) -+ .uleb128 0x1 # DW_AT_location -+ .byte 0x55 # DW_OP_reg5 -+ .uleb128 0x2 # DW_AT_GNU_call_site_value -+ .byte 0x91 # DW_OP_fbreg -+ .sleb128 -12 -+#if 0 -+ .uleb128 0x1 # DW_AT_GNU_call_site_data_value -+ .byte 0x3a # DW_OP_lit10 -+#else -+ .uleb128 1f - 2f # DW_AT_GNU_call_site_data_value -+2: -+ .byte 0xf3 # DW_OP_GNU_entry_value -+ .uleb128 1f - 3f -+3: -+ .byte 0x55 # DW_OP_reg5 -+1: -+#endif -+ .byte 0 # end of children of DIE 0xba -+ .byte 0 # end of children of DIE 0x9b -+ .byte 0 # end of children of DIE 0x7a -+DIEd2: .uleb128 0xe # (DIE (0xd2) DW_TAG_variable) -+ .ascii "vv\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-entry-value-paramref.cc) -+ .byte 0x12 # DW_AT_decl_line -+ .long DIEe6 # DW_AT_type -+ # DW_AT_external -+ .uleb128 0x9 # DW_AT_location -+ .byte 0x3 # DW_OP_addr -+ .quad vv -+DIEe6: .uleb128 0xf # (DIE (0xe6) DW_TAG_volatile_type) -+ .long DIE45 # DW_AT_type -+DIEeb: .uleb128 0xe # (DIE (0xeb) DW_TAG_variable) -+ .ascii "p\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-entry-value-paramref.cc) -+ .byte 0x12 # DW_AT_decl_line -+ .long DIEfe # DW_AT_type -+ # DW_AT_external -+ .uleb128 0x9 # DW_AT_location -+ .byte 0x3 # DW_OP_addr -+ .quad p -+DIEfe: .uleb128 0x10 # (DIE (0xfe) DW_TAG_pointer_type) -+ .byte 0x8 # DW_AT_byte_size -+ .long DIEe6 # DW_AT_type -+ .byte 0 # end of children of DIE 0xb -+.Linfo_end: -+ .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 0x17 # (DW_FORM_sec_offset) -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x10 # (DW_AT_stmt_list) -+ .uleb128 0x17 # (DW_FORM_sec_offset) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x2 # (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 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x20 # (DW_AT_inline) -+ .uleb128 0xb # (DW_FORM_data1) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x3 # (abbrev code) -+ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter) -+ .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) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x4 # (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 0x5 # (abbrev code) -+ .uleb128 0x26 # (TAG: DW_TAG_const_type) -+ .byte 0 # DW_children_no -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x6 # (abbrev code) -+ .uleb128 0x10 # (TAG: DW_TAG_reference_type) -+ .byte 0 # DW_children_no -+ .uleb128 0xb # (DW_AT_byte_size) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x7 # (abbrev code) -+ .uleb128 0x2e # (TAG: DW_TAG_subprogram) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0x31 # (DW_AT_abstract_origin) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x12 # (DW_AT_high_pc) -+ .uleb128 0x7 # (DW_FORM_data8) -+ .uleb128 0x40 # (DW_AT_frame_base) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x8 # (abbrev code) -+ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter) -+ .byte 0 # DW_children_no -+ .uleb128 0x31 # (DW_AT_abstract_origin) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x2 # (DW_AT_location) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x9 # (abbrev code) -+ .uleb128 0x2e # (TAG: DW_TAG_subprogram) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0x3f # (DW_AT_external) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .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 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 0x7 # (DW_FORM_data8) -+ .uleb128 0x40 # (DW_AT_frame_base) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .byte 0 -+ .byte 0 -+ .uleb128 0xa # (abbrev code) -+ .uleb128 0xb # (TAG: DW_TAG_lexical_block) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x12 # (DW_AT_high_pc) -+ .uleb128 0x7 # (DW_FORM_data8) -+ .byte 0 -+ .byte 0 -+ .uleb128 0xb # (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 0x2 # (DW_AT_location) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .byte 0 -+ .byte 0 -+ .uleb128 0xc # (abbrev code) -+ .uleb128 0x4109 # (TAG: DW_TAG_GNU_call_site) -+ .byte 0x1 # DW_children_yes -+ .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 0xd # (abbrev code) -+ .uleb128 0x410a # (TAG: DW_TAG_GNU_call_site_parameter) -+ .byte 0 # DW_children_no -+ .uleb128 0x2 # (DW_AT_location) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .uleb128 0x2111 # (DW_AT_GNU_call_site_value) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .uleb128 0x2112 # (DW_AT_GNU_call_site_data_value) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .byte 0 -+ .byte 0 -+ .uleb128 0xe # (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 0x19 # (DW_FORM_flag_present) -+ .uleb128 0x2 # (DW_AT_location) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .byte 0 -+ .byte 0 -+ .uleb128 0xf # (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 -+ .uleb128 0x10 # (abbrev code) -+ .uleb128 0xf # (TAG: DW_TAG_pointer_type) -+ .byte 0 # DW_children_no -+ .uleb128 0xb # (DW_AT_byte_size) -+ .uleb128 0xb # (DW_FORM_data1) -+ .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 .LFB1 # Address -+ .quad .LFE1-.LFB1 # Length -+ .quad 0 -+ .quad 0 -+ .section .debug_ranges,"",@progbits -+.Ldebug_ranges0: -+ .quad .Ltext0 # Offset 0 -+ .quad .Letext0 -+ .quad .LFB1 # Offset 0x10 -+ .quad .LFE1 -+ .quad 0 -+ .quad 0 -+ .section .debug_line,"",@progbits -+.Ldebug_line0: -+ .section .debug_str,"MS",@progbits,1 -+.LASF1: -+ .string "gdb.arch/amd64-entry-value-paramref.cc" -+.LASF2: -+ .string "" -+.LASF0: -+ .string "GNU C++ 4.8.2 20131212 (Red Hat 4.8.2-7) -mtune=generic -march=x86-64 -g -O2" -+.LASF3: -+ .string "main" -+ .ident "GCC: (GNU) 4.8.2 20131212 (Red Hat 4.8.2-7)" -+ .section .note.GNU-stack,"",@progbits -diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.cc b/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.cc -new file mode 100644 -index 0000000..aa473a3 ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.cc -@@ -0,0 +1,33 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 2014 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 vv, *p; -+ -+static __attribute__((noinline)) int -+bar (int &ref) -+{ -+ vv++; /* break-here */ -+ p = &ref; -+ return ref; -+} -+ -+int -+main (void) -+{ -+ int var = 10; -+ return bar (var); -+} -diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp b/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp -new file mode 100644 -index 0000000..f06247d ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp -@@ -0,0 +1,35 @@ -+# Copyright (C) 2014 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 . -+ -+standard_testfile .S .cc -+ -+if { ![istarget x86_64-*-* ] || ![is_lp64_target] } { -+ verbose "Skipping amd64-entry-value-paramref." -+ return -+} -+ -+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} "c++"] } { -+ return -1 -+} -+ -+if ![runto_main] { -+ return -1 -+} -+ -+set srcfile $srcfile2 -+gdb_breakpoint [gdb_get_line_number "break-here"] -+ -+gdb_continue_to_breakpoint "break-here" ".* break-here .*" -+gdb_test "frame" {bar \(ref=@0x[0-9a-f]+: 10, ref@entry=@0x[0-9a-f]+: \) at .*} -diff --git a/gdb/testsuite/gdb.arch/amd64-optimout-repeat.S b/gdb/testsuite/gdb.arch/amd64-optimout-repeat.S -new file mode 100644 -index 0000000..2f8f4d2 ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/amd64-optimout-repeat.S -@@ -0,0 +1,297 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 2012-2014 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 file is compiled from gdb.arch/amd64-entry-value-param.c -+ using -g -dA -S -O2. */ -+ -+ .file "amd64-optimout-repeat.c" -+ .text -+.Ltext0: -+ .section .text.unlikely,"ax",@progbits -+.LCOLDB0: -+ .section .text.startup,"ax",@progbits -+.LHOTB0: -+ .p2align 4,,15 -+ .section .text.unlikely -+.Ltext_cold0: -+ .section .text.startup -+ .globl main -+ .type main, @function -+main: -+.LFB0: -+ .file 1 "gdb.arch/amd64-optimout-repeat.c" -+ # gdb.arch/amd64-optimout-repeat.c:20 -+ .loc 1 20 0 -+ .cfi_startproc -+# BLOCK 2 freq:10000 seq:0 -+# PRED: ENTRY [100.0%] (FALLTHRU) -+.LVL0: -+ # gdb.arch/amd64-optimout-repeat.c:29 -+ .loc 1 29 0 -+ xorl %eax, %eax -+# SUCC: EXIT [100.0%] -+ ret -+ .cfi_endproc -+.LFE0: -+ .size main, .-main -+ .section .text.unlikely -+.LCOLDE0: -+ .section .text.startup -+.LHOTE0: -+ .text -+.Letext0: -+ .section .text.unlikely -+.Letext_cold0: -+ .section .debug_info,"",@progbits -+.Ldebug_info0: -+ .long 0x97 # Length of Compilation Unit Info -+ .value 0x4 # 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 .LASF1 # DW_AT_producer: "GNU C 4.9.1 20140709 (prerelease) -mtune=generic -march=x86-64 -g -O2" -+ .byte 0x1 # DW_AT_language -+ .long .LASF2 # DW_AT_name: "gdb.arch/amd64-optimout-repeat.c" -+ .long .LASF3 # DW_AT_comp_dir: "" -+ .long .Ldebug_ranges0+0 # DW_AT_ranges -+ .quad 0 # DW_AT_low_pc -+ .long .Ldebug_line0 # DW_AT_stmt_list -+ .uleb128 0x2 # (DIE (0x29) DW_TAG_subprogram) -+ # DW_AT_external -+ .long .LASF4 # DW_AT_name: "main" -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-optimout-repeat.c) -+ .byte 0x13 # DW_AT_decl_line -+ # DW_AT_prototyped -+ .long 0x7c # DW_AT_type -+ .quad .LFB0 # DW_AT_low_pc -+ .quad .LFE0-.LFB0 # DW_AT_high_pc -+ .uleb128 0x1 # DW_AT_frame_base -+ .byte 0x9c # DW_OP_call_frame_cfa -+ # DW_AT_GNU_all_call_sites -+ .long 0x7c # DW_AT_sibling -+ .uleb128 0x3 # (DIE (0x4a) DW_TAG_structure_type) -+ .value 0x404 # DW_AT_byte_size -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-optimout-repeat.c) -+ .byte 0x15 # DW_AT_decl_line -+ .long 0x6a # DW_AT_sibling -+ .uleb128 0x4 # (DIE (0x53) DW_TAG_member) -+ .ascii "i\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-optimout-repeat.c) -+ .byte 0x17 # DW_AT_decl_line -+ .long 0x7c # DW_AT_type -+ .byte 0 # DW_AT_data_member_location -+ .uleb128 0x4 # (DIE (0x5d) DW_TAG_member) -+ .ascii "xxx\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-optimout-repeat.c) -+ .byte 0x18 # DW_AT_decl_line -+ .long 0x83 # DW_AT_type -+ .byte 0x4 # DW_AT_data_member_location -+ .byte 0 # end of children of DIE 0x4a -+ .uleb128 0x5 # (DIE (0x6a) DW_TAG_variable) -+ .ascii "v\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-optimout-repeat.c) -+ .byte 0x1a # DW_AT_decl_line -+ .long 0x4a # DW_AT_type -+ .uleb128 0x7 # DW_AT_location -+ .byte 0x30 # DW_OP_lit0 -+ .byte 0x9f # DW_OP_stack_value -+ .byte 0x93 # DW_OP_piece -+ .uleb128 0x4 -+ .byte 0x93 # DW_OP_piece -+ .uleb128 0x400 -+ .byte 0 # end of children of DIE 0x29 -+ .uleb128 0x6 # (DIE (0x7c) DW_TAG_base_type) -+ .byte 0x4 # DW_AT_byte_size -+ .byte 0x5 # DW_AT_encoding -+ .ascii "int\0" # DW_AT_name -+ .uleb128 0x7 # (DIE (0x83) DW_TAG_array_type) -+ .long 0x7c # DW_AT_type -+ .long 0x93 # DW_AT_sibling -+ .uleb128 0x8 # (DIE (0x8c) DW_TAG_subrange_type) -+ .long 0x93 # DW_AT_type -+ .byte 0xff # DW_AT_upper_bound -+ .byte 0 # end of children of DIE 0x83 -+ .uleb128 0x9 # (DIE (0x93) DW_TAG_base_type) -+ .byte 0x8 # DW_AT_byte_size -+ .byte 0x7 # DW_AT_encoding -+ .long .LASF0 # DW_AT_name: "sizetype" -+ .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 0x17 # (DW_FORM_sec_offset) -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x10 # (DW_AT_stmt_list) -+ .uleb128 0x17 # (DW_FORM_sec_offset) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x2 # (abbrev code) -+ .uleb128 0x2e # (TAG: DW_TAG_subprogram) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0x3f # (DW_AT_external) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .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 0x19 # (DW_FORM_flag_present) -+ .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 0x7 # (DW_FORM_data8) -+ .uleb128 0x40 # (DW_AT_frame_base) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .uleb128 0x1 # (DW_AT_sibling) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x3 # (abbrev code) -+ .uleb128 0x13 # (TAG: DW_TAG_structure_type) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0xb # (DW_AT_byte_size) -+ .uleb128 0x5 # (DW_FORM_data2) -+ .uleb128 0x3a # (DW_AT_decl_file) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3b # (DW_AT_decl_line) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x1 # (DW_AT_sibling) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x4 # (abbrev code) -+ .uleb128 0xd # (TAG: DW_TAG_member) -+ .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 0x38 # (DW_AT_data_member_location) -+ .uleb128 0xb # (DW_FORM_data1) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x5 # (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 0x2 # (DW_AT_location) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x6 # (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 0x7 # (abbrev code) -+ .uleb128 0x1 # (TAG: DW_TAG_array_type) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x1 # (DW_AT_sibling) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x8 # (abbrev code) -+ .uleb128 0x21 # (TAG: DW_TAG_subrange_type) -+ .byte 0 # DW_children_no -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x2f # (DW_AT_upper_bound) -+ .uleb128 0xb # (DW_FORM_data1) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x9 # (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 0xe # (DW_FORM_strp) -+ .byte 0 -+ .byte 0 -+ .byte 0 -+ .section .debug_aranges,"",@progbits -+ .long 0x2c # 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 .LFB0 # Address -+ .quad .LFE0-.LFB0 # Length -+ .quad 0 -+ .quad 0 -+ .section .debug_ranges,"",@progbits -+.Ldebug_ranges0: -+ .quad .LFB0 # Offset 0 -+ .quad .LFE0 -+ .quad 0 -+ .quad 0 -+ .section .debug_line,"",@progbits -+.Ldebug_line0: -+ .section .debug_str,"MS",@progbits,1 -+.LASF0: -+ .string "sizetype" -+.LASF2: -+ .string "gdb.arch/amd64-optimout-repeat.c" -+.LASF1: -+ .string "GNU C 4.9.1 20140709 (prerelease) -mtune=generic -march=x86-64 -g -O2" -+.LASF3: -+ .string "" -+.LASF4: -+ .string "main" -+ .ident "GCC: (GNU) 4.9.1 20140709 (prerelease)" -+ .section .note.GNU-stack,"",@progbits -diff --git a/gdb/testsuite/gdb.arch/amd64-optimout-repeat.c b/gdb/testsuite/gdb.arch/amd64-optimout-repeat.c -new file mode 100644 -index 0000000..a32b6de ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/amd64-optimout-repeat.c -@@ -0,0 +1,29 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 2014 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 . */ -+ -+int -+main (void) -+{ -+ struct -+ { -+ int i; -+ int xxx[0x100]; -+ } -+ v = { 0 }; -+ -+ return v.i; -+} -diff --git a/gdb/testsuite/gdb.arch/amd64-optimout-repeat.exp b/gdb/testsuite/gdb.arch/amd64-optimout-repeat.exp -new file mode 100644 -index 0000000..f3c93a4 ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/amd64-optimout-repeat.exp -@@ -0,0 +1,36 @@ -+# Copyright (C) 2014 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 . -+ -+standard_testfile .S .c -+set opts {} -+ -+if [info exists COMPILE] { -+ # make check RUNTESTFLAGS="gdb.arch/amd64-optimout-repeat.exp COMPILE=1" -+ set srcfile ${srcfile2} -+ lappend opts debug optimize=-O2 -+} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } { -+ verbose "Skipping amd64-optimout-repeat." -+ return -+} -+ -+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} $opts] } { -+ return -1 -+} -+ -+if ![runto_main] { -+ return -1 -+} -+ -+gdb_test "print v" { = {i = 0, xxx = { }}} - ---Dxnq1zWXvFF0Q93v-- - diff --git a/gdb.spec b/gdb.spec index 99f4d04..662681b 100644 --- a/gdb.spec +++ b/gdb.spec @@ -1195,6 +1195,10 @@ fi %endif %changelog +* Fri Dec 9 2022 Andrew Burgess +- Remove gdb-entryval-crash-1of3.patch, gdb-entryval-crash-2of3.patch, + and gdb-entryval-crash-3of3.patch. + * Wed Dec 7 2022 Keith Seitz - 12.1-10 - Disable Guile support for F38+, RHBZ 2151328.