Hello community, here is the log from the commit of package gdb for openSUSE:Factory checked in at 2016-07-12 23:45:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gdb (Old) and /work/SRC/openSUSE:Factory/.gdb.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gdb" Changes: -------- --- /work/SRC/openSUSE:Factory/gdb/gdb.changes 2016-05-31 12:09:42.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.gdb.new/gdb.changes 2016-07-12 23:45:06.000000000 +0200 @@ -1,0 +2,13 @@ +Mon Jun 20 16:36:04 UTC 2016 - m...@suse.com + +- Rebase to gdb 7.11.1: minor bug fixes. +- Remove gdb-gcc6-Wparentheses-warning.patch (applied upstream). +- Add some patches from Fedora F24: + gdb-bare-DW_TAG_lexical_block-1of2.patch + gdb-bare-DW_TAG_lexical_block-2of2.patch + gdb-bz1219747-attach-kills.patch + gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch + gdb-rhbz1325795-framefilters-test.patch + gdb-testsuite-dw2-undefined-ret-addr.patch + +------------------------------------------------------------------- Old: ---- gdb-7.11.tar.bz2 gdb-gcc6-Wparentheses-warning.patch New: ---- gdb-7.11.1.tar.bz2 gdb-bare-DW_TAG_lexical_block-1of2.patch gdb-bare-DW_TAG_lexical_block-2of2.patch gdb-bz1219747-attach-kills.patch gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch gdb-rhbz1325795-framefilters-test.patch gdb-testsuite-dw2-undefined-ret-addr.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gdb.spec ++++++ --- /var/tmp/diff_new_pack.rmAP2w/_old 2016-07-12 23:45:10.000000000 +0200 +++ /var/tmp/diff_new_pack.rmAP2w/_new 2016-07-12 23:45:10.000000000 +0200 @@ -27,7 +27,7 @@ %global snap 20130731 # See timestamp of source gnulib installed into gdb/gnulib/ . %global snapgnulib 20121213 -Version: 7.11 +Version: 7.11.1 Release: 0 # The release always contains a leading reserved number, start it at 1. @@ -200,14 +200,20 @@ Patch107: gdb-fortran-frame-string.patch Patch108: gdb-python-gil.patch Patch109: gdb-jit-reader-multilib.patch -Patch110: gdb-fedora-libncursesw.patch -Patch111: gdb-opcodes-clflushopt-test.patch -Patch112: gdb-dts-rhel6-python-compat.patch -Patch113: gdb-6.6-buildid-locate-rpm-scl.patch -Patch114: gdb-readline62-ask-more-rh.patch -Patch115: gdb-6.8-attach-signalled-detach-stopped.patch -Patch116: gdb-6.8-quit-never-aborts.patch -Patch117: gdb-testsuite-readline63-sigint.patch +Patch110: gdb-bz1219747-attach-kills.patch +Patch111: gdb-fedora-libncursesw.patch +Patch112: gdb-opcodes-clflushopt-test.patch +Patch113: gdb-dts-rhel6-python-compat.patch +Patch114: gdb-6.6-buildid-locate-rpm-scl.patch +Patch115: gdb-readline62-ask-more-rh.patch +Patch116: gdb-6.8-attach-signalled-detach-stopped.patch +Patch117: gdb-6.8-quit-never-aborts.patch +Patch118: gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch +Patch120: gdb-testsuite-dw2-undefined-ret-addr.patch +Patch121: gdb-rhbz1325795-framefilters-test.patch +Patch122: gdb-bare-DW_TAG_lexical_block-1of2.patch +Patch123: gdb-bare-DW_TAG_lexical_block-2of2.patch +Patch124: gdb-testsuite-readline63-sigint.patch #Fedora Packages end # Upstream patch to fix gcc -Werror @@ -215,7 +221,6 @@ Patch1003: gdb-pahole-python2.patch Patch1004: gdb-fix-buf-overflow.diff Patch1005: gdb-7.10-swo18929.patch -Patch1006: gdb-gcc6-Wparentheses-warning.patch BuildRequires: bison BuildRequires: flex @@ -467,10 +472,7 @@ %patch107 -p1 %patch108 -p1 %patch109 -p1 -%if 0 -# disable, openSUSE doesn't need it %patch110 -p1 -%endif %patch111 -p1 %patch112 -p1 %patch113 -p1 @@ -478,13 +480,18 @@ %patch115 -p1 %patch116 -p1 %patch117 -p1 +%patch118 -p1 +%patch120 -p1 +%patch121 -p1 +%patch122 -p1 +%patch123 -p1 +%patch124 -p1 #Fedora patching end %patch1002 -p1 %patch1003 -p1 %patch1004 -p1 %patch1005 -p1 -%patch1006 -p1 find -name "*.orig" | xargs rm -f ! find -name "*.rej" # Should not happen. ++++++ gdb-6.8-bz466901-backtrace-full-prelinked.patch ++++++ --- /var/tmp/diff_new_pack.rmAP2w/_old 2016-07-12 23:45:10.000000000 +0200 +++ /var/tmp/diff_new_pack.rmAP2w/_new 2016-07-12 23:45:10.000000000 +0200 @@ -35,9 +35,9 @@ + +set testfile "dw2-loclist-prelinked" +set srcfuncfile ${testfile}-func.S -+set binsharedfuncfile ${objdir}/${subdir}/${testfile}.so ++set binsharedfuncfile [standard_output_file ${testfile}.so] +set srcmainfile ${testfile}-main.c -+set binfile ${objdir}/${subdir}/${testfile} ++set binfile [standard_output_file ${testfile}] + +remote_exec build "rm -f ${binfile}" + ++++++ gdb-7.11.tar.bz2 -> gdb-7.11.1.tar.bz2 ++++++ /work/SRC/openSUSE:Factory/gdb/gdb-7.11.tar.bz2 /work/SRC/openSUSE:Factory/.gdb.new/gdb-7.11.1.tar.bz2 differ: char 11, line 1 ++++++ gdb-bare-DW_TAG_lexical_block-1of2.patch ++++++ >From 3a2b436ae9958a1029545c03201b7223ff33c150 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil <jan.kratoch...@redhat.com> Date: Mon, 30 May 2016 14:11:43 +0200 Subject: [PATCH 1/2] Code cleanup: dwarf2_get_pc_bounds: -1/0/+1 -> enum Make the code (maybe) more readable + primarily prepare it for [patch 2/2] enum extension. This change should have no code change impact. gdb/ChangeLog 2016-05-30 Jan Kratochvil <jan.kratoch...@redhat.com> Code cleanup: dwarf2_get_pc_bounds: -1/0/+1 -> enum * dwarf2read.c (enum pc_bounds_kind) New. (dwarf2_get_pc_bounds): Use it in the declaration. (process_psymtab_comp_unit_reader): Adjust caller. Rename has_pc_info to cu_bounds_kind. (read_func_scope, read_lexical_block_scope, read_call_site_scope): Adjust callers. (dwarf2_get_pc_bounds): Use enum pc_bounds_kind in the definition. (dwarf2_get_subprogram_pc_bounds, get_scope_pc_bounds): Adjust callers. --- gdb/ChangeLog | 12 ++++++++++ gdb/dwarf2read.c | 71 ++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 58 insertions(+), 25 deletions(-) ### a/gdb/ChangeLog ### b/gdb/ChangeLog ## -1,3 +1,15 @@ +2016-05-30 Jan Kratochvil <jan.kratoch...@redhat.com> + + Code cleanup: dwarf2_get_pc_bounds: -1/0/+1 -> enum + * dwarf2read.c (enum pc_bounds_kind) New. + (dwarf2_get_pc_bounds): Use it in the declaration. + (process_psymtab_comp_unit_reader): Adjust caller. Rename has_pc_info + to cu_bounds_kind. + (read_func_scope, read_lexical_block_scope, read_call_site_scope): + Adjust callers. + (dwarf2_get_pc_bounds): Use enum pc_bounds_kind in the definition. + (dwarf2_get_subprogram_pc_bounds, get_scope_pc_bounds): Adjust callers. + 2016-05-29 Jan Kratochvil <jan.kratoch...@redhat.com> * NEWS (QCatchSyscalls): Remove the parameter. Include ... --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -1606,9 +1606,25 @@ static void read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu); static int dwarf2_ranges_read (unsigned, CORE_ADDR *, CORE_ADDR *, struct dwarf2_cu *, struct partial_symtab *); -static int dwarf2_get_pc_bounds (struct die_info *, - CORE_ADDR *, CORE_ADDR *, struct dwarf2_cu *, - struct partial_symtab *); +/* How dwarf2_get_pc_bounds constructed its *LOWPC and *HIGHPC return + values. */ +enum pc_bounds_kind +{ + /* No valid combination of DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges + was found. */ + PC_BOUNDS_NOT_PRESENT, + + /* Discontiguous range was found - that is DW_AT_ranges was found. */ + PC_BOUNDS_RANGES, + + /* Contiguous range was found - DW_AT_low_pc and DW_AT_high_pc were found. */ + PC_BOUNDS_HIGH_LOW, +}; + +static enum pc_bounds_kind dwarf2_get_pc_bounds (struct die_info *, + CORE_ADDR *, CORE_ADDR *, + struct dwarf2_cu *, + struct partial_symtab *); static void get_scope_pc_bounds (struct die_info *, CORE_ADDR *, CORE_ADDR *, @@ -5947,7 +5963,7 @@ process_psymtab_comp_unit_reader (const struct die_reader_specs *reader, CORE_ADDR baseaddr; CORE_ADDR best_lowpc = 0, best_highpc = 0; struct partial_symtab *pst; - int has_pc_info; + enum pc_bounds_kind cu_bounds_kind; const char *filename; struct process_psymtab_comp_unit_data *info = (struct process_psymtab_comp_unit_data *) data; @@ -5977,9 +5993,9 @@ process_psymtab_comp_unit_reader (const struct die_reader_specs *reader, /* Possibly set the default values of LOWPC and HIGHPC from `DW_AT_ranges'. */ - has_pc_info = dwarf2_get_pc_bounds (comp_unit_die, &best_lowpc, - &best_highpc, cu, pst); - if (has_pc_info == 1 && best_lowpc < best_highpc) + cu_bounds_kind = dwarf2_get_pc_bounds (comp_unit_die, &best_lowpc, + &best_highpc, cu, pst); + if (cu_bounds_kind == PC_BOUNDS_HIGH_LOW && best_lowpc < best_highpc) /* Store the contiguous range if it is not empty; it can be empty for CUs with no code. */ addrmap_set_empty (objfile->psymtabs_addrmap, @@ -6003,7 +6019,7 @@ process_psymtab_comp_unit_reader (const struct die_reader_specs *reader, first_die = load_partial_dies (reader, info_ptr, 1); scan_partial_symbols (first_die, &lowpc, &highpc, - ! has_pc_info, cu); + cu_bounds_kind == PC_BOUNDS_NOT_PRESENT, cu); /* If we didn't find a lowpc, set it to highpc to avoid complaints from `maint check'. */ @@ -6012,7 +6028,7 @@ process_psymtab_comp_unit_reader (const struct die_reader_specs *reader, /* If the compilation unit didn't have an explicit address range, then use the information extracted from its child dies. */ - if (! has_pc_info) + if (cu_bounds_kind == PC_BOUNDS_NOT_PRESENT) { best_lowpc = lowpc; best_highpc = highpc; @@ -11373,7 +11389,8 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu) } /* Ignore functions with missing or invalid low and high pc attributes. */ - if (!dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL)) + if (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL) + == PC_BOUNDS_NOT_PRESENT) { attr = dwarf2_attr (die, DW_AT_external, cu); if (!attr || !DW_UNSND (attr)) @@ -11535,7 +11552,8 @@ read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu) as multiple lexical blocks? Handling children in a sane way would be nasty. Might be easier to properly extend generic blocks to describe ranges. */ - if (!dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL)) + if (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL) + == PC_BOUNDS_NOT_PRESENT) return; lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr); highpc = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr); @@ -11745,7 +11763,8 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) CORE_ADDR lowpc; /* DW_AT_entry_pc should be preferred. */ - if (!dwarf2_get_pc_bounds (target_die, &lowpc, NULL, target_cu, NULL)) + if (dwarf2_get_pc_bounds (target_die, &lowpc, NULL, target_cu, NULL) + == PC_BOUNDS_NOT_PRESENT) complaint (&symfile_complaints, _("DW_AT_GNU_call_site_target target DIE has invalid " "low pc, for referencing DIE 0x%x [in module %s]"), @@ -12020,11 +12039,11 @@ dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return, return 1; } -/* Get low and high pc attributes from a die. Return 1 if the attributes - are present and valid, otherwise, return 0. Return -1 if the range is - discontinuous, i.e. derived from DW_AT_ranges information. */ +/* Get low and high pc attributes from a die. See enum pc_bounds_kind + definition for the return value. *LOWPC and *HIGHPC are set iff + PC_BOUNDS_NOT_PRESENT is not returned. */ -static int +static enum pc_bounds_kind dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, CORE_ADDR *highpc, struct dwarf2_cu *cu, struct partial_symtab *pst) @@ -12033,7 +12052,7 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, struct attribute *attr_high; CORE_ADDR low = 0; CORE_ADDR high = 0; - int ret = 0; + enum pc_bounds_kind ret = PC_BOUNDS_NOT_PRESENT; attr_high = dwarf2_attr (die, DW_AT_high_pc, cu); if (attr_high) @@ -12048,10 +12067,10 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, } else /* Found high w/o low attribute. */ - return 0; + return PC_BOUNDS_NOT_PRESENT; /* Found consecutive range of addresses. */ - ret = 1; + ret = PC_BOUNDS_HIGH_LOW; } else { @@ -12070,15 +12089,15 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, /* Value of the DW_AT_ranges attribute is the offset in the .debug_ranges section. */ if (!dwarf2_ranges_read (ranges_offset, &low, &high, cu, pst)) - return 0; + return PC_BOUNDS_NOT_PRESENT; /* Found discontinuous range of addresses. */ - ret = -1; + ret = PC_BOUNDS_RANGES; } } /* read_partial_die has also the strict LOW < HIGH requirement. */ if (high <= low) - return 0; + return PC_BOUNDS_NOT_PRESENT; /* When using the GNU linker, .gnu.linkonce. sections are used to eliminate duplicate copies of functions and vtables and such. @@ -12089,7 +12108,7 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, If this is a discarded function, mark the pc bounds as invalid, so that GDB will ignore it. */ if (low == 0 && !dwarf2_per_objfile->has_section_at_zero) - return 0; + return PC_BOUNDS_NOT_PRESENT; *lowpc = low; if (highpc) @@ -12110,7 +12129,8 @@ dwarf2_get_subprogram_pc_bounds (struct die_info *die, CORE_ADDR low, high; struct die_info *child = die->child; - if (dwarf2_get_pc_bounds (die, &low, &high, cu, NULL)) + if (dwarf2_get_pc_bounds (die, &low, &high, cu, NULL) + != PC_BOUNDS_NOT_PRESENT) { *lowpc = min (*lowpc, low); *highpc = max (*highpc, high); @@ -12147,7 +12167,8 @@ get_scope_pc_bounds (struct die_info *die, CORE_ADDR best_high = (CORE_ADDR) 0; CORE_ADDR current_low, current_high; - if (dwarf2_get_pc_bounds (die, ¤t_low, ¤t_high, cu, NULL)) + if (dwarf2_get_pc_bounds (die, ¤t_low, ¤t_high, cu, NULL) + != PC_BOUNDS_NOT_PRESENT) { best_low = current_low; best_high = current_high; -- 2.5.5 ++++++ gdb-bare-DW_TAG_lexical_block-2of2.patch ++++++ >From e385593eef98ac92be57159e141f4b805dadbbb3 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil <jan.kratoch...@redhat.com> Date: Mon, 30 May 2016 14:14:43 +0200 Subject: [PATCH 2/2] PR 15231: import bare DW_TAG_lexical_block Local variables in lambdas are not accessible https://sourceware.org/bugzilla/show_bug.cgi?id=15231 GDB: read_lexical_block_scope /* Ignore blocks with missing or invalid low and high pc attributes. */ [...] if (!dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL)) return; But sometimes there is: FAIL: gcc-5.3.1-6.fc23.x86_64 <2><92>: Abbrev Number: 11 (DW_TAG_lexical_block) <3><9c>: Abbrev Number: 13 (DW_TAG_structure_type) <9d> DW_AT_name : (indirect string, offset: 0x3c): <lambda()> [...] Where DW_TAG_lexical_block has no attributes. Such whole subtree is currently dropped by GDB while I think it should just import all its children DIEs. It even XFAIL->XPASSes gdb.ada/out_of_line_in_inlined.exp: commit 0fa7fe506c242b459c4c05d331e7c7d66fb52390 Author: Joel Brobecker <brobec...@adacore.com> out of line functions nested inside inline functions. So I have removed that xfail. gdb/ChangeLog 2016-05-30 Jan Kratochvil <jan.kratoch...@redhat.com> PR c++/15231 * dwarf2read.c (enum pc_bounds_kind): Add PC_BOUNDS_INVALID. (process_psymtab_comp_unit_reader, read_func_scope): Adjust callers. (read_lexical_block_scope): Import DIEs from bare DW_TAG_lexical_block. (read_call_site_scope): Adjust callers. (dwarf2_get_pc_bounds): Implement pc_bounds_invalid. (dwarf2_get_subprogram_pc_bounds, get_scope_pc_bounds): Adjust callers. gdb/testsuite/ChangeLog 2016-05-30 Jan Kratochvil <jan.kratoch...@redhat.com> PR c++/15231 * gdb.ada/out_of_line_in_inlined.exp: Remove xfails. * gdb.dwarf2/dw2-lexical-block-bare.exp: New file. --- gdb/ChangeLog | 10 ++++ gdb/dwarf2read.c | 53 ++++++++++------ gdb/testsuite/ChangeLog | 6 ++ gdb/testsuite/gdb.ada/out_of_line_in_inlined.exp | 6 -- .../gdb.dwarf2/dw2-lexical-block-bare.exp | 70 ++++++++++++++++++++++ 5 files changed, 120 insertions(+), 25 deletions(-) create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp ### a/gdb/ChangeLog ### b/gdb/ChangeLog ## -1,5 +1,15 @@ 2016-05-30 Jan Kratochvil <jan.kratoch...@redhat.com> + PR c++/15231 + * dwarf2read.c (enum pc_bounds_kind): Add PC_BOUNDS_INVALID. + (process_psymtab_comp_unit_reader, read_func_scope): Adjust callers. + (read_lexical_block_scope): Import DIEs from bare DW_TAG_lexical_block. + (read_call_site_scope): Adjust callers. + (dwarf2_get_pc_bounds): Implement pc_bounds_invalid. + (dwarf2_get_subprogram_pc_bounds, get_scope_pc_bounds): Adjust callers. + +2016-05-30 Jan Kratochvil <jan.kratoch...@redhat.com> + Code cleanup: dwarf2_get_pc_bounds: -1/0/+1 -> enum * dwarf2read.c (enum pc_bounds_kind) New. (dwarf2_get_pc_bounds): Use it in the declaration. --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -1607,13 +1607,16 @@ static int dwarf2_ranges_read (unsigned, CORE_ADDR *, CORE_ADDR *, struct dwarf2_cu *, struct partial_symtab *); /* How dwarf2_get_pc_bounds constructed its *LOWPC and *HIGHPC return - values. */ + values. Keep the items ordered with increasing constraints compliance. */ enum pc_bounds_kind { - /* No valid combination of DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges - was found. */ + /* No attribute DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges was found. */ PC_BOUNDS_NOT_PRESENT, + /* Some of the attributes DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges + were present but they do not form a valid range of PC addresses. */ + PC_BOUNDS_INVALID, + /* Discontiguous range was found - that is DW_AT_ranges was found. */ PC_BOUNDS_RANGES, @@ -6019,7 +6022,7 @@ process_psymtab_comp_unit_reader (const struct die_reader_specs *reader, first_die = load_partial_dies (reader, info_ptr, 1); scan_partial_symbols (first_die, &lowpc, &highpc, - cu_bounds_kind == PC_BOUNDS_NOT_PRESENT, cu); + cu_bounds_kind <= PC_BOUNDS_INVALID, cu); /* If we didn't find a lowpc, set it to highpc to avoid complaints from `maint check'. */ @@ -6028,7 +6031,7 @@ process_psymtab_comp_unit_reader (const struct die_reader_specs *reader, /* If the compilation unit didn't have an explicit address range, then use the information extracted from its child dies. */ - if (cu_bounds_kind == PC_BOUNDS_NOT_PRESENT) + if (cu_bounds_kind <= PC_BOUNDS_INVALID) { best_lowpc = lowpc; best_highpc = highpc; @@ -11390,7 +11393,7 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu) /* Ignore functions with missing or invalid low and high pc attributes. */ if (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL) - == PC_BOUNDS_NOT_PRESENT) + <= PC_BOUNDS_INVALID) { attr = dwarf2_attr (die, DW_AT_external, cu); if (!attr || !DW_UNSND (attr)) @@ -11552,9 +11555,20 @@ read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu) as multiple lexical blocks? Handling children in a sane way would be nasty. Might be easier to properly extend generic blocks to describe ranges. */ - if (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL) - == PC_BOUNDS_NOT_PRESENT) - return; + switch (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL)) + { + case PC_BOUNDS_NOT_PRESENT: + /* DW_TAG_lexical_block has no attributes, process its children as if + there was no wrapping by that DW_TAG_lexical_block. + GCC does no longer produces such DWARF since GCC r224161. */ + for (child_die = die->child; + child_die != NULL && child_die->tag; + child_die = sibling_die (child_die)) + process_die (child_die, cu); + return; + case PC_BOUNDS_INVALID: + return; + } lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr); highpc = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr); @@ -11764,7 +11778,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) /* DW_AT_entry_pc should be preferred. */ if (dwarf2_get_pc_bounds (target_die, &lowpc, NULL, target_cu, NULL) - == PC_BOUNDS_NOT_PRESENT) + <= PC_BOUNDS_INVALID) complaint (&symfile_complaints, _("DW_AT_GNU_call_site_target target DIE has invalid " "low pc, for referencing DIE 0x%x [in module %s]"), @@ -12041,7 +12055,7 @@ dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return, /* Get low and high pc attributes from a die. See enum pc_bounds_kind definition for the return value. *LOWPC and *HIGHPC are set iff - PC_BOUNDS_NOT_PRESENT is not returned. */ + neither PC_BOUNDS_NOT_PRESENT nor PC_BOUNDS_INVALID are returned. */ static enum pc_bounds_kind dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, @@ -12052,7 +12066,7 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, struct attribute *attr_high; CORE_ADDR low = 0; CORE_ADDR high = 0; - enum pc_bounds_kind ret = PC_BOUNDS_NOT_PRESENT; + enum pc_bounds_kind ret; attr_high = dwarf2_attr (die, DW_AT_high_pc, cu); if (attr_high) @@ -12067,7 +12081,7 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, } else /* Found high w/o low attribute. */ - return PC_BOUNDS_NOT_PRESENT; + return PC_BOUNDS_INVALID; /* Found consecutive range of addresses. */ ret = PC_BOUNDS_HIGH_LOW; @@ -12089,15 +12103,17 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, /* Value of the DW_AT_ranges attribute is the offset in the .debug_ranges section. */ if (!dwarf2_ranges_read (ranges_offset, &low, &high, cu, pst)) - return PC_BOUNDS_NOT_PRESENT; + return PC_BOUNDS_INVALID; /* Found discontinuous range of addresses. */ ret = PC_BOUNDS_RANGES; } + else + return PC_BOUNDS_NOT_PRESENT; } /* read_partial_die has also the strict LOW < HIGH requirement. */ if (high <= low) - return PC_BOUNDS_NOT_PRESENT; + return PC_BOUNDS_INVALID; /* When using the GNU linker, .gnu.linkonce. sections are used to eliminate duplicate copies of functions and vtables and such. @@ -12108,7 +12124,7 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, If this is a discarded function, mark the pc bounds as invalid, so that GDB will ignore it. */ if (low == 0 && !dwarf2_per_objfile->has_section_at_zero) - return PC_BOUNDS_NOT_PRESENT; + return PC_BOUNDS_INVALID; *lowpc = low; if (highpc) @@ -12129,8 +12145,7 @@ dwarf2_get_subprogram_pc_bounds (struct die_info *die, CORE_ADDR low, high; struct die_info *child = die->child; - if (dwarf2_get_pc_bounds (die, &low, &high, cu, NULL) - != PC_BOUNDS_NOT_PRESENT) + if (dwarf2_get_pc_bounds (die, &low, &high, cu, NULL) >= PC_BOUNDS_RANGES) { *lowpc = min (*lowpc, low); *highpc = max (*highpc, high); @@ -12168,7 +12183,7 @@ get_scope_pc_bounds (struct die_info *die, CORE_ADDR current_low, current_high; if (dwarf2_get_pc_bounds (die, ¤t_low, ¤t_high, cu, NULL) - != PC_BOUNDS_NOT_PRESENT) + >= PC_BOUNDS_RANGES) { best_low = current_low; best_high = current_high; ### a/gdb/testsuite/ChangeLog ### b/gdb/testsuite/ChangeLog ## -1,3 +1,9 @@ +2016-05-30 Jan Kratochvil <jan.kratoch...@redhat.com> + + PR c++/15231 + * gdb.ada/out_of_line_in_inlined.exp: Remove xfails. + * gdb.dwarf2/dw2-lexical-block-bare.exp: New file. + 2016-05-27 Pedro Alves <pal...@redhat.com> * gdb.threads/attach-many-short-lived-threads.exp (bad_dejagnu): --- a/gdb/testsuite/gdb.ada/out_of_line_in_inlined.exp +++ b/gdb/testsuite/gdb.ada/out_of_line_in_inlined.exp @@ -23,20 +23,14 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug optimize=-O2}] clean_restart ${testfile} -# GCC currently is missing a DW_AT_origin attribute in one of the -# lexical blocks, preventing GDB from creating a symbol for the -# subprogram we want to break on. -setup_xfail "*-*-*" gdb_test "break foo_o224_021.child1.child2" \ "Breakpoint \[0-9\]+ at.*: file .*foo_o224_021.adb, line \[0-9\]+." gdb_run_cmd -setup_xfail "*-*-*" gdb_test "" \ "Breakpoint $decimal, foo_o224_021\\.child1\\.child2 \\(s=\\.\\.\\.\\).*" set opt_addr_in "($hex in)?" -setup_xfail "*-*-*" gdb_test "bt" \ [multi_line "#0 +$opt_addr_in +foo_o224_021\\.child1\\.child2 \\(s=\\.\\.\\.\\).*" \ "#1 +$opt_addr_in +foo_o224_021\\.child1 \\(\\).*" \ --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp @@ -0,0 +1,70 @@ +# Copyright 2016 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 <http://www.gnu.org/licenses/>. +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +standard_testfile .S main.c + +# Make some DWARF for the test. +set asm_file [standard_output_file $srcfile] +Dwarf::assemble $asm_file { + cu {} { + compile_unit { + {low_pc [gdb_target_symbol main] DW_FORM_addr} + {high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr} + } { + declare_labels integer_label + + integer_label: DW_TAG_base_type { + {DW_AT_byte_size 4 DW_FORM_sdata} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_name integer} + } + + DW_TAG_subprogram { + {name main} + {DW_AT_external 1 flag} + {low_pc [gdb_target_symbol main] DW_FORM_addr} + {high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr} + } { + DW_TAG_lexical_block { + } { + DW_TAG_variable { + {DW_AT_name testvar} + {DW_AT_type :$integer_label} + {DW_AT_external 1 flag} + {DW_AT_location { + DW_OP_addr [gdb_target_symbol main] + } SPECIAL_expr} + } + } + } + } + } +} + +if { [prepare_for_testing ${testfile}.exp ${testfile} \ + [list $srcfile2 $asm_file] {nodebug}] } { + return -1 +} + +runto_main + +# FAILing GDB did print: No symbol "testvar" in current context. +gdb_test "p testvar" { = -?[0-9]+} -- 2.5.5 ++++++ gdb-bz1219747-attach-kills.patch ++++++ http://sourceware.org/ml/gdb-patches/2015-10/msg00301.html Subject: [PATCH 1/3] Never kill PID on: gdb exec PID Hi, in some cases with deleted main executable GDB will want to kill the inferior. $ cp /bin/sleep /tmp/sleep;/tmp/sleep 1h&p=$! $ rm /tmp/sleep $ gdb /tmp/sleep $p GNU gdb (GDB) 7.10.50.20151016-cvs /tmp/sleep: No such file or directory. Attaching to process 9694 /tmp/sleep (deleted): No such file or directory. A program is being debugged already. Kill it? (y or n) _ The first attachment of "/tmp/sleep" commandline argument errors at: #0 throw_error (error=GENERIC_ERROR, fmt=0x116d135 "%s.") at ./common/common-exceptions.c:371 #1 in throw_perror_with_name (errcode=GENERIC_ERROR, string=0x7fffffffdb96 "/dfsfds") at utils.c:974 #2 in perror_with_name (string=0x7fffffffdb96 "/dfsfds") at utils.c:982 #3 in exec_file_attach (filename=0x7fffffffdb96 "/dfsfds", from_tty=1) at exec.c:268 267 if (scratch_chan < 0) 268 perror_with_name (filename); #4 in catch_command_errors_const (command=0x80f59f <exec_file_attach>, arg=0x7fffffffdb96 "/dfsfds", from_tty=1) at main.c:395 #5 in captured_main (data=0x7fffffffd6f0) at main.c:1051 1051 if (catch_command_errors_const (exec_file_attach, execarg, 1052 !batch_flag)) Then GDB tries to attach to the process $p: #0 inferior_appeared (inf=0x240e0b0, pid=29210) at inferior.c:305 #1 in inf_ptrace_attach (ops=0x2339540, args=0x21dcdc0 "29210", from_tty=1) at inf-ptrace.c:206 #2 in linux_nat_attach (ops=0x2339540, args=0x21dcdc0 "29210", from_tty=1) at linux-nat.c:1278 #3 in attach_command (args=0x21dcdc0 "29210", from_tty=1) at infcmd.c:2748 #4 in catch_command_errors (command=0x79d7e5 <attach_command>, arg=0x7fffffffdb9e "29210", from_tty=1) at main.c:368 #5 in captured_main (data=0x7fffffffd6f0) at main.c:1082 1082 if (catch_command_errors (attach_command, pid_or_core_arg, 1083 !batch_flag) == 0) This succeeds and since this moment GDB has a valid inferior. But despite that the lines 1082 if (catch_command_errors (attach_command, pid_or_core_arg, 1083 !batch_flag) == 0) still fail because consequently attach_command() fails to find the associated executable file: #0 throw_error (error=GENERIC_ERROR, fmt=0x116d135 "%s.") at ./common/common-exceptions.c:371 #1 in throw_perror_with_name (errcode=GENERIC_ERROR, string=0x2477860 "/tmp/sleep (deleted)") at utils.c:974 #2 in perror_with_name (string=0x2477860 "/tmp/sleep (deleted)") at utils.c:982 #3 in exec_file_attach (filename=0x2477860 "/tmp/sleep (deleted)", from_tty=1) at exec.c:268 267 if (scratch_chan < 0) 268 perror_with_name (filename); #4 in exec_file_locate_attach (pid=29210, from_tty=1) at exec.c:173 #5 in attach_command_post_wait (args=0x24739b0 "29210", from_tty=1, async_exec=0) at infcmd.c:2628 #6 in attach_command_continuation (args=0x2473590, err=0) at infcmd.c:2700 #7 in do_my_continuations_1 (pmy_chain=0x7fffffffd190, err=0) at continuations.c:59 #8 in do_my_continuations (list=0x240e130, err=0) at continuations.c:83 #9 in do_all_inferior_continuations (err=0) at continuations.c:125 #10 in inferior_event_handler (event_type=INF_EXEC_COMPLETE, client_data=0x0) at inf-loop.c:60 #11 in fetch_inferior_event (client_data=0x0) at infrun.c:3929 #12 in inferior_event_handler (event_type=INF_REG_EVENT, client_data=0x0) at inf-loop.c:44 #13 in handle_target_event (error=0, client_data=0x0) at linux-nat.c:4681 #14 in handle_file_event (file_ptr=0x21e4170, ready_mask=1) at event-loop.c:708 #15 in gdb_wait_for_event (block=0) at event-loop.c:834 #16 in gdb_do_one_event () at event-loop.c:298 #17 in wait_sync_command_done () at top.c:373 #18 in maybe_wait_sync_command_done (was_sync=0) at top.c:388 #19 in catch_command_errors (command=0x79d7e5 <attach_command>, arg=0x7fffffffdb9e "29210", from_tty=1) at main.c:370 #20 in captured_main (data=0x7fffffffd6f0) at main.c:1082 1082 if (catch_command_errors (attach_command, pid_or_core_arg, 1083 !batch_flag) == 0) and therefore GDB executes the following: (gdb) bt #5 in query (ctlstr=0x1141ae8 "A program is being debugged already. Kill it? ") at utils.c:1371 #6 in target_preopen (from_tty=1) at target.c:2183 2179 if (have_inferiors ()) 2180 { 2181 if (!from_tty 2182 || !have_live_inferiors () 2183 || query (_("A program is being debugged already. Kill it? "))) 2184 iterate_over_inferiors (dispose_inferior, NULL); 2185 else 2186 error (_("Program not killed.")); 2187 } #7 in core_open (arg=0x7fffffffdb9f "9694", from_tty=1) at corelow.c:283 #8 in core_file_command (filename=0x7fffffffdb9f "9694", from_tty=1) at corefile.c:77 #9 in catch_command_errors (command=0x86ca16 <core_file_command>, arg=0x7fffffffdb9f "9694", from_tty=1) at main.c:368 #10 in captured_main (data=0x7fffffffd6f0) at main.c:1084 1084 catch_command_errors (core_file_command, pid_or_core_arg, 1085 !batch_flag); No regressions on {x86_64,x86_64-m32,i686}-fedora24pre-linux-gnu. Thanks, Jan gdb/ChangeLog 2015-10-16 Jan Kratochvil <jan.kratoch...@redhat.com> * main.c (captured_main): Run core_file_command for pid_or_core_arg only if not have_inferiors (). gdb/testsuite/ChangeLog 2015-10-16 Jan Kratochvil <jan.kratoch...@redhat.com> * gdb.base/attach-kills.c: New. * gdb.base/attach-kills.exp: New. --- gdb/testsuite/gdb.base/attach-kills.c | 25 ++++++++++++++++ gdb/testsuite/gdb.base/attach-kills.exp | 49 +++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 gdb/testsuite/gdb.base/attach-kills.c create mode 100644 gdb/testsuite/gdb.base/attach-kills.exp diff --git a/gdb/main.c b/gdb/main.c index 49c9b68..bc19699 100644 --- a/gdb/main.c +++ b/gdb/main.c @@ -1080,7 +1080,10 @@ captured_main (void *data) if (isdigit (pid_or_core_arg[0])) { if (catch_command_errors (attach_command, pid_or_core_arg, - !batch_flag) == 0) + !batch_flag) == 0 + /* attach_command could succeed partially and core_file_command + would try to kill it. */ + && !have_inferiors ()) catch_command_errors (core_file_command, pid_or_core_arg, !batch_flag); } diff --git a/gdb/testsuite/gdb.base/attach-kills.c b/gdb/testsuite/gdb.base/attach-kills.c new file mode 100644 index 0000000..2398f00 --- /dev/null +++ b/gdb/testsuite/gdb.base/attach-kills.c @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2015 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 <http://www.gnu.org/licenses/>. */ + +#include <unistd.h> + +int +main (void) +{ + sleep (600); + return 0; +} diff --git a/gdb/testsuite/gdb.base/attach-kills.exp b/gdb/testsuite/gdb.base/attach-kills.exp new file mode 100644 index 0000000..9a93cb7 --- /dev/null +++ b/gdb/testsuite/gdb.base/attach-kills.exp @@ -0,0 +1,49 @@ +# Copyright (C) 2015 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 <http://www.gnu.org/licenses/>. + +if { ![can_spawn_for_attach] } { + return 0 +} + +standard_testfile + +if { [build_executable ${testfile}.exp $testfile] == -1 } { + return -1 +} + +# Start the program running and then wait for a bit, to be sure +# that it can be attached to. + +set test_spawn_id [spawn_wait_for_attach $binfile] +set testpid [spawn_id_get_pid $test_spawn_id] + +remote_exec target "cp -pf -- $binfile $binfile-copy" +remote_exec target "rm -f -- $binfile" + +set test "start gdb" +set res [gdb_spawn_with_cmdline_opts \ + "-iex \"set height 0\" -iex \"set width 0\" /DoEsNoTeXySt $testpid"] +if { $res != 0} { + fail "$test (spawn)" + kill_wait_spawned_process $test_spawn_id + return -1 +} +gdb_test_multiple "" $test { + -re "\r\nAttaching to .*\r\n$gdb_prompt $" { + pass $test + } +} + +kill_wait_spawned_process $test_spawn_id ++++++ gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch ++++++ Index: gdb-7.6.1/gdb/testsuite/gdb.base/rhbz1261564-aarch64-watchpoint.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ gdb-7.6.1/gdb/testsuite/gdb.base/rhbz1261564-aarch64-watchpoint.exp 2016-03-10 22:31:31.152094080 +0100 @@ -0,0 +1,43 @@ +# Copyright (C) 2016 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 <http://www.gnu.org/licenses/>. + +if { [prepare_for_testing rhbz1261564-aarch64-watchpoint.exp "rhbz1261564-aarch64-watchpoint"] } { + return -1 +} + +if { ! [ runto main ] } then { return 0 } + +gdb_test "rwatch aligned.var4" "Hardware read watchpoint \[0-9\]+: aligned.var4" + +proc checkvar { address } { + global gdb_prompt + + set test "p &aligned.var$address" + gdb_test_multiple $test $test { + -re " = \\(int \\*\\) 0x\[0-9a-f\]+$address <aligned(\\+\[0-9\]+)?>\r\n$gdb_prompt $" { + pass $test + } + -re "\r\n$gdb_prompt $" { + untested "$test (unexpected ELF layout)" + return 0 + } + } + return 1 +} +if ![checkvar "0"] { return } +if ![checkvar "4"] { return } +if ![checkvar "8"] { return } + +gdb_continue_to_end Index: gdb-7.6.1/gdb/testsuite/gdb.base/rhbz1261564-aarch64-watchpoint.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ gdb-7.6.1/gdb/testsuite/gdb.base/rhbz1261564-aarch64-watchpoint.c 2016-03-10 22:31:31.152094080 +0100 @@ -0,0 +1,33 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 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 <http://www.gnu.org/licenses/>. */ + +__attribute__((aligned(16))) struct +{ + int var0, var4, var8; +} aligned; + +int +main (void) +{ + aligned.var0 = 1; + aligned.var4 = 2; + aligned.var8 = 3; + + aligned.var4 = aligned.var0; + + return 0; +} ++++++ gdb-rhbz1325795-framefilters-test.patch ++++++ --- /dev/null 2016-04-19 22:52:19.405224269 +0200 +++ gdb-7.6.1/gdb/testsuite/gdb.python/py-framefilter-thread.exp 2016-04-19 23:22:10.655271756 +0200 @@ -0,0 +1,54 @@ +# Copyright (C) 2016 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 <http://www.gnu.org/licenses/>. + +load_lib gdb-python.exp + +standard_testfile + +if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug pthreads}]} { + return -1 +} + +# Skip all tests if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + +if ![runto_main] then { + return +} +gdb_test_no_output "set python print-stack full" \ + "Set python print-stack to full" + +# Load global frame-filters +set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}.py] +gdb_test_no_output "python execfile ('${remote_python_file}')" \ + "Load python file" + +gdb_breakpoint [gdb_get_line_number "Backtrace end breakpoint"] +gdb_continue_to_breakpoint "Backtrace end breakpoint" + +# #2 0x00007ffff75f228d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113^M +gdb_test "bt no-filters" " in (\\.?_*clone|thread_start) \[^\r\n\]*" "bt no-filters" + +# #2 0x00007ffff75f228d in 941595343737041 () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113^M +# vs. +# #2 0x00007ffff75f228d in 941595343737041Traceback (most recent call last): +# File "/home/jkratoch/redhat/rhel/gdb/rhel-7.3/gdb-7.6.1/gdb/testsuite/../data-directory/python/gdb/FrameDecorator.py", line 145, in frame_args +# return self._base.frame_args() +# File "/home/jkratoch/redhat/rhel/gdb/rhel-7.3/gdb-7.6.1/gdb/testsuite/../data-directory/python/gdb/FrameDecorator.py", line 152, in frame_args +# return args.fetch_frame_args() +# File "/home/jkratoch/redhat/rhel/gdb/rhel-7.3/gdb-7.6.1/gdb/testsuite/../data-directory/python/gdb/FrameDecorator.py", line 276, in fetch_frame_args +# block = self.frame.block() +# RuntimeError: Cannot locate object file for block. +gdb_test "bt" " in \[0-9\]+ \[^\r\n\]*" "bt with filters" --- /dev/null 2016-04-19 22:52:19.405224269 +0200 +++ gdb-7.6.1/gdb/testsuite/gdb.python/py-framefilter-thread.c 2016-04-18 22:44:07.096613437 +0200 @@ -0,0 +1,39 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 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 <http://www.gnu.org/licenses/>. */ + +#include <pthread.h> +#include <assert.h> + +static void * +start (void *arg) +{ + return; /* Backtrace end breakpoint */ +} + +int +main (void) +{ + pthread_t thread1; + int i; + + i = pthread_create (&thread1, NULL, start, NULL); + assert (i == 0); + i = pthread_join (thread1, NULL); + assert (i == 0); + + return 0; +} --- /dev/null 2016-04-19 22:52:19.405224269 +0200 +++ gdb-7.6.1/gdb/testsuite/gdb.python/py-framefilter-thread.py 2016-04-19 23:14:03.273994063 +0200 @@ -0,0 +1,56 @@ +# Copyright (C) 2016 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 <http://www.gnu.org/licenses/>. + +# This file is part of the GDB testsuite. It tests Python-based +# frame-filters. + +# This test is specifically crafted for RH BZ 1197665. + +import gdb +import itertools +from gdb.FrameDecorator import FrameDecorator +import copy + +class Reverse_Function (FrameDecorator): + + def __init__(self, fobj): + super(Reverse_Function, self).__init__(fobj) + self.fobj = fobj + + def function (self): + # This function call should not fail. + gdb.target_charset () + + fname = str (self.fobj.function()) + if (fname == None or fname == ""): + return None + else: + fname = fname[::-1] + return fname + +class FrameFilter (): + + def __init__ (self): + self.name = "Reverse" + self.priority = 100 + self.enabled = True + gdb.frame_filters [self.name] = self + + def filter (self, frame_iter): + frame_iter = itertools.imap (Reverse_Function, + frame_iter) + return frame_iter + +FrameFilter() ++++++ gdb-testsuite-dw2-undefined-ret-addr.patch ++++++ http://sourceware.org/ml/gdb-patches/2016-04/msg00181.html Subject: [testsuite patch] Fix 7.11 regression: gdb.dwarf2/dw2-undefined-ret-addr.exp [now with the patch] --oyUTqETQ0mS9luUI Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, a038fa3e14a477d4d72a26c2e139fa47d2774be2 is the first bad commit commit a038fa3e14a477d4d72a26c2e139fa47d2774be2 Author: Markus Metzger <markus.t.metz...@intel.com> stack: check frame_unwind_caller_id [PATCH v3 2/3] stack: check frame_unwind_caller_id https://sourceware.org/ml/gdb-patches/2016-02/msg00363.html Message-Id: <1455207283-12660-2-git-send-email-markus.t.metz...@intel.com> (gdb) PASS: gdb.dwarf2/dw2-undefined-ret-addr.exp: up refuses to go up info frame Stack level 0, frame at 0x0: - rip = 0x40059a in stop_frame (dw2-undefined-ret-addr.c:22); saved rip = <not saved> + rip = 0x40059a in stop_frame (dw2-undefined-ret-addr.c:22); saved rip = <unavailable> Outermost frame: outermost source language c. Arglist at 0x7fffffffd610, args: Locals at 0x7fffffffd610, Previous frame's sp is 0x7fffffffd620 Saved registers: rbp at 0x7fffffffd610 -(gdb) PASS: gdb.dwarf2/dw2-undefined-ret-addr.exp: info frame +(gdb) FAIL: gdb.dwarf2/dw2-undefined-ret-addr.exp: info frame It happens on normal native Fedora 23 x86_64. I am not completely sure about the reasons but it looks to me GDB behavior has just changed. OK for check-in? Thanks, Jan --oyUTqETQ0mS9luUI Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename=1 gdb/testsuite/ChangeLog 2016-04-08 Jan Kratochvil <jan.kratoch...@redhat.com> * gdb.dwarf2/dw2-undefined-ret-addr.exp: Expect <unavailable>. diff --git a/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.exp b/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.exp index c666584..e43054b 100644 --- a/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.exp +++ b/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.exp @@ -48,7 +48,7 @@ gdb_test "up" \ # doesn't cause an error, and shows "<not saved>". gdb_test "info frame" [multi_line \ "Stack level 0, frame at $hex\:" \ - " rip = $hex in stop_frame \\(dw2-undefined-ret-addr\\.c:22\\); saved rip = <not saved>" \ + " rip = $hex in stop_frame \\(dw2-undefined-ret-addr\\.c:22\\); saved rip = <unavailable>" \ " Outermost frame: outermost" \ " source language c\\." \ " Arglist at $hex, args\: " \ --oyUTqETQ0mS9luUI-- ++++++ patchlist.pl ++++++ --- /var/tmp/diff_new_pack.rmAP2w/_old 2016-07-12 23:45:10.000000000 +0200 +++ /var/tmp/diff_new_pack.rmAP2w/_new 2016-07-12 23:45:10.000000000 +0200 @@ -8,7 +8,7 @@ system "rm \$(grep \"^Patch[0-9]\\{1,3\\}:\" gdb.spec | cut -d\" \" -f 2) 2>/dev/null"; system "rm *.tar.bz2"; -system "cp $gdbFedora/*.tar.bz2 ./"; +system "cp -p $gdbFedora/*.tar.bz2 ./"; system "pushd $gdbFedora ; sh $dir/patchname_get.sh -v gdb.spec 2>$dir/test.txt; popd"; system "grep \"^Patch\" test.txt > test2.txt";