Add code to emit relocs into a base file.
authorNick Clifton <nickc@redhat.com>
Thu, 19 Aug 1999 13:04:45 +0000 (13:04 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 19 Aug 1999 13:04:45 +0000 (13:04 +0000)
bfd/ChangeLog
bfd/coff-mcore.c

index 8fde0966ddc503aadde5706cb7f550bb82f3cc8e..40916d9579635af07af8108bb1875c79a661efb7 100644 (file)
@@ -1,3 +1,10 @@
+1999-08-19  Nick Clifton  <nickc@cygnus.com>
+
+       * coff-mcore.c (mcore_emit_base_file_entry): New function:  Emit
+       relocations into the base file.
+       (coff_mcore_relocate_section): Call mcore_emit_base_file_entry if
+       we are building a base file.
+
 1999-08-19  Nick Clifton  <nickc@cygnus.com>
 
        * elf32-arm.h (arm_add_to_rel): New function.  Add a value to
index 199a5ab70f0633482202a6154c43268197a0f1cd..48f15259fc753a04e7cca0aeb4a2e4713579641a 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for Motorolla MCore COFF/PE
-   Copyright 1999 Free Software Foundation, Inc.
+   Copyright (C) 1999 Free Software Foundation, Inc.
 
 This file is part of BFD, the Binary File Descriptor library.
 
@@ -248,6 +248,25 @@ coff_mcore_link_hash_table_create (abfd)
   return & ret->root.root;
 }
 \f
+/* Add an entry to the base file.  */
+static void
+mcore_emit_base_file_entry (info, output_bfd, input_section, reloc_offset)
+      struct bfd_link_info * info;
+      bfd *                  output_bfd;
+      asection *             input_section;
+      bfd_vma                reloc_offset;
+{
+  bfd_vma addr = reloc_offset
+                 - input_section->vma
+                 + input_section->output_offset
+                 + input_section->output_section->vma;
+
+  if (coff_data (output_bfd)->pe)
+     addr -= pe_data (output_bfd)->pe_opthdr.ImageBase;
+  
+  fwrite (&addr, 1, sizeof (addr), (FILE *) info->base_file);
+}
+\f
 /*ARGSUSED*/
 static bfd_reloc_status_type
 mcore_coff_unsupported_reloc (abfd, reloc_entry, symbol, data, input_section,
@@ -512,6 +531,13 @@ coff_mcore_relocate_section (output_bfd, info, input_bfd, input_section,
          break;
        }
       
+      if (info->base_file)
+       {
+         /* Emit a reloc if the backend thinks it needs it.  */
+         if (sym && pe_data (output_bfd)->in_reloc_p (output_bfd, howto))
+            mcore_emit_base_file_entry (info, output_bfd, input_section, rel->r_vaddr);
+       }
+  
       switch (rstat)
        {
        default:
This page took 0.027912 seconds and 4 git commands to generate.