diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6f33d27b87..b06ede56a9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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. diff --git a/bfd/coff-m68k.c b/bfd/coff-m68k.c index cd4fd42cf2..773a5143c0 100644 --- a/bfd/coff-m68k.c +++ b/bfd/coff-m68k.c @@ -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 };