diff --git a/binutils-2.23.52.0.1-addr2line-dynsymtab.patch b/binutils-2.23.52.0.1-addr2line-dynsymtab.patch index d434e3f..d1bbf82 100644 --- a/binutils-2.23.52.0.1-addr2line-dynsymtab.patch +++ b/binutils-2.23.52.0.1-addr2line-dynsymtab.patch @@ -62,83 +62,3 @@ /* Then try in the global debugfile directory. */ strcpy (debugfile, debug_file_directory); dirlen = strlen (debug_file_directory) - 1; -*** ../binutils-2.23.52.0.1.orig/bfd/dwarf2.c 2013-03-14 11:25:30.608306129 +0000 ---- bfd/dwarf2.c 2013-03-14 13:14:18.102487075 +0000 -*************** find_line (bfd *abfd, -*** 3339,3346 **** ---- 3339,3349 ---- - struct dwarf2_debug *stash; - /* What address are we looking for? */ - bfd_vma addr; -+ /* What is the address without relocation ? */ -+ bfd_vma unrelocated_addr; - struct comp_unit* each; - bfd_vma found = FALSE; -+ bfd_vma possible_find = FALSE; - bfd_boolean do_line; - - *filename_ptr = NULL; -*************** find_line (bfd *abfd, -*** 3380,3385 **** ---- 3383,3394 ---- - else - abort (); - -+ /* If we are dealing with PIC code then the debug information -+ will be based on unrelocated addresses. Since we cannot be -+ sure if this is a PIC address we test both with and without -+ relocation. */ -+ unrelocated_addr = addr; -+ - if (section->output_section) - addr += section->output_section->vma + section->output_offset; - else -*************** find_line (bfd *abfd, -*** 3442,3447 **** ---- 3451,3466 ---- - stash)); - if (found) - goto done; -+ -+ if (! possible_find) -+ possible_find = ((each->arange.high == 0 -+ || comp_unit_contains_address (each, unrelocated_addr)) -+ && comp_unit_find_nearest_line (each, unrelocated_addr, -+ filename_ptr, -+ functionname_ptr, -+ linenumber_ptr, -+ discriminator_ptr, -+ stash)); - } - } - -*************** find_line (bfd *abfd, -*** 3535,3540 **** ---- 3554,3569 ---- - discriminator_ptr, - stash)); - -+ if (! found && ! do_line && ! possible_find) -+ possible_find = ((each->arange.high == 0 -+ || comp_unit_contains_address (each, unrelocated_addr)) -+ && comp_unit_find_nearest_line (each, unrelocated_addr, -+ filename_ptr, -+ functionname_ptr, -+ linenumber_ptr, -+ discriminator_ptr, -+ stash)); -+ - if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr) - == stash->sec->size) - { -*************** find_line (bfd *abfd, -*** 3552,3557 **** ---- 3581,3588 ---- - if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0) - unset_sections (stash); - -+ if (! found) -+ return possible_find; - return found; - } - diff --git a/binutils.spec b/binutils.spec index d8ee3c0..67c0e32 100644 --- a/binutils.spec +++ b/binutils.spec @@ -27,7 +27,7 @@ Name: %{?cross}binutils%{?_with_debug:-debug} # official binutils release happens (2.24.0) we will be able to restore # Version to an honest value and everything will be good again. Version: 2.23.88.0.1 -Release: 23%{?dist} +Release: 24%{?dist} License: GPLv3+ Group: Development/Tools URL: http://sources.redhat.com/binutils @@ -530,6 +530,10 @@ exit 0 %endif # %{isnative} %changelog +* Fri Oct 31 2014 Nick Clifton - 2.23.88.0.1-24 +- Remove bogus part of addr2line-dynsymtab.patch. + Resovles: BZ #1157706 + * Fri Oct 31 2014 Nick Clifton - 2.23.88.0.1-23 - Fix buffer overrun in ihex parser. - Fix memory corruption in previous patch.