Subversion Repositories Kolibri OS

Rev

Rev 5191 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /* Oasys object format header file for BFD.
  2.  
  3.    Copyright (C) 2001-2015 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.