Subversion Repositories Kolibri OS

Rev

Rev 5191 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5191 serge 1
/* Oasys object format header file for BFD.
2
 
6324 serge 3
   Copyright (C) 2001-2015 Free Software Foundation, Inc.
5191 serge 4
 
5
   This program is free software; you can redistribute it and/or modify
6
   it under the terms of the GNU General Public License as published by
7
   the Free Software Foundation; either version 3, or (at your option)
8
   any later version.
9
 
10
   This program is distributed in the hope that it will be useful,
11
   but WITHOUT ANY WARRANTY; without even the implied warranty of
12
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
   GNU General Public License for more details.
14
 
15
   You should have received a copy of the GNU General Public License
16
   along with this program; if not, write to the Free Software
17
   Foundation, Inc., 51 Franklin Street - Fifth Floor,
18
   Boston, MA 02110-1301, USA.
19
 
20
   Contributed by Cygnus Support.  */
21
 
22
#define OASYS_MAX_SEC_COUNT 16
23
/* **** */
24
 
25
typedef struct oasys_archive_header
26
  {
27
    unsigned int  version;
28
    char create_date[12];
29
    char revision_date[12];
30
    unsigned int mod_count;
31
    file_ptr mod_tbl_offset;
32
    unsigned int sym_tbl_size;
33
    unsigned int sym_count;
34
    file_ptr sym_tbl_offset;
35
    unsigned int xref_count;
36
    file_ptr xref_lst_offset;
37
  }
38
oasys_archive_header_type;
39
 
40
typedef struct oasys_extarchive_header
41
  {
42
    bfd_byte version[4];
43
    bfd_byte create_date[12];
44
    bfd_byte revision_date[12];
45
    bfd_byte mod_count[4];
46
    bfd_byte mod_tbl_offset[4];
47
    bfd_byte sym_tbl_size[4];
48
    bfd_byte sym_count[4];
49
    bfd_byte sym_tbl_offset[4];
50
    bfd_byte xref_count[4];
51
    bfd_byte xref_lst_offset[4];
52
  }
53
oasys_extarchive_header_type;
54
 
55
typedef struct oasys_module_table
56
  {
57
    int mod_number;
58
    char mod_date[12];
59
    unsigned int mod_size;
60
    unsigned int dep_count;
61
    unsigned int depee_count;
62
    file_ptr file_offset;
63
    unsigned int sect_count;
64
    char *module_name;
65
    unsigned int module_name_size;
66
  }
67
oasys_module_table_type;
68
 
69
typedef struct oasys_extmodule_table_a
70
  {
71
    bfd_byte mod_number[4];
72
    bfd_byte mod_date[12];
73
    bfd_byte mod_size[4];
74
    bfd_byte dep_count[4];
75
    bfd_byte depee_count[4];
76
    bfd_byte sect_count[4];
77
    bfd_byte file_offset[4];
78
    bfd_byte mod_name[32];
79
  }
80
oasys_extmodule_table_type_a_type;
81
 
82
typedef struct oasys_extmodule_table_b
83
  {
84
    bfd_byte mod_number[4];
85
    bfd_byte mod_date[12];
86
    bfd_byte mod_size[4];
87
    bfd_byte dep_count[4];
88
    bfd_byte depee_count[4];
89
    bfd_byte sect_count[4];
90
    bfd_byte file_offset[4];
91
    bfd_byte mod_name_length[4];
92
  }
93
oasys_extmodule_table_type_b_type;
94
 
95
typedef enum oasys_record
96
  {
97
    oasys_record_is_end_enum = 0,
98
    oasys_record_is_data_enum = 1,
99
    oasys_record_is_symbol_enum = 2,
100
    oasys_record_is_header_enum = 3,
101
    oasys_record_is_named_section_enum = 4,
102
    oasys_record_is_com_enum = 5,
103
    oasys_record_is_debug_enum = 6,
104
    oasys_record_is_section_enum = 7,
105
    oasys_record_is_debug_file_enum = 8,
106
    oasys_record_is_module_enum = 9,
107
    oasys_record_is_local_enum = 10
108
  }
109
oasys_record_enum_type;
110
 
111
typedef struct oasys_record_header
112
  {
113
    unsigned char length;
114
    unsigned char check_sum;
115
    unsigned char type;
116
    unsigned char fill;
117
  }
118
oasys_record_header_type;
119
 
120
typedef struct oasys_data_record
121
  {
122
    oasys_record_header_type header;
123
    unsigned char relb;
124
    bfd_byte addr[4];
125
    /* maximum total size of data record is 255 bytes */
126
    bfd_byte data[246];
127
  }
128
oasys_data_record_type;
129
 
130
typedef struct oasys_header_record
131
  {
132
    oasys_record_header_type header;
133
    unsigned char version_number;
134
    unsigned char rev_number;
135
    char module_name[26-6];
136
    char description[64-26];
137
  }
138
oasys_header_record_type;
139
 
140
#define OASYS_VERSION_NUMBER 0
141
#define OASYS_REV_NUMBER 0
142
 
143
typedef struct oasys_symbol_record
144
  {
145
    oasys_record_header_type header;
146
    unsigned char relb;
147
    bfd_byte value[4];
148
    bfd_byte refno[2];
149
    char name[64];
150
  }
151
oasys_symbol_record_type;
152
 
153
#define RELOCATION_PCREL_BIT 0x80
154
#define RELOCATION_32BIT_BIT 0x40
155
#define RELOCATION_TYPE_BITS 0x30
156
#define RELOCATION_TYPE_ABS 0x00
157
#define RELOCATION_TYPE_REL 0x10
158
#define RELOCATION_TYPE_UND 0x20
159
#define RELOCATION_TYPE_COM 0x30
160
#define RELOCATION_SECT_BITS 0x0f
161
 
162
typedef struct oasys_section_record
163
  {
164
    oasys_record_header_type header;
165
    unsigned char relb;
166
    bfd_byte value[4];
167
    bfd_byte vma[4];
168
    bfd_byte fill[3];
169
  }
170
oasys_section_record_type;
171
 
172
typedef struct oasys_end_record
173
  {
174
    oasys_record_header_type header;
175
    unsigned char relb;
176
    bfd_byte entry[4];
177
    bfd_byte fill[2];
178
    bfd_byte zero;
179
  }
180
oasys_end_record_type;
181
 
182
typedef union oasys_record_union
183
  {
184
    oasys_record_header_type header;
185
    oasys_data_record_type data;
186
    oasys_section_record_type section;
187
    oasys_symbol_record_type symbol;
188
    oasys_header_record_type first;
189
    oasys_end_record_type end;
190
    bfd_byte pad[256];
191
  }
192
oasys_record_union_type;