diff options
Diffstat (limited to 'system/binutils/srec.patch')
-rw-r--r-- | system/binutils/srec.patch | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/system/binutils/srec.patch b/system/binutils/srec.patch deleted file mode 100644 index ce3eac10b..000000000 --- a/system/binutils/srec.patch +++ /dev/null @@ -1,127 +0,0 @@ -X-Git-Url: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blobdiff_plain;f=bfd%2Fmerge.c;h=632c852390355829f95e149b7d72f0982a1a0b2b;hp=fb7c0858bebb27b5375564054c148b2b68124554;hb=ebd2263ba9a9124d93bbc0ece63d7e0fae89b40e;hpb=65d8004072ccb15441c143c380949d785a8446cd - -diff --git a/bfd/merge.c b/bfd/merge.c -index fb7c085..632c852 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 bfd_boolean -+static struct sec_merge_sec_info * - 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 FALSE; -+ return NULL; - - for (e = sinfo->htab->first, a = array; e; e = e->next) - if (e->alignment) -@@ -703,11 +703,6 @@ 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. */ -@@ -724,7 +719,7 @@ merge_strings (struct sec_merge_info *sinfo) - e->u.index = e->u.suffix->u.index + (e->u.suffix->len - e->len); - } - } -- return TRUE; -+ return secinfo; - } - - /* This function is called once after all SEC_MERGE sections are registered -@@ -740,7 +735,8 @@ _bfd_merge_sections (bfd *abfd, - - for (sinfo = (struct sec_merge_info *) xsinfo; sinfo; sinfo = sinfo->next) - { -- struct sec_merge_sec_info * secinfo; -+ struct sec_merge_sec_info *secinfo; -+ bfd_size_type align; - - if (! sinfo->chain) - continue; -@@ -751,6 +747,7 @@ _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) - { -@@ -758,18 +755,25 @@ _bfd_merge_sections (bfd *abfd, - if (remove_hook) - (*remove_hook) (abfd, secinfo->sec); - } -- else if (! record_section (sinfo, secinfo)) -- return FALSE; -- -- if (secinfo) -- continue; -+ 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; -+ } -+ } - - if (sinfo->htab->first == NULL) - continue; - - if (sinfo->htab->strings) - { -- if (!merge_strings (sinfo)) -+ secinfo = merge_strings (sinfo); -+ if (!secinfo) - return FALSE; - } - else -@@ -789,8 +793,7 @@ _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; -@@ -798,11 +801,16 @@ _bfd_merge_sections (bfd *abfd, - secinfo->sec->size = size; - } - -- /* 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; -+ /* 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; - } - - return TRUE; |