1130812Smarcel/* Oasys object format header file for BFD. 2130812Smarcel 3130812Smarcel Copyright 2001 Free Software Foundation, Inc. 4130812Smarcel 5130812Smarcel This program is free software; you can redistribute it and/or modify 6130812Smarcel it under the terms of the GNU General Public License as published by 7130812Smarcel the Free Software Foundation; either version 2, or (at your option) 8130812Smarcel any later version. 9130812Smarcel 10130812Smarcel This program is distributed in the hope that it will be useful, 11130812Smarcel but WITHOUT ANY WARRANTY; without even the implied warranty of 12130812Smarcel MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13130812Smarcel GNU General Public License for more details. 14130812Smarcel 15130812Smarcel You should have received a copy of the GNU General Public License 16130812Smarcel along with this program; if not, write to the Free Software 17130812Smarcel Foundation, Inc., 59 Temple Place - Suite 330, 18130812Smarcel Boston, MA 02111-1307, USA. 19130812Smarcel 20130812Smarcel Contributed by Cygnus Support. */ 21130812Smarcel 22130812Smarcel#define OASYS_MAX_SEC_COUNT 16 23130812Smarcel/* **** */ 24130812Smarcel 25130812Smarceltypedef struct oasys_archive_header 26130812Smarcel { 27130812Smarcel unsigned int version; 28130812Smarcel char create_date[12]; 29130812Smarcel char revision_date[12]; 30130812Smarcel unsigned int mod_count; 31130812Smarcel file_ptr mod_tbl_offset; 32130812Smarcel unsigned int sym_tbl_size; 33130812Smarcel unsigned int sym_count; 34130812Smarcel file_ptr sym_tbl_offset; 35130812Smarcel unsigned int xref_count; 36130812Smarcel file_ptr xref_lst_offset; 37130812Smarcel } 38130812Smarceloasys_archive_header_type; 39130812Smarcel 40130812Smarceltypedef struct oasys_extarchive_header 41130812Smarcel { 42130812Smarcel bfd_byte version[4]; 43130812Smarcel bfd_byte create_date[12]; 44130812Smarcel bfd_byte revision_date[12]; 45130812Smarcel bfd_byte mod_count[4]; 46130812Smarcel bfd_byte mod_tbl_offset[4]; 47130812Smarcel bfd_byte sym_tbl_size[4]; 48130812Smarcel bfd_byte sym_count[4]; 49130812Smarcel bfd_byte sym_tbl_offset[4]; 50130812Smarcel bfd_byte xref_count[4]; 51130812Smarcel bfd_byte xref_lst_offset[4]; 52130812Smarcel } 53130812Smarceloasys_extarchive_header_type; 54130812Smarcel 55130812Smarceltypedef struct oasys_module_table 56130812Smarcel { 57130812Smarcel int mod_number; 58130812Smarcel char mod_date[12]; 59130812Smarcel unsigned int mod_size; 60130812Smarcel unsigned int dep_count; 61130812Smarcel unsigned int depee_count; 62130812Smarcel file_ptr file_offset; 63130812Smarcel unsigned int sect_count; 64130812Smarcel char *module_name; 65130812Smarcel unsigned int module_name_size; 66130812Smarcel } 67130812Smarceloasys_module_table_type; 68130812Smarcel 69130812Smarceltypedef struct oasys_extmodule_table_a 70130812Smarcel { 71130812Smarcel bfd_byte mod_number[4]; 72130812Smarcel bfd_byte mod_date[12]; 73130812Smarcel bfd_byte mod_size[4]; 74130812Smarcel bfd_byte dep_count[4]; 75130812Smarcel bfd_byte depee_count[4]; 76130812Smarcel bfd_byte sect_count[4]; 77130812Smarcel bfd_byte file_offset[4]; 78130812Smarcel bfd_byte mod_name[32]; 79130812Smarcel } 80130812Smarceloasys_extmodule_table_type_a_type; 81130812Smarcel 82130812Smarceltypedef struct oasys_extmodule_table_b 83130812Smarcel { 84130812Smarcel bfd_byte mod_number[4]; 85130812Smarcel bfd_byte mod_date[12]; 86130812Smarcel bfd_byte mod_size[4]; 87130812Smarcel bfd_byte dep_count[4]; 88130812Smarcel bfd_byte depee_count[4]; 89130812Smarcel bfd_byte sect_count[4]; 90130812Smarcel bfd_byte file_offset[4]; 91130812Smarcel bfd_byte mod_name_length[4]; 92130812Smarcel } 93130812Smarceloasys_extmodule_table_type_b_type; 94130812Smarcel 95130812Smarceltypedef enum oasys_record 96130812Smarcel { 97130812Smarcel oasys_record_is_end_enum = 0, 98130812Smarcel oasys_record_is_data_enum = 1, 99130812Smarcel oasys_record_is_symbol_enum = 2, 100130812Smarcel oasys_record_is_header_enum = 3, 101130812Smarcel oasys_record_is_named_section_enum = 4, 102130812Smarcel oasys_record_is_com_enum = 5, 103130812Smarcel oasys_record_is_debug_enum = 6, 104130812Smarcel oasys_record_is_section_enum = 7, 105130812Smarcel oasys_record_is_debug_file_enum = 8, 106130812Smarcel oasys_record_is_module_enum = 9, 107130812Smarcel oasys_record_is_local_enum = 10 108130812Smarcel } 109130812Smarceloasys_record_enum_type; 110130812Smarcel 111130812Smarceltypedef struct oasys_record_header 112130812Smarcel { 113130812Smarcel unsigned char length; 114130812Smarcel unsigned char check_sum; 115130812Smarcel unsigned char type; 116130812Smarcel unsigned char fill; 117130812Smarcel } 118130812Smarceloasys_record_header_type; 119130812Smarcel 120130812Smarceltypedef struct oasys_data_record 121130812Smarcel { 122130812Smarcel oasys_record_header_type header; 123130812Smarcel unsigned char relb; 124130812Smarcel bfd_byte addr[4]; 125130812Smarcel /* maximum total size of data record is 255 bytes */ 126130812Smarcel bfd_byte data[246]; 127130812Smarcel } 128130812Smarceloasys_data_record_type; 129130812Smarcel 130130812Smarceltypedef struct oasys_header_record 131130812Smarcel { 132130812Smarcel oasys_record_header_type header; 133130812Smarcel unsigned char version_number; 134130812Smarcel unsigned char rev_number; 135130812Smarcel char module_name[26-6]; 136130812Smarcel char description[64-26]; 137130812Smarcel } 138130812Smarceloasys_header_record_type; 139130812Smarcel 140130812Smarcel#define OASYS_VERSION_NUMBER 0 141130812Smarcel#define OASYS_REV_NUMBER 0 142130812Smarcel 143130812Smarceltypedef struct oasys_symbol_record 144130812Smarcel { 145130812Smarcel oasys_record_header_type header; 146130812Smarcel unsigned char relb; 147130812Smarcel bfd_byte value[4]; 148130812Smarcel bfd_byte refno[2]; 149130812Smarcel char name[64]; 150130812Smarcel } 151130812Smarceloasys_symbol_record_type; 152130812Smarcel 153130812Smarcel#define RELOCATION_PCREL_BIT 0x80 154130812Smarcel#define RELOCATION_32BIT_BIT 0x40 155130812Smarcel#define RELOCATION_TYPE_BITS 0x30 156130812Smarcel#define RELOCATION_TYPE_ABS 0x00 157130812Smarcel#define RELOCATION_TYPE_REL 0x10 158130812Smarcel#define RELOCATION_TYPE_UND 0x20 159130812Smarcel#define RELOCATION_TYPE_COM 0x30 160130812Smarcel#define RELOCATION_SECT_BITS 0x0f 161130812Smarcel 162130812Smarceltypedef struct oasys_section_record 163130812Smarcel { 164130812Smarcel oasys_record_header_type header; 165130812Smarcel unsigned char relb; 166130812Smarcel bfd_byte value[4]; 167130812Smarcel bfd_byte vma[4]; 168130812Smarcel bfd_byte fill[3]; 169130812Smarcel } 170130812Smarceloasys_section_record_type; 171130812Smarcel 172130812Smarceltypedef struct oasys_end_record 173130812Smarcel { 174130812Smarcel oasys_record_header_type header; 175130812Smarcel unsigned char relb; 176130812Smarcel bfd_byte entry[4]; 177130812Smarcel bfd_byte fill[2]; 178130812Smarcel bfd_byte zero; 179130812Smarcel } 180130812Smarceloasys_end_record_type; 181130812Smarcel 182130812Smarceltypedef union oasys_record_union 183130812Smarcel { 184130812Smarcel oasys_record_header_type header; 185130812Smarcel oasys_data_record_type data; 186130812Smarcel oasys_section_record_type section; 187130812Smarcel oasys_symbol_record_type symbol; 188130812Smarcel oasys_header_record_type first; 189130812Smarcel oasys_end_record_type end; 190130812Smarcel bfd_byte pad[256]; 191130812Smarcel } 192130812Smarceloasys_record_union_type; 193