1219089Spjd/* MC68k ELF support for BFD.
2219089Spjd   Copyright 1998, 1999, 2000, 2002, 2005, 2006, 2007, 2009, 2010
3219089Spjd   Free Software Foundation, Inc.
4219089Spjd
5219089Spjd   This file is part of BFD, the Binary File Descriptor library.
6219089Spjd
7219089Spjd   This program is free software; you can redistribute it and/or modify
8219089Spjd   it under the terms of the GNU General Public License as published by
9219089Spjd   the Free Software Foundation; either version 3 of the License, or
10219089Spjd   (at your option) any later version.
11219089Spjd
12219089Spjd   This program is distributed in the hope that it will be useful,
13219089Spjd   but WITHOUT ANY WARRANTY; without even the implied warranty of
14219089Spjd   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15219089Spjd   GNU General Public License for more details.
16219089Spjd
17219089Spjd   You should have received a copy of the GNU General Public License
18219089Spjd   along with this program; if not, write to the Free Software Foundation,
19219089Spjd   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
20219089Spjd
21219089Spjd#ifndef _ELF_M68K_H
22219089Spjd#define _ELF_M68K_H
23268657Sdelphij
24219089Spjd#include "elf/reloc-macros.h"
25219089Spjd
26219089Spjd/* Relocation types.  */
27219089SpjdSTART_RELOC_NUMBERS (elf_m68k_reloc_type)
28219089Spjd  RELOC_NUMBER (R_68K_NONE, 0)		/* No reloc */
29219089Spjd  RELOC_NUMBER (R_68K_32, 1)		/* Direct 32 bit  */
30219089Spjd  RELOC_NUMBER (R_68K_16, 2)		/* Direct 16 bit  */
31219089Spjd  RELOC_NUMBER (R_68K_8, 3)		/* Direct 8 bit  */
32219089Spjd  RELOC_NUMBER (R_68K_PC32, 4)		/* PC relative 32 bit */
33219089Spjd  RELOC_NUMBER (R_68K_PC16, 5)		/* PC relative 16 bit */
34219089Spjd  RELOC_NUMBER (R_68K_PC8, 6)		/* PC relative 8 bit */
35219089Spjd  RELOC_NUMBER (R_68K_GOT32, 7)		/* 32 bit PC relative GOT entry */
36219089Spjd  RELOC_NUMBER (R_68K_GOT16, 8)		/* 16 bit PC relative GOT entry */
37219089Spjd  RELOC_NUMBER (R_68K_GOT8, 9)		/* 8 bit PC relative GOT entry */
38219089Spjd  RELOC_NUMBER (R_68K_GOT32O, 10)	/* 32 bit GOT offset */
39219089Spjd  RELOC_NUMBER (R_68K_GOT16O, 11)	/* 16 bit GOT offset */
40219089Spjd  RELOC_NUMBER (R_68K_GOT8O, 12)	/* 8 bit GOT offset */
41219089Spjd  RELOC_NUMBER (R_68K_PLT32, 13)	/* 32 bit PC relative PLT address */
42219089Spjd  RELOC_NUMBER (R_68K_PLT16, 14)	/* 16 bit PC relative PLT address */
43219089Spjd  RELOC_NUMBER (R_68K_PLT8, 15)		/* 8 bit PC relative PLT address */
44219089Spjd  RELOC_NUMBER (R_68K_PLT32O, 16)	/* 32 bit PLT offset */
45219089Spjd  RELOC_NUMBER (R_68K_PLT16O, 17)	/* 16 bit PLT offset */
46219089Spjd  RELOC_NUMBER (R_68K_PLT8O, 18)	/* 8 bit PLT offset */
47219089Spjd  RELOC_NUMBER (R_68K_COPY, 19)		/* Copy symbol at runtime */
48219089Spjd  RELOC_NUMBER (R_68K_GLOB_DAT, 20)	/* Create GOT entry */
49219089Spjd  RELOC_NUMBER (R_68K_JMP_SLOT, 21)	/* Create PLT entry */
50219089Spjd  RELOC_NUMBER (R_68K_RELATIVE, 22)	/* Adjust by program base */
51219089Spjd  /* These are GNU extensions to enable C++ vtable garbage collection.  */
52219089Spjd  RELOC_NUMBER (R_68K_GNU_VTINHERIT, 23)
53219089Spjd  RELOC_NUMBER (R_68K_GNU_VTENTRY, 24)
54219089Spjd  /* TLS static relocations.  */
55219089Spjd  RELOC_NUMBER (R_68K_TLS_GD32, 25)
56219089Spjd  RELOC_NUMBER (R_68K_TLS_GD16, 26)
57219089Spjd  RELOC_NUMBER (R_68K_TLS_GD8, 27)
58219089Spjd  RELOC_NUMBER (R_68K_TLS_LDM32, 28)
59219089Spjd  RELOC_NUMBER (R_68K_TLS_LDM16, 29)
60219089Spjd  RELOC_NUMBER (R_68K_TLS_LDM8, 30)
61219089Spjd  RELOC_NUMBER (R_68K_TLS_LDO32, 31)
62219089Spjd  RELOC_NUMBER (R_68K_TLS_LDO16, 32)
63219089Spjd  RELOC_NUMBER (R_68K_TLS_LDO8, 33)
64219089Spjd  RELOC_NUMBER (R_68K_TLS_IE32, 34)
65219089Spjd  RELOC_NUMBER (R_68K_TLS_IE16, 35)
66219089Spjd  RELOC_NUMBER (R_68K_TLS_IE8, 36)
67219089Spjd  RELOC_NUMBER (R_68K_TLS_LE32, 37)
68219089Spjd  RELOC_NUMBER (R_68K_TLS_LE16, 38)
69219089Spjd  RELOC_NUMBER (R_68K_TLS_LE8, 39)
70219089Spjd  RELOC_NUMBER (R_68K_TLS_DTPMOD32, 40)
71219089Spjd  RELOC_NUMBER (R_68K_TLS_DTPREL32, 41)
72219089Spjd  RELOC_NUMBER (R_68K_TLS_TPREL32, 42)
73219089SpjdEND_RELOC_NUMBERS (R_68K_max)
74219089Spjd
75219089Spjd/* We use the top 24 bits to encode information about the
76219089Spjd   architecture variant.  */
77219089Spjd#define EF_M68K_CPU32    0x00810000
78219089Spjd#define EF_M68K_M68000   0x01000000
79219089Spjd#define EF_M68K_CFV4E    0x00008000
80219089Spjd#define EF_M68K_FIDO     0x02000000
81219089Spjd#define EF_M68K_ARCH_MASK						\
82219089Spjd  (EF_M68K_M68000 | EF_M68K_CPU32 | EF_M68K_CFV4E | EF_M68K_FIDO)
83219089Spjd
84219089Spjd/* We use the bottom 8 bits to encode information about the
85219089Spjd   coldfire variant.  If we use any of these bits, the top 24 bits are
86219089Spjd   either 0 or EF_M68K_CFV4E.  */
87219089Spjd#define EF_M68K_CF_ISA_MASK	0x0F  /* Which ISA */
88219089Spjd#define EF_M68K_CF_ISA_A_NODIV	0x01  /* ISA A except for div */
89219089Spjd#define EF_M68K_CF_ISA_A	0x02
90219089Spjd#define EF_M68K_CF_ISA_A_PLUS	0x03
91219089Spjd#define EF_M68K_CF_ISA_B_NOUSP	0x04  /* ISA_B except for USP */
92219089Spjd#define EF_M68K_CF_ISA_B	0x05
93219089Spjd#define EF_M68K_CF_ISA_C	0x06
94219089Spjd#define EF_M68K_CF_ISA_C_NODIV	0x07  /* ISA C except for div */
95219089Spjd#define EF_M68K_CF_MAC_MASK	0x30
96219089Spjd#define EF_M68K_CF_MAC		0x10  /* MAC */
97219089Spjd#define EF_M68K_CF_EMAC		0x20  /* EMAC */
98219089Spjd#define EF_M68K_CF_EMAC_B	0x30  /* EMAC_B */
99219089Spjd#define EF_M68K_CF_FLOAT	0x40  /* Has float insns */
100219089Spjd#define EF_M68K_CF_MASK		0xFF
101219089Spjd
102219089Spjd#endif
103219089Spjd