diff --git a/binutils-2.19.51.0.11-orphan-section-placement.patch b/binutils-2.19.51.0.11-orphan-section-placement.patch new file mode 100644 index 0000000..2a3a3ed --- /dev/null +++ b/binutils-2.19.51.0.11-orphan-section-placement.patch @@ -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: diff --git a/binutils.spec b/binutils.spec index 042a69c..18f3d22 100644 --- a/binutils.spec +++ b/binutils.spec @@ -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 2.19.51.0.11-26 +- Import orphan section placement patch from mainline. (BZ 510384) + * Tue Jul 14 2009 Nick Clifton 2.19.51.0.11-25 - Fix build-id patch to avoid memory corruption. (BZ 501582)