|
@@ -1,148 +0,0 @@
|
|
|
-From 7a8213503e25998e2610d5a8c0b19eefb5e41596 Mon Sep 17 00:00:00 2001
|
|
|
-From: Romain Naour <romain.naour@gmail.com>
|
|
|
-Date: Sat, 30 Nov 2019 03:12:37 +0100
|
|
|
-Subject: [PATCH] Revert "PR24311, FAIL: S-records with constructors"
|
|
|
-
|
|
|
-This reverts commit ebd2263ba9a9124d93bbc0ece63d7e0fae89b40e.
|
|
|
-
|
|
|
-Revert this patch since it prevent booting a sh4 system under
|
|
|
-Qemu as reported on the Binutils mailing list [1].
|
|
|
-This commit is not related to sh4, it's weird that it is the
|
|
|
-only affected architecture.
|
|
|
-
|
|
|
-[1] https://sourceware.org/ml/binutils/2019-10/msg00105.html
|
|
|
-[2] https://sourceware.org/ml/binutils/2019-11/msg00407.html
|
|
|
-
|
|
|
-Signed-off-by: Romain Naour <romain.naour@gmail.com>
|
|
|
----
|
|
|
- bfd/merge.c | 52 ++++++++++++++++++++++------------------------------
|
|
|
- 1 file changed, 22 insertions(+), 30 deletions(-)
|
|
|
-
|
|
|
-diff --git a/bfd/merge.c b/bfd/merge.c
|
|
|
-index 632c8523903..fb7c0858beb 100644
|
|
|
---- a/bfd/merge.c
|
|
|
-+++ b/bfd/merge.c
|
|
|
-@@ -621,7 +621,7 @@ is_suffix (const struct sec_merge_hash_entry *A,
|
|
|
-
|
|
|
- /* This is a helper function for _bfd_merge_sections. It attempts to
|
|
|
- merge strings matching suffixes of longer strings. */
|
|
|
--static struct sec_merge_sec_info *
|
|
|
-+static bfd_boolean
|
|
|
- merge_strings (struct sec_merge_info *sinfo)
|
|
|
- {
|
|
|
- struct sec_merge_hash_entry **array, **a, *e;
|
|
|
-@@ -633,7 +633,7 @@ merge_strings (struct sec_merge_info *sinfo)
|
|
|
- amt = sinfo->htab->size * sizeof (struct sec_merge_hash_entry *);
|
|
|
- array = (struct sec_merge_hash_entry **) bfd_malloc (amt);
|
|
|
- if (array == NULL)
|
|
|
-- return NULL;
|
|
|
-+ return FALSE;
|
|
|
-
|
|
|
- for (e = sinfo->htab->first, a = array; e; e = e->next)
|
|
|
- if (e->alignment)
|
|
|
-@@ -703,6 +703,11 @@ merge_strings (struct sec_merge_info *sinfo)
|
|
|
- }
|
|
|
- }
|
|
|
- secinfo->sec->size = size;
|
|
|
-+ if (secinfo->sec->alignment_power != 0)
|
|
|
-+ {
|
|
|
-+ bfd_size_type align = (bfd_size_type) 1 << secinfo->sec->alignment_power;
|
|
|
-+ secinfo->sec->size = (secinfo->sec->size + align - 1) & -align;
|
|
|
-+ }
|
|
|
-
|
|
|
- /* And now adjust the rest, removing them from the chain (but not hashtable)
|
|
|
- at the same time. */
|
|
|
-@@ -719,7 +724,7 @@ merge_strings (struct sec_merge_info *sinfo)
|
|
|
- e->u.index = e->u.suffix->u.index + (e->u.suffix->len - e->len);
|
|
|
- }
|
|
|
- }
|
|
|
-- return secinfo;
|
|
|
-+ return TRUE;
|
|
|
- }
|
|
|
-
|
|
|
- /* This function is called once after all SEC_MERGE sections are registered
|
|
|
-@@ -735,8 +740,7 @@ _bfd_merge_sections (bfd *abfd,
|
|
|
-
|
|
|
- for (sinfo = (struct sec_merge_info *) xsinfo; sinfo; sinfo = sinfo->next)
|
|
|
- {
|
|
|
-- struct sec_merge_sec_info *secinfo;
|
|
|
-- bfd_size_type align;
|
|
|
-+ struct sec_merge_sec_info * secinfo;
|
|
|
-
|
|
|
- if (! sinfo->chain)
|
|
|
- continue;
|
|
|
-@@ -747,7 +751,6 @@ _bfd_merge_sections (bfd *abfd,
|
|
|
- secinfo->next = NULL;
|
|
|
-
|
|
|
- /* Record the sections into the hash table. */
|
|
|
-- align = 1;
|
|
|
- for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
|
|
|
- if (secinfo->sec->flags & SEC_EXCLUDE)
|
|
|
- {
|
|
|
-@@ -755,25 +758,18 @@ _bfd_merge_sections (bfd *abfd,
|
|
|
- if (remove_hook)
|
|
|
- (*remove_hook) (abfd, secinfo->sec);
|
|
|
- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- if (!record_section (sinfo, secinfo))
|
|
|
-- return FALSE;
|
|
|
-- if (align)
|
|
|
-- {
|
|
|
-- align = (bfd_size_type) 1 << secinfo->sec->alignment_power;
|
|
|
-- if ((secinfo->sec->size & (align - 1)) != 0)
|
|
|
-- align = 0;
|
|
|
-- }
|
|
|
-- }
|
|
|
-+ else if (! record_section (sinfo, secinfo))
|
|
|
-+ return FALSE;
|
|
|
-+
|
|
|
-+ if (secinfo)
|
|
|
-+ continue;
|
|
|
-
|
|
|
- if (sinfo->htab->first == NULL)
|
|
|
- continue;
|
|
|
-
|
|
|
- if (sinfo->htab->strings)
|
|
|
- {
|
|
|
-- secinfo = merge_strings (sinfo);
|
|
|
-- if (!secinfo)
|
|
|
-+ if (!merge_strings (sinfo))
|
|
|
- return FALSE;
|
|
|
- }
|
|
|
- else
|
|
|
-@@ -793,7 +789,8 @@ _bfd_merge_sections (bfd *abfd,
|
|
|
- e->secinfo->first_str = e;
|
|
|
- size = 0;
|
|
|
- }
|
|
|
-- size = (size + e->alignment - 1) & ~((bfd_vma) e->alignment - 1);
|
|
|
-+ size = (size + e->alignment - 1)
|
|
|
-+ & ~((bfd_vma) e->alignment - 1);
|
|
|
- e->u.index = size;
|
|
|
- size += e->len;
|
|
|
- secinfo = e->secinfo;
|
|
|
-@@ -801,16 +798,11 @@ _bfd_merge_sections (bfd *abfd,
|
|
|
- secinfo->sec->size = size;
|
|
|
- }
|
|
|
-
|
|
|
-- /* If the input sections were padded according to their alignments,
|
|
|
-- then pad the output too. */
|
|
|
-- if (align)
|
|
|
-- secinfo->sec->size = (secinfo->sec->size + align - 1) & -align;
|
|
|
--
|
|
|
-- /* Finally remove all input sections which have not made it into
|
|
|
-- the hash table at all. */
|
|
|
-- for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
|
|
|
-- if (secinfo->first_str == NULL)
|
|
|
-- secinfo->sec->flags |= SEC_EXCLUDE | SEC_KEEP;
|
|
|
-+ /* Finally remove all input sections which have not made it into
|
|
|
-+ the hash table at all. */
|
|
|
-+ for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
|
|
|
-+ if (secinfo->first_str == NULL)
|
|
|
-+ secinfo->sec->flags |= SEC_EXCLUDE | SEC_KEEP;
|
|
|
- }
|
|
|
-
|
|
|
- return TRUE;
|
|
|
---
|
|
|
-2.23.0
|
|
|
-
|