source: branches/libc-0.6/src/binutils/bfd/coff-apollo.c

Last change on this file was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 4.0 KB
Line 
1/* BFD back-end for Apollo 68000 COFF binaries.
2 Copyright 1990, 1991, 1992, 1993, 1994, 1999, 2000, 2001, 2002
3 Free Software Foundation, Inc.
4 By Troy Rollo (troy@cbme.unsw.edu.au)
5 Based on m68k standard COFF version Written by Cygnus Support.
6
7This file is part of BFD, the Binary File Descriptor library.
8
9This program is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2 of the License, or
12(at your option) any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with this program; if not, write to the Free Software
21Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
22
23#include "bfd.h"
24#include "sysdep.h"
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
35reloc_howto_type apollocoff_howto_table[] =
36 {
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),
44 };
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
52/* Turn a howto into a reloc number. */
53
54extern void apollo_rtype2howto PARAMS ((arelent *, int));
55extern int apollo_howto2rtype PARAMS ((reloc_howto_type *));
56#ifndef ONLY_DECLARE_RELOCS
57
58void
59apollo_rtype2howto (internal, relocentry)
60 arelent *internal;
61 int relocentry;
62{
63 switch (relocentry)
64 {
65 case R_RELBYTE: internal->howto = apollocoff_howto_table + 0; break;
66 case R_RELWORD: internal->howto = apollocoff_howto_table + 1; break;
67 case R_RELLONG: internal->howto = apollocoff_howto_table + 2; break;
68 case R_PCRBYTE: internal->howto = apollocoff_howto_table + 3; break;
69 case R_PCRWORD: internal->howto = apollocoff_howto_table + 4; break;
70 case R_PCRLONG: internal->howto = apollocoff_howto_table + 5; break;
71 case R_RELLONG_NEG: internal->howto = apollocoff_howto_table + 6; break;
72 }
73}
74
75int
76apollo_howto2rtype (internal)
77 reloc_howto_type *internal;
78{
79 if (internal->pc_relative)
80 {
81 switch (internal->bitsize)
82 {
83 case 32: return R_PCRLONG;
84 case 16: return R_PCRWORD;
85 case 8: return R_PCRBYTE;
86 }
87 }
88 else
89 {
90 switch (internal->bitsize)
91 {
92 case 32: return R_RELLONG;
93 case 16: return R_RELWORD;
94 case 8: return R_RELBYTE;
95 }
96 }
97 return R_RELLONG;
98}
99#endif /* not ONLY_DECLARE_RELOCS */
100
101#define RTYPE2HOWTO(internal, relocentry) \
102 apollo_rtype2howto (internal, (relocentry)->r_type)
103
104#define SELECT_RELOC(external, internal) \
105 external.r_type = apollo_howto2rtype (internal);
106
107#include "coffcode.h"
108
109#ifndef TARGET_SYM
110#define TARGET_SYM apollocoff_vec
111#endif
112
113#ifndef TARGET_NAME
114#define TARGET_NAME "apollo-m68k"
115#endif
116
117#ifdef NAMES_HAVE_UNDERSCORE
118CREATE_BIG_COFF_TARGET_VEC (TARGET_SYM, TARGET_NAME, 0, 0, '_', NULL)
119#else
120CREATE_BIG_COFF_TARGET_VEC (TARGET_SYM, TARGET_NAME, 0, 0, 0, NULL)
121#endif
Note: See TracBrowser for help on using the repository browser.