Home | History | Annotate | Download | only in include
      1 /* Oasys object format header file for BFD.
      2 
      3    Copyright (C) 2001-2016 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 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;
    193