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