diff options
Diffstat (limited to 'patches/binutils-2.18/generic/gentoo/30_all_binutils-multitarget-fixup.patch')
-rw-r--r-- | patches/binutils-2.18/generic/gentoo/30_all_binutils-multitarget-fixup.patch | 234 |
1 files changed, 0 insertions, 234 deletions
diff --git a/patches/binutils-2.18/generic/gentoo/30_all_binutils-multitarget-fixup.patch b/patches/binutils-2.18/generic/gentoo/30_all_binutils-multitarget-fixup.patch deleted file mode 100644 index ff815e1..0000000 --- a/patches/binutils-2.18/generic/gentoo/30_all_binutils-multitarget-fixup.patch +++ /dev/null @@ -1,234 +0,0 @@ -Fix from upstream for --enable-targets=all on an x86_64 multilib system. - -http://sourceware.org/ml/binutils/2007-09/msg00137.html -http://sourceware.org/ml/binutils/2007-09/msg00162.html - -2007-09-14 Alan Modra <amodra@bigpond.net.au> - - * format.c (bfd_check_format_matches): Record matching targets even - when "matching" is NULL to allow bfd_associated_vector matches. - Consolidate error return code. Consolidate ok return code. Always - restore original target and format on error. - ---- - bfd/format.c | 112 ++++++++++++++++++----------------------------------------- - 1 file changed, 35 insertions(+), 77 deletions(-) - -Index: binutils-2.18/bfd/format.c -=================================================================== ---- binutils-2.18.orig/bfd/format.c -+++ binutils-2.18/bfd/format.c -@@ -125,6 +125,9 @@ bfd_check_format_matches (bfd *abfd, bfd - int match_count; - int ar_match_index; - -+ if (matching != NULL) -+ *matching = NULL; -+ - if (!bfd_read_p (abfd) - || (unsigned int) abfd->format >= (unsigned int) bfd_type_end) - { -@@ -141,11 +144,10 @@ bfd_check_format_matches (bfd *abfd, bfd - match_count = 0; - ar_match_index = _bfd_target_vector_entries; - -- if (matching) -+ if (matching != NULL || *bfd_associated_vector != NULL) - { - bfd_size_type amt; - -- *matching = NULL; - amt = sizeof (*matching_vector) * 2 * _bfd_target_vector_entries; - matching_vector = bfd_malloc (amt); - if (!matching_vector) -@@ -162,31 +164,12 @@ bfd_check_format_matches (bfd *abfd, bfd - if (!abfd->target_defaulted) - { - if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0) /* rewind! */ -- { -- if (matching) -- free (matching_vector); -- return FALSE; -- } -+ goto err_ret; - - right_targ = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd)); - - if (right_targ) -- { -- abfd->xvec = right_targ; /* Set the target as returned. */ -- -- if (matching) -- free (matching_vector); -- -- /* If the file was opened for update, then `output_has_begun' -- some time ago when the file was created. Do not recompute -- sections sizes or alignments in _bfd_set_section_contents. -- We can not set this flag until after checking the format, -- because it will interfere with creation of BFD sections. */ -- if (abfd->direction == both_direction) -- abfd->output_has_begun = TRUE; -- -- return TRUE; /* File position has moved, BTW. */ -- } -+ goto ok_ret; - - /* For a long time the code has dropped through to check all - targets if the specified target was wrong. I don't know why, -@@ -201,17 +184,7 @@ bfd_check_format_matches (bfd *abfd, bfd - this sort, I changed this test to check only for the binary - target. */ - if (format == bfd_archive && save_targ == &binary_vec) -- { -- abfd->xvec = save_targ; -- abfd->format = bfd_unknown; -- -- if (matching) -- free (matching_vector); -- -- bfd_set_error (bfd_error_file_not_recognized); -- -- return FALSE; -- } -+ goto err_unrecog; - } - - for (target = bfd_target_vector; *target != NULL; target++) -@@ -227,11 +200,7 @@ bfd_check_format_matches (bfd *abfd, bfd - abfd->xvec = *target; /* Change BFD's target temporarily. */ - - if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0) -- { -- if (matching) -- free (matching_vector); -- return FALSE; -- } -+ goto err_ret; - - /* If _bfd_check_format neglects to set bfd_error, assume - bfd_error_wrong_format. We didn't used to even pay any -@@ -255,9 +224,8 @@ bfd_check_format_matches (bfd *abfd, bfd - break; - } - -- if (matching) -+ if (matching_vector) - matching_vector[match_count] = temp; -- - match_count++; - } - else if ((err = bfd_get_error ()) == bfd_error_wrong_object_format -@@ -268,20 +236,12 @@ bfd_check_format_matches (bfd *abfd, bfd - no better matches. */ - if (ar_right_targ != bfd_default_vector[0]) - ar_right_targ = *target; -- if (matching) -+ if (matching_vector) - matching_vector[ar_match_index] = *target; - ar_match_index++; - } - else if (err != bfd_error_wrong_format) -- { -- abfd->xvec = save_targ; -- abfd->format = bfd_unknown; -- -- if (matching) -- free (matching_vector); -- -- return FALSE; -- } -+ goto err_ret; - } - - if (match_count == 0) -@@ -297,16 +257,14 @@ bfd_check_format_matches (bfd *abfd, bfd - { - match_count = ar_match_index - _bfd_target_vector_entries; - -- if (matching && match_count > 1) -+ if (matching_vector && match_count > 1) - memcpy (matching_vector, - matching_vector + _bfd_target_vector_entries, - sizeof (*matching_vector) * match_count); - } - } - -- if (match_count > 1 -- && bfd_associated_vector != NULL -- && matching) -+ if (match_count > 1) - { - const bfd_target * const *assoc = bfd_associated_vector; - -@@ -328,11 +286,9 @@ bfd_check_format_matches (bfd *abfd, bfd - - if (match_count == 1) - { -+ ok_ret: - abfd->xvec = right_targ; /* Change BFD's target permanently. */ - -- if (matching) -- free (matching_vector); -- - /* If the file was opened for update, then `output_has_begun' - some time ago when the file was created. Do not recompute - sections sizes or alignments in _bfd_set_section_contents. -@@ -341,37 +297,39 @@ bfd_check_format_matches (bfd *abfd, bfd - if (abfd->direction == both_direction) - abfd->output_has_begun = TRUE; - -+ if (matching_vector) -+ free (matching_vector); - return TRUE; /* File position has moved, BTW. */ - } - -- abfd->xvec = save_targ; /* Restore original target type. */ -- abfd->format = bfd_unknown; /* Restore original format. */ -- - if (match_count == 0) - { -+ err_unrecog: - bfd_set_error (bfd_error_file_not_recognized); -- -- if (matching) -+ err_ret: -+ abfd->xvec = save_targ; -+ abfd->format = bfd_unknown; -+ if (matching_vector) - free (matching_vector); -+ return FALSE; - } -- else -- { -- bfd_set_error (bfd_error_file_ambiguously_recognized); - -- if (matching) -+ abfd->xvec = save_targ; /* Restore original target type. */ -+ abfd->format = bfd_unknown; /* Restore original format. */ -+ bfd_set_error (bfd_error_file_ambiguously_recognized); -+ -+ if (matching) -+ { -+ *matching = (char **) matching_vector; -+ matching_vector[match_count] = NULL; -+ /* Return target names. This is a little nasty. Maybe we -+ should do another bfd_malloc? */ -+ while (--match_count >= 0) - { -- *matching = (char **) matching_vector; -- matching_vector[match_count] = NULL; -- /* Return target names. This is a little nasty. Maybe we -- should do another bfd_malloc? */ -- while (--match_count >= 0) -- { -- const char *name = matching_vector[match_count]->name; -- *(const char **) &matching_vector[match_count] = name; -- } -+ const char *name = matching_vector[match_count]->name; -+ *(const char **) &matching_vector[match_count] = name; - } - } -- - return FALSE; - } - |