gas/
[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,
aa820537 3 2005, 2007, 2008 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
55extern void apollo_rtype2howto PARAMS ((arelent *, int));
56extern int apollo_howto2rtype PARAMS ((reloc_howto_type *));
57#ifndef ONLY_DECLARE_RELOCS
252b5132 58
252b5132 59void
917583ad 60apollo_rtype2howto (internal, relocentry)
252b5132
RH
61 arelent *internal;
62 int relocentry;
63{
346ceb11 64 switch (relocentry)
917583ad
NC
65 {
66 case R_RELBYTE: internal->howto = apollocoff_howto_table + 0; break;
67 case R_RELWORD: internal->howto = apollocoff_howto_table + 1; break;
68 case R_RELLONG: internal->howto = apollocoff_howto_table + 2; break;
69 case R_PCRBYTE: internal->howto = apollocoff_howto_table + 3; break;
70 case R_PCRWORD: internal->howto = apollocoff_howto_table + 4; break;
71 case R_PCRLONG: internal->howto = apollocoff_howto_table + 5; break;
72 case R_RELLONG_NEG: internal->howto = apollocoff_howto_table + 6; break;
73 }
252b5132
RH
74}
75
346ceb11 76int
252b5132
RH
77apollo_howto2rtype (internal)
78 reloc_howto_type *internal;
79{
346ceb11 80 if (internal->pc_relative)
252b5132 81 {
917583ad
NC
82 switch (internal->bitsize)
83 {
84 case 32: return R_PCRLONG;
85 case 16: return R_PCRWORD;
86 case 8: return R_PCRBYTE;
87 }
252b5132 88 }
252b5132 89 else
917583ad
NC
90 {
91 switch (internal->bitsize)
92 {
93 case 32: return R_RELLONG;
94 case 16: return R_RELWORD;
95 case 8: return R_RELBYTE;
96 }
97 }
346ceb11 98 return R_RELLONG;
252b5132
RH
99}
100#endif /* not ONLY_DECLARE_RELOCS */
101
102#define RTYPE2HOWTO(internal, relocentry) \
917583ad 103 apollo_rtype2howto (internal, (relocentry)->r_type)
252b5132
RH
104
105#define SELECT_RELOC(external, internal) \
917583ad 106 external.r_type = apollo_howto2rtype (internal);
252b5132 107
2b5c217d
NC
108#define bfd_pe_print_pdata NULL
109
252b5132
RH
110#include "coffcode.h"
111
c3c89269
NC
112#ifndef TARGET_SYM
113#define TARGET_SYM apollocoff_vec
252b5132 114#endif
252b5132 115
c3c89269
NC
116#ifndef TARGET_NAME
117#define TARGET_NAME "apollo-m68k"
118#endif
252b5132 119
252b5132 120#ifdef NAMES_HAVE_UNDERSCORE
3fa78519 121CREATE_BIG_COFF_TARGET_VEC (TARGET_SYM, TARGET_NAME, 0, 0, '_', NULL, COFF_SWAP_TABLE)
252b5132 122#else
3fa78519 123CREATE_BIG_COFF_TARGET_VEC (TARGET_SYM, TARGET_NAME, 0, 0, 0, NULL, COFF_SWAP_TABLE)
252b5132 124#endif
This page took 0.610227 seconds and 4 git commands to generate.