Subversion Repositories Kolibri OS

Rev

Rev 5191 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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