update copyrights
authorIan Lance Taylor <ian@airs.com>
Tue, 24 Jan 1995 16:01:04 +0000 (16:01 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 24 Jan 1995 16:01:04 +0000 (16:01 +0000)
ld/emultempl/elf32.em

index a5f6ec5cab6fa4cc0382975204aa6df9ca7d32af..43c2cc4ecf2f8edd2269bca8fa4d15f683939d05 100644 (file)
@@ -4,7 +4,7 @@ cat >e${EMULATION_NAME}.c <<EOF
 /* This file is is generated by a shell script.  DO NOT EDIT! */
 
 /* 32 bit ELF emulation code for ${EMULATION_NAME}
-   Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac@cygnus.com>
    ELF support by Ian Lance Taylor <ian@cygnus.com>
 
@@ -114,6 +114,7 @@ static void
 gld${EMULATION_NAME}_before_allocation ()
 {
   asection *sinterp;
+  lang_input_statement_type *is;
 
   /* If we are going to make any variable assignments, we need to let
      the ELF backend know about them in case the variables are
@@ -137,6 +138,42 @@ gld${EMULATION_NAME}_before_allocation ()
       sinterp->contents = (bfd_byte *) command_line.interpreter;
       sinterp->_raw_size = strlen (command_line.interpreter) + 1;
     }
+
+  /* Look for any sections named .gnu.warning.  As a GNU extensions,
+     we treat such sections as containing warning messages.  We print
+     out the warning message, and then zero out the section size so
+     that it does not get copied into the output file.  */
+
+  {
+    LANG_FOR_EACH_INPUT_STATEMENT (is)
+      {
+       asection *s;
+       bfd_size_type sz;
+       char *msg;
+       boolean ret;
+
+       if (is->just_syms_flag)
+         continue;
+
+       s = bfd_get_section_by_name (is->the_bfd, ".gnu.warning");
+       if (s == NULL)
+         continue;
+
+       sz = bfd_section_size (is->the_bfd, s);
+       msg = xmalloc ((size_t) sz + 1);
+       if (! bfd_get_section_contents (is->the_bfd, s, msg, (file_ptr) 0, sz))
+         einfo ("%F%B: Can't read contents of section .gnu.warning: %E\n",
+                is->the_bfd);
+       msg[sz] = '\0';
+       ret = link_info.callbacks->warning (&link_info, msg);
+       ASSERT (ret);
+       free (msg);
+
+       /* Clobber the section size, so that we don't waste copying the
+          warning into the output file.  */
+       s->_raw_size = 0;
+      }
+  }
 }
 
 /* This is called by the before_allocation routine via
@@ -246,6 +283,16 @@ gld${EMULATION_NAME}_place_orphan (file, s)
 
   secname = bfd_get_section_name (s->owner, s);
 
+  /* When generating an object which is to be dynamically linked, we
+     do not support orphaned reloc sections.  This is because all the
+     reloc sections must be contiguous in order to generate correct
+     DT_REL entries.  When this case arises, you can just add the
+     appropriate reloc sections to the linker script.  Note that the
+     .rel.plt section must always be the last reloc section.  FIXME:
+     This should simply be handled correctly here.  */
+  ASSERT (strncmp (secname, ".rel", 4) != 0
+         || bfd_get_section_by_name (output_bfd, ".dynamic") == NULL);
+
   /* Create the section in the output file, and put it in the right
      place.  This shuffling to make the output file look neater, and
      also means that the BFD backend does not have to sort the
@@ -405,6 +452,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
   syslib_default,
   hll_default,
   after_parse_default,
+  after_open_default,
   after_allocation_default,
   set_output_arch_default,
   ldemul_default_target,