* coff-m68k.c (_bfd_coff_m68k_reloc_type_lookup): New function.
authorJean Marie Diaz <ambar@cygnus>
Thu, 4 Aug 1994 16:38:05 +0000 (16:38 +0000)
committerJean Marie Diaz <ambar@cygnus>
Thu, 4 Aug 1994 16:38:05 +0000 (16:38 +0000)
(coff_bfd_reloc_type_lookup): Define.

bfd/ChangeLog
bfd/coff-m68k.c

index 6f33d27..b06ede5 100644 (file)
@@ -1,5 +1,8 @@
 Thu Aug  4 11:32:23 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
 
+       * coff-m68k.c (_bfd_coff_m68k_reloc_type_lookup): New function.
+       (coff_bfd_reloc_type_lookup): Define.
+
        * elfcode.h (elf_bfd_final_link): Force the vma of sections which
        do not have SEC_ALLOC set to be 0.  This is needed to handle
        relocs against debugging sections.
index cd4fd42..773a514 100644 (file)
@@ -30,6 +30,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define LYNX_SPECIAL_FN 0
 #endif
 
+/* The page size is a guess based on ELF.  */
+#define COFF_PAGE_SIZE 0x2000
+
 /* Clean up namespace.  */
 #define m68kcoff_howto_table   _bfd_m68kcoff_howto_table
 #define m68k_rtype2howto       _bfd_m68kcoff_rtype2howto
@@ -60,6 +63,8 @@ reloc_howto_type m68kcoff_howto_table[] =
 #ifdef ONLY_DECLARE_RELOCS
 extern void m68k_rtype2howto PARAMS ((arelent *internal, int relocentry));
 extern int m68k_howto2rtype PARAMS ((CONST struct reloc_howto_struct *));
+extern const reloc_howto_type *_bfd_coff_m68k_reloc_type_lookup
+  PARAMS ((bfd *, bfd_reloc_code_real_type));
 #else
 void
 m68k_rtype2howto(internal, relocentry)
@@ -102,6 +107,27 @@ m68k_howto2rtype (internal)
   }
   return R_RELLONG;    
 }
+
+const reloc_howto_type *
+_bfd_coff_m68k_reloc_type_lookup (abfd, code)
+     bfd *abfd;
+     bfd_reloc_code_real_type code;
+{
+  switch (code)
+    {
+    default:                   return NULL;
+    case BFD_RELOC_8:          return m68kcoff_howto_table + 0;
+    case BFD_RELOC_16:         return m68kcoff_howto_table + 1;
+    case BFD_RELOC_CTOR:
+    case BFD_RELOC_32:         return m68kcoff_howto_table + 2;
+    case BFD_RELOC_8_PCREL:    return m68kcoff_howto_table + 3;
+    case BFD_RELOC_16_PCREL:   return m68kcoff_howto_table + 4;
+    case BFD_RELOC_32_PCREL:   return m68kcoff_howto_table + 5;
+      /* FIXME: There doesn't seem to be a code for R_RELLONG_NEG.  */
+    }
+  /*NOTREACHED*/
+}
+
 #endif /* not ONLY_DECLARE_RELOCS */
 
 #define RTYPE2HOWTO(internal, relocentry) \
@@ -110,9 +136,11 @@ m68k_howto2rtype (internal)
 #define SELECT_RELOC(external, internal) \
   external.r_type = m68k_howto2rtype(internal);
 
+#define coff_bfd_reloc_type_lookup _bfd_coff_m68k_reloc_type_lookup
+
 #include "coffcode.h"
 
-bfd_target 
+const bfd_target 
 #ifdef TARGET_SYM
   TARGET_SYM =
 #else
@@ -130,7 +158,7 @@ bfd_target
 
   (HAS_RELOC | EXEC_P |                /* object flags */
    HAS_LINENO | HAS_DEBUG |
-   HAS_SYMS | HAS_LOCALS | WP_TEXT),
+   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
 
   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
 #ifdef NAMES_HAVE_UNDERSCORE
@@ -163,6 +191,7 @@ bfd_target
      BFD_JUMP_TABLE_RELOCS (coff),
      BFD_JUMP_TABLE_WRITE (coff),
      BFD_JUMP_TABLE_LINK (coff),
+     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
   COFF_SWAP_TABLE
  };