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