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