diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ecbcbaca5f..40b7b92d06 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +Thu Jan 28 20:05:22 1999 Ian Lance Taylor + + * binary.c (binary_set_section_contents): Don't return early for a + non-loadable section, in case the first section is non-loadable. + Don't set the low lma for a SEC_NEVER_LOAD section. From Maciej + W. Rozycki . + 1999-01-28 Nick Clifton * elf32-fr30.c (fr30_reloc_map): Add R_FR30_GNU_VTINHERIT and diff --git a/bfd/binary.c b/bfd/binary.c index f71ada1676..819d531522 100644 --- a/bfd/binary.c +++ b/bfd/binary.c @@ -1,5 +1,5 @@ /* BFD back-end for binary objects. - Copyright 1994, 95, 96, 97, 98, 99 Free Software Foundation, Inc. + Copyright 1994, 95, 96, 97, 98, 1999 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support, This file is part of BFD, the Binary File Descriptor library. @@ -255,14 +255,6 @@ binary_set_section_contents (abfd, sec, data, offset, size) file_ptr offset; bfd_size_type size; { - /* We don't want to output anything for a section that is neither - loaded nor allocated. The contents of such a section are not - meaningful in the binary format. */ - if ((sec->flags & (SEC_LOAD | SEC_ALLOC)) == 0) - return true; - if ((sec->flags & SEC_NEVER_LOAD) != 0) - return true; - if (! abfd->output_has_begun) { boolean found_low; @@ -275,7 +267,8 @@ binary_set_section_contents (abfd, sec, data, offset, size) found_low = false; low = 0; for (s = abfd->sections; s != NULL; s = s->next) - if (((s->flags & (SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC)) + if (((s->flags + & (SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC | SEC_NEVER_LOAD)) == (SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC)) && (! found_low || s->lma < low)) { @@ -303,6 +296,14 @@ binary_set_section_contents (abfd, sec, data, offset, size) abfd->output_has_begun = true; } + /* We don't want to output anything for a section that is neither + loaded nor allocated. The contents of such a section are not + meaningful in the binary format. */ + if ((sec->flags & (SEC_LOAD | SEC_ALLOC)) == 0) + return true; + if ((sec->flags & SEC_NEVER_LOAD) != 0) + return true; + return _bfd_generic_set_section_contents (abfd, sec, data, offset, size); }