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