| 1 | /* Oasys object format header file for BFD.
|
|---|
| 2 |
|
|---|
| 3 | Copyright 2001 Free Software Foundation, Inc.
|
|---|
| 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 2, 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., 59 Temple Place - Suite 330,
|
|---|
| 18 | Boston, MA 02111-1307, 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;
|
|---|