Import orphan section placement patch from mainline. (BZ 510384)

This commit is contained in:
Nicholas Clifton 2009-07-14 10:00:42 +00:00
parent fdf1169030
commit 508d826e26
2 changed files with 39 additions and 1 deletions

View File

@ -0,0 +1,33 @@
--- ../binutils-2.19.51.0.11.orig/ld/ldlang.c 2009-07-14 11:42:46.000000000 +0100
+++ ld/ldlang.c 2009-07-14 11:55:01.000000000 +0100
@@ -1615,10 +1615,12 @@ output_prev_sec_find (lang_output_sectio
idea is to skip over anything that might be inside a SECTIONS {}
statement in a script, before we find another output section
statement. Assignments to "dot" before an output section statement
- are assumed to belong to it. An exception to this rule is made for
- the first assignment to dot, otherwise we might put an orphan
- before . = . + SIZEOF_HEADERS or similar assignments that set the
- initial address. */
+ are assumed to belong to it, except in two cases; The first
+ assignment to dot, and assignments before non-alloc sections.
+ Otherwise we might put an orphan before . = . + SIZEOF_HEADERS or
+ similar assignments that set the initial address, or we might
+ insert non-alloc note sections among assignments setting end of
+ image symbols. */
static lang_statement_union_type **
insert_os_after (lang_output_section_statement_type *after)
@@ -1662,7 +1664,12 @@ insert_os_after (lang_output_section_sta
continue;
case lang_output_section_statement_enum:
if (assign != NULL)
- where = assign;
+ {
+ asection *s = (*where)->output_section_statement.bfd_section;
+
+ if (s == NULL || (s->flags & SEC_ALLOC) != 0)
+ where = assign;
+ }
break;
case lang_input_statement_enum:
case lang_address_statement_enum:

View File

@ -17,7 +17,7 @@
Summary: A GNU collection of binary utilities
Name: %{?cross}binutils%{?_with_debug:-debug}
Version: 2.19.51.0.11
Release: 25%{?dist}
Release: 26%{?dist}
License: GPLv3+
Group: Development/Tools
URL: http://sources.redhat.com/binutils
@ -30,6 +30,7 @@ Patch04: binutils-2.19.51.0.10-envvar-revert.patch
Patch05: binutils-2.19.51.0.10-version.patch
Patch06: binutils-2.19.51.0.10-set-long-long.patch
Patch07: binutils-2.19.51.0.10-build-id.patch
Patch08: binutils-2.19.51.0.11-orphan-section-placement.patch
%if 0%{?_with_debug:1}
# Define this if you want to skip the strip step and preserve debug info.
@ -101,6 +102,7 @@ to consider using libelf instead of BFD.
%patch05 -p0 -b .version~
%patch06 -p0 -b .set-long-long~
%patch07 -p0 -b .build-id~
%patch08 -p0 -b .orphan-section-placement~
# We cannot run autotools as there is an exact requirement of autoconf-2.59.
@ -351,6 +353,9 @@ fi
%endif # %{isnative}
%changelog
* Tue Jul 14 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.11-26
- Import orphan section placement patch from mainline. (BZ 510384)
* Tue Jul 14 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.11-25
- Fix build-id patch to avoid memory corruption. (BZ 501582)