diff options
-rw-r--r-- | bfd/xcofflink.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c index 47ab49f..3e07d05 100644 --- a/bfd/xcofflink.c +++ b/bfd/xcofflink.c @@ -1989,6 +1989,7 @@ bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry, size_t impsize, impcount; struct xcoff_import_file *fl; struct internal_ldhdr *ldhdr; + bfd_size_type stoff; register char *out; asection *sec; bfd *sub; @@ -2072,12 +2073,16 @@ bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry, + ldhdr->l_nsyms * LDSYMSZ + ldhdr->l_nreloc * LDRELSZ); ldhdr->l_stlen = ldinfo.string_size; - ldhdr->l_stoff = ldhdr->l_impoff + impsize; + stoff = ldhdr->l_impoff + impsize; + if (ldinfo.string_size == 0) + ldhdr->l_stoff = 0; + else + ldhdr->l_stoff = stoff; /* We now know the final size of the .loader section. Allocate space for it. */ lsec = xcoff_hash_table (info)->loader_section; - lsec->_raw_size = ldhdr->l_stoff + ldhdr->l_stlen; + lsec->_raw_size = stoff + ldhdr->l_stlen; lsec->contents = (bfd_byte *) bfd_zalloc (output_bfd, lsec->_raw_size); if (lsec->contents == NULL) { @@ -2110,8 +2115,7 @@ bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry, ; } - BFD_ASSERT ((bfd_size_type) ((bfd_byte *) out - lsec->contents) - == ldhdr->l_stoff); + BFD_ASSERT ((bfd_size_type) ((bfd_byte *) out - lsec->contents) == stoff); /* Set up the symbol string table. */ if (ldinfo.string_size > 0) |