From a96acce3108f11454ecfe610d61ffb1fa93b2730 Mon Sep 17 00:00:00 2001
From: Ian Lance Taylor <ian@airs.com>
Date: Fri, 29 Jan 1999 01:07:32 +0000
Subject: [PATCH] 	* 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 <macro@ds2.pg.gda.pl>.

---
 bfd/ChangeLog |  7 +++++++
 bfd/binary.c  | 21 +++++++++++----------
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index ecbcbaca5fb..40b7b92d065 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+Thu Jan 28 20:05:22 1999  Ian Lance Taylor  <ian@cygnus.com>
+
+	* 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 <macro@ds2.pg.gda.pl>.
+
 1999-01-28  Nick Clifton  <nickc@cygnus.com>
 
 	* elf32-fr30.c (fr30_reloc_map): Add R_FR30_GNU_VTINHERIT and
diff --git a/bfd/binary.c b/bfd/binary.c
index f71ada16769..819d5315224 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, <ian@cygnus.com>
 
 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);
 }