PR binutils/14567
[deliverable/binutils-gdb.git] / bfd / coff-apollo.c
CommitLineData
252b5132 1/* BFD back-end for Apollo 68000 COFF binaries.
3db64b00 2 Copyright 1990, 1991, 1992, 1993, 1994, 1999, 2000, 2001, 2002, 2003,
2c3fc389 3 2005, 2007, 2008, 2012 Free Software Foundation, Inc.
252b5132
RH
4 By Troy Rollo (troy@cbme.unsw.edu.au)
5 Based on m68k standard COFF version Written by Cygnus Support.
6
cd123cb7 7 This file is part of BFD, the Binary File Descriptor library.
252b5132 8
cd123cb7
NC
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
252b5132 13
cd123cb7
NC
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
252b5132 18
cd123cb7
NC
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 MA 02110-1301, USA. */
252b5132 23
252b5132 24#include "sysdep.h"
3db64b00 25#include "bfd.h"
252b5132
RH
26#include "libbfd.h"
27#include "coff/apollo.h"
28#include "coff/internal.h"
29#include "libcoff.h"
30
31#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (3)
32
33#ifdef ONLY_DECLARE_RELOCS
34extern reloc_howto_type apollocoff_howto_table[];
35#else
346ceb11 36reloc_howto_type apollocoff_howto_table[] =
917583ad 37 {
b34976b6
AM
38 HOWTO (R_RELBYTE, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, 0, "8", TRUE, 0x000000ff,0x000000ff, FALSE),
39 HOWTO (R_RELWORD, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, 0, "16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
40 HOWTO (R_RELLONG, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, 0, "32", TRUE, 0xffffffff,0xffffffff, FALSE),
41 HOWTO (R_PCRBYTE, 0, 0, 8, TRUE, 0, complain_overflow_signed, 0, "DISP8", TRUE, 0x000000ff,0x000000ff, FALSE),
42 HOWTO (R_PCRWORD, 0, 1, 16, TRUE, 0, complain_overflow_signed, 0, "DISP16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
43 HOWTO (R_PCRLONG, 0, 2, 32, TRUE, 0, complain_overflow_signed, 0, "DISP32", TRUE, 0xffffffff,0xffffffff, FALSE),
44 HOWTO (R_RELLONG_NEG, 0, -2, 32, FALSE, 0, complain_overflow_bitfield, 0, "-32", TRUE, 0xffffffff,0xffffffff, FALSE),
917583ad 45 };
252b5132
RH
46#endif /* not ONLY_DECLARE_RELOCS */
47
48#ifndef BADMAG
49#define BADMAG(x) M68KBADMAG(x)
50#endif
51#define APOLLO_M68 1 /* Customize coffcode.h */
52
917583ad
NC
53/* Turn a howto into a reloc number. */
54
2c3fc389
NC
55extern void apollo_rtype2howto (arelent *, int);
56extern int apollo_howto2rtype (reloc_howto_type *);
917583ad 57#ifndef ONLY_DECLARE_RELOCS
252b5132 58
252b5132 59void
2c3fc389 60apollo_rtype2howto (arelent *internal, int relocentry)
252b5132 61{
346ceb11 62 switch (relocentry)
917583ad
NC
63 {
64 case R_RELBYTE: internal->howto = apollocoff_howto_table + 0; break;
65 case R_RELWORD: internal->howto = apollocoff_howto_table + 1; break;
66 case R_RELLONG: internal->howto = apollocoff_howto_table + 2; break;
67 case R_PCRBYTE: internal->howto = apollocoff_howto_table + 3; break;
68 case R_PCRWORD: internal->howto = apollocoff_howto_table + 4; break;
69 case R_PCRLONG: internal->howto = apollocoff_howto_table + 5; break;
70 case R_RELLONG_NEG: internal->howto = apollocoff_howto_table + 6; break;
71 }
252b5132
RH
72}
73
346ceb11 74int
2c3fc389 75apollo_howto2rtype (reloc_howto_type *internal)
252b5132 76{
346ceb11 77 if (internal->pc_relative)
252b5132 78 {
917583ad
NC
79 switch (internal->bitsize)
80 {
81 case 32: return R_PCRLONG;
82 case 16: return R_PCRWORD;
83 case 8: return R_PCRBYTE;
84 }
252b5132 85 }
252b5132 86 else
917583ad
NC
87 {
88 switch (internal->bitsize)
89 {
90 case 32: return R_RELLONG;
91 case 16: return R_RELWORD;
92 case 8: return R_RELBYTE;
93 }
94 }
346ceb11 95 return R_RELLONG;
252b5132
RH
96}
97#endif /* not ONLY_DECLARE_RELOCS */
98
99#define RTYPE2HOWTO(internal, relocentry) \
917583ad 100 apollo_rtype2howto (internal, (relocentry)->r_type)
252b5132
RH
101
102#define SELECT_RELOC(external, internal) \
917583ad 103 external.r_type = apollo_howto2rtype (internal);
252b5132 104
2b5c217d
NC
105#define bfd_pe_print_pdata NULL
106
252b5132
RH
107#include "coffcode.h"
108
c3c89269
NC
109#ifndef TARGET_SYM
110#define TARGET_SYM apollocoff_vec
252b5132 111#endif
252b5132 112
c3c89269
NC
113#ifndef TARGET_NAME
114#define TARGET_NAME "apollo-m68k"
115#endif
252b5132 116
252b5132 117#ifdef NAMES_HAVE_UNDERSCORE
3fa78519 118CREATE_BIG_COFF_TARGET_VEC (TARGET_SYM, TARGET_NAME, 0, 0, '_', NULL, COFF_SWAP_TABLE)
252b5132 119#else
3fa78519 120CREATE_BIG_COFF_TARGET_VEC (TARGET_SYM, TARGET_NAME, 0, 0, 0, NULL, COFF_SWAP_TABLE)
252b5132 121#endif
This page took 0.549203 seconds and 4 git commands to generate.