123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- /* Oasys object format header file for BFD.
- Copyright (C) 2001-2015 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA.
- Contributed by Cygnus Support. */
- #define OASYS_MAX_SEC_COUNT 16
- /* **** */
- typedef struct oasys_archive_header
- {
- unsigned int version;
- char create_date[12];
- char revision_date[12];
- unsigned int mod_count;
- file_ptr mod_tbl_offset;
- unsigned int sym_tbl_size;
- unsigned int sym_count;
- file_ptr sym_tbl_offset;
- unsigned int xref_count;
- file_ptr xref_lst_offset;
- }
- oasys_archive_header_type;
- typedef struct oasys_extarchive_header
- {
- bfd_byte version[4];
- bfd_byte create_date[12];
- bfd_byte revision_date[12];
- bfd_byte mod_count[4];
- bfd_byte mod_tbl_offset[4];
- bfd_byte sym_tbl_size[4];
- bfd_byte sym_count[4];
- bfd_byte sym_tbl_offset[4];
- bfd_byte xref_count[4];
- bfd_byte xref_lst_offset[4];
- }
- oasys_extarchive_header_type;
- typedef struct oasys_module_table
- {
- int mod_number;
- char mod_date[12];
- unsigned int mod_size;
- unsigned int dep_count;
- unsigned int depee_count;
- file_ptr file_offset;
- unsigned int sect_count;
- char *module_name;
- unsigned int module_name_size;
- }
- oasys_module_table_type;
- typedef struct oasys_extmodule_table_a
- {
- bfd_byte mod_number[4];
- bfd_byte mod_date[12];
- bfd_byte mod_size[4];
- bfd_byte dep_count[4];
- bfd_byte depee_count[4];
- bfd_byte sect_count[4];
- bfd_byte file_offset[4];
- bfd_byte mod_name[32];
- }
- oasys_extmodule_table_type_a_type;
- typedef struct oasys_extmodule_table_b
- {
- bfd_byte mod_number[4];
- bfd_byte mod_date[12];
- bfd_byte mod_size[4];
- bfd_byte dep_count[4];
- bfd_byte depee_count[4];
- bfd_byte sect_count[4];
- bfd_byte file_offset[4];
- bfd_byte mod_name_length[4];
- }
- oasys_extmodule_table_type_b_type;
- typedef enum oasys_record
- {
- oasys_record_is_end_enum = 0,
- oasys_record_is_data_enum = 1,
- oasys_record_is_symbol_enum = 2,
- oasys_record_is_header_enum = 3,
- oasys_record_is_named_section_enum = 4,
- oasys_record_is_com_enum = 5,
- oasys_record_is_debug_enum = 6,
- oasys_record_is_section_enum = 7,
- oasys_record_is_debug_file_enum = 8,
- oasys_record_is_module_enum = 9,
- oasys_record_is_local_enum = 10
- }
- oasys_record_enum_type;
- typedef struct oasys_record_header
- {
- unsigned char length;
- unsigned char check_sum;
- unsigned char type;
- unsigned char fill;
- }
- oasys_record_header_type;
- typedef struct oasys_data_record
- {
- oasys_record_header_type header;
- unsigned char relb;
- bfd_byte addr[4];
- /* maximum total size of data record is 255 bytes */
- bfd_byte data[246];
- }
- oasys_data_record_type;
- typedef struct oasys_header_record
- {
- oasys_record_header_type header;
- unsigned char version_number;
- unsigned char rev_number;
- char module_name[26-6];
- char description[64-26];
- }
- oasys_header_record_type;
- #define OASYS_VERSION_NUMBER 0
- #define OASYS_REV_NUMBER 0
- typedef struct oasys_symbol_record
- {
- oasys_record_header_type header;
- unsigned char relb;
- bfd_byte value[4];
- bfd_byte refno[2];
- char name[64];
- }
- oasys_symbol_record_type;
- #define RELOCATION_PCREL_BIT 0x80
- #define RELOCATION_32BIT_BIT 0x40
- #define RELOCATION_TYPE_BITS 0x30
- #define RELOCATION_TYPE_ABS 0x00
- #define RELOCATION_TYPE_REL 0x10
- #define RELOCATION_TYPE_UND 0x20
- #define RELOCATION_TYPE_COM 0x30
- #define RELOCATION_SECT_BITS 0x0f
- typedef struct oasys_section_record
- {
- oasys_record_header_type header;
- unsigned char relb;
- bfd_byte value[4];
- bfd_byte vma[4];
- bfd_byte fill[3];
- }
- oasys_section_record_type;
- typedef struct oasys_end_record
- {
- oasys_record_header_type header;
- unsigned char relb;
- bfd_byte entry[4];
- bfd_byte fill[2];
- bfd_byte zero;
- }
- oasys_end_record_type;
- typedef union oasys_record_union
- {
- oasys_record_header_type header;
- oasys_data_record_type data;
- oasys_section_record_type section;
- oasys_symbol_record_type symbol;
- oasys_header_record_type first;
- oasys_end_record_type end;
- bfd_byte pad[256];
- }
- oasys_record_union_type;
|