summaryrefslogtreecommitdiffstats
path: root/patches/binutils-2.18/generic/gentoo/30_all_binutils-multitarget-fixup.patch
diff options
context:
space:
mode:
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.patch234
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;
- }
-