From 626f883f94be40ee68ef2ec0cb6da1d948207384 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 25 Feb 1994 19:42:43 +0000 Subject: * ecoff.c (ecoff_sizeof_headers): Align result to 16 byte boundary. --- bfd/ChangeLog | 11 +++++++++++ bfd/ecoff.c | 46 +++++++++++++++++++++++++--------------------- 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3fc690e..a6b8961 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,14 @@ +Fri Feb 25 11:41:57 1994 Ian Lance Taylor (ian@cygnus.com) + + * ecoff.c (ecoff_sizeof_headers): Align result to 16 byte + boundary. + +Thu Feb 24 07:13:22 1994 Jeffrey A. Law (law@snake.cs.utah.edu) + + * som.c (som_bfd_derive_misc_symbol_info): Derive symbol_info + field for absolute symbols in the same manner as undefined + and common symbols. + Thu Feb 24 04:29:19 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * elfcode.h (elf_core_file_p): Check for core file e_machine match diff --git a/bfd/ecoff.c b/bfd/ecoff.c index 1f74ca8..c99d724 100644 --- a/bfd/ecoff.c +++ b/bfd/ecoff.c @@ -2140,9 +2140,10 @@ ecoff_sizeof_headers (abfd, reloc) if (strcmp (current->name, REGINFO) != 0) ++c; - return (bfd_coff_filhsz (abfd) - + bfd_coff_aoutsz (abfd) - + c * bfd_coff_scnhsz (abfd)); + ret = (bfd_coff_filhsz (abfd) + + bfd_coff_aoutsz (abfd) + + c * bfd_coff_scnhsz (abfd)); + return BFD_ALIGN (ret, 16); } /* Get the contents of a section. This is where we handle reading the @@ -2831,24 +2832,28 @@ ecoff_write_object_contents (abfd) == false) return false; } - else if ((abfd->flags & EXEC_P) != 0 - && (abfd->flags & D_PAGED) != 0) - { - char c; + } - /* A demand paged executable must occupy an even number of - pages. */ - if (bfd_seek (abfd, (file_ptr) ecoff_data (abfd)->sym_filepos - 1, - SEEK_SET) != 0) - return false; - if (bfd_read (&c, 1, 1, abfd) == 0) - c = 0; - if (bfd_seek (abfd, (file_ptr) ecoff_data (abfd)->sym_filepos - 1, - SEEK_SET) != 0) - return false; - if (bfd_write (&c, 1, 1, abfd) != 1) - return false; - } + /* The .bss section of a demand paged executable must receive an + entire page. If there are symbols, the symbols will start on the + next page. If there are no symbols, we must fill out the page by + hand. */ + if (bfd_get_symcount (abfd) == 0 + && (abfd->flags & EXEC_P) != 0 + && (abfd->flags & D_PAGED) != 0) + { + char c; + + if (bfd_seek (abfd, (file_ptr) ecoff_data (abfd)->sym_filepos - 1, + SEEK_SET) != 0) + return false; + if (bfd_read (&c, 1, 1, abfd) == 0) + c = 0; + if (bfd_seek (abfd, (file_ptr) ecoff_data (abfd)->sym_filepos - 1, + SEEK_SET) != 0) + return false; + if (bfd_write (&c, 1, 1, abfd) != 1) + return false; } return true; @@ -3932,7 +3937,6 @@ ecoff_bfd_final_link (abfd, info) /* We accumulate the debugging information counts in the symbolic header. */ symhdr = &debug->symbolic_header; - symhdr->magic = backend->debug_swap.sym_magic; symhdr->vstamp = 0; symhdr->ilineMax = 0; symhdr->cbLine = 0; -- cgit v1.1