xref: /dflybsd-src/contrib/binutils-2.34/include/elf/m68hc11.h (revision b52ef7118d1621abed722c5bbbd542210290ecef)
1*fae548d3Szrj /* m68hc11 & m68hc12 ELF support for BFD.
2*fae548d3Szrj    Copyright (C) 1999-2020 Free Software Foundation, Inc.
3*fae548d3Szrj 
4*fae548d3Szrj    This file is part of BFD, the Binary File Descriptor library.
5*fae548d3Szrj 
6*fae548d3Szrj    This program is free software; you can redistribute it and/or modify
7*fae548d3Szrj    it under the terms of the GNU General Public License as published by
8*fae548d3Szrj    the Free Software Foundation; either version 3 of the License, or
9*fae548d3Szrj    (at your option) any later version.
10*fae548d3Szrj 
11*fae548d3Szrj    This program is distributed in the hope that it will be useful,
12*fae548d3Szrj    but WITHOUT ANY WARRANTY; without even the implied warranty of
13*fae548d3Szrj    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*fae548d3Szrj    GNU General Public License for more details.
15*fae548d3Szrj 
16*fae548d3Szrj    You should have received a copy of the GNU General Public License
17*fae548d3Szrj    along with this program; if not, write to the Free Software Foundation,
18*fae548d3Szrj    Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
19*fae548d3Szrj 
20*fae548d3Szrj #ifndef _ELF_M68HC11_H
21*fae548d3Szrj #define _ELF_M68HC11_H
22*fae548d3Szrj 
23*fae548d3Szrj #include "elf/reloc-macros.h"
24*fae548d3Szrj 
25*fae548d3Szrj /* Relocation types.  */
26*fae548d3Szrj START_RELOC_NUMBERS (elf_m68hc11_reloc_type)
27*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_NONE, 0)
28*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_8, 1)
29*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_HI8, 2)
30*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_LO8, 3)
31*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_PCREL_8, 4)
32*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_16, 5)
33*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_32, 6)
34*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_3B, 7)
35*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_PCREL_16, 8)
36*fae548d3Szrj 
37*fae548d3Szrj      /* These are GNU extensions to enable C++ vtable garbage collection.  */
38*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_GNU_VTINHERIT, 9)
39*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_GNU_VTENTRY, 10)
40*fae548d3Szrj 
41*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_24, 11)
42*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_LO16, 12)
43*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_PAGE, 13)
44*fae548d3Szrj 
45*fae548d3Szrj   RELOC_NUMBER (R_M68HC12_16B, 15)
46*fae548d3Szrj   RELOC_NUMBER (R_M68HC12_PCREL_9, 16)
47*fae548d3Szrj   RELOC_NUMBER (R_M68HC12_PCREL_10, 17)
48*fae548d3Szrj   RELOC_NUMBER (R_M68HC12_HI8XG, 18)
49*fae548d3Szrj   RELOC_NUMBER (R_M68HC12_LO8XG, 19)
50*fae548d3Szrj 
51*fae548d3Szrj      /* GNU extension for linker relaxation.
52*fae548d3Szrj         Mark beginning of a jump instruction (any form).  */
53*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_RL_JUMP, 20)
54*fae548d3Szrj 
55*fae548d3Szrj      /* Mark beginning of Gcc relaxation group instruction.  */
56*fae548d3Szrj   RELOC_NUMBER (R_M68HC11_RL_GROUP, 21)
57*fae548d3Szrj END_RELOC_NUMBERS (R_M68HC11_max)
58*fae548d3Szrj 
59*fae548d3Szrj /* Processor specific flags for the ELF header e_flags field.  */
60*fae548d3Szrj 
61*fae548d3Szrj /* ABI identification.  */
62*fae548d3Szrj #define EF_M68HC11_ABI  0x00000000F
63*fae548d3Szrj 
64*fae548d3Szrj /* Integers are 32-bit long.  */
65*fae548d3Szrj #define E_M68HC11_I32   0x000000001
66*fae548d3Szrj 
67*fae548d3Szrj /* Doubles are 64-bit long.  */
68*fae548d3Szrj #define E_M68HC11_F64   0x000000002
69*fae548d3Szrj 
70*fae548d3Szrj /* Uses 68HC12 memory banks.  */
71*fae548d3Szrj #define E_M68HC12_BANKS 0x000000004
72*fae548d3Szrj 
73*fae548d3Szrj /* XGATE ram offsetting.  */
74*fae548d3Szrj #define E_M68HC11_XGATE_RAMOFFSET     0x000000100
75*fae548d3Szrj 
76*fae548d3Szrj /* Suppress warnings */
77*fae548d3Szrj #define E_M68HC11_NO_BANK_WARNING     0x000000200
78*fae548d3Szrj 
79*fae548d3Szrj #define EF_M68HC11_MACH_MASK 0xF0
80*fae548d3Szrj #define EF_M68HC11_GENERIC   0x00 /* Generic 68HC12/backward compatibility.  */
81*fae548d3Szrj #define EF_M68HC12_MACH      0x10 /* 68HC12 microcontroller.  */
82*fae548d3Szrj #define EF_M68HCS12_MACH     0x20 /* 68HCS12 microcontroller.  */
83*fae548d3Szrj #define EF_M68HC11_MACH(mach) ((mach) & EF_M68HC11_MACH_MASK)
84*fae548d3Szrj 
85*fae548d3Szrj /* True if we can merge machines.  A generic HC12 can work on any proc
86*fae548d3Szrj    but once we have specific code, merge is not possible.  */
87*fae548d3Szrj #define EF_M68HC11_CAN_MERGE_MACH(mach1, mach2) \
88*fae548d3Szrj   ((EF_M68HC11_MACH (mach1) == EF_M68HC11_MACH (mach2)) \
89*fae548d3Szrj    || (EF_M68HC11_MACH (mach1) == EF_M68HC11_GENERIC) \
90*fae548d3Szrj    || (EF_M68HC11_MACH (mach2) == EF_M68HC11_GENERIC))
91*fae548d3Szrj 
92*fae548d3Szrj #define EF_M68HC11_MERGE_MACH(mach1, mach2) \
93*fae548d3Szrj   (((EF_M68HC11_MACH (mach1) == EF_M68HC11_MACH (mach2)) \
94*fae548d3Szrj     || (EF_M68HC11_MACH (mach1) == EF_M68HC11_GENERIC)) ? \
95*fae548d3Szrj       EF_M68HC11_MACH (mach2) : EF_M68HC11_MACH (mach1))
96*fae548d3Szrj 
97*fae548d3Szrj 
98*fae548d3Szrj /* Special values for the st_other field in the symbol table.  These
99*fae548d3Szrj    are used for 68HC12 to identify far functions (must be called with
100*fae548d3Szrj    'call' and returns with 'rtc').  */
101*fae548d3Szrj #define STO_M68HC12_FAR          0x80
102*fae548d3Szrj 
103*fae548d3Szrj /* Identify interrupt handlers.  This is used by the debugger to
104*fae548d3Szrj    correctly compute the stack frame.  */
105*fae548d3Szrj #define STO_M68HC12_INTERRUPT    0x40
106*fae548d3Szrj 
107*fae548d3Szrj #endif
108