xref: /netbsd-src/external/gpl3/binutils.old/dist/include/oasys.h (revision e992f068c547fd6e84b3f104dc2340adcc955732)
175fd0b74Schristos /* Oasys object format header file for BFD.
275fd0b74Schristos 
3*e992f068Schristos    Copyright (C) 2001-2022 Free Software Foundation, Inc.
475fd0b74Schristos 
575fd0b74Schristos    This program is free software; you can redistribute it and/or modify
675fd0b74Schristos    it under the terms of the GNU General Public License as published by
775fd0b74Schristos    the Free Software Foundation; either version 3, or (at your option)
875fd0b74Schristos    any later version.
975fd0b74Schristos 
1075fd0b74Schristos    This program is distributed in the hope that it will be useful,
1175fd0b74Schristos    but WITHOUT ANY WARRANTY; without even the implied warranty of
1275fd0b74Schristos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1375fd0b74Schristos    GNU General Public License for more details.
1475fd0b74Schristos 
1575fd0b74Schristos    You should have received a copy of the GNU General Public License
1675fd0b74Schristos    along with this program; if not, write to the Free Software
1775fd0b74Schristos    Foundation, Inc., 51 Franklin Street - Fifth Floor,
1875fd0b74Schristos    Boston, MA 02110-1301, USA.
1975fd0b74Schristos 
2075fd0b74Schristos    Contributed by Cygnus Support.  */
2175fd0b74Schristos 
2275fd0b74Schristos #define OASYS_MAX_SEC_COUNT 16
2375fd0b74Schristos /* **** */
2475fd0b74Schristos 
2575fd0b74Schristos typedef struct oasys_archive_header
2675fd0b74Schristos   {
2775fd0b74Schristos     unsigned int  version;
2875fd0b74Schristos     char create_date[12];
2975fd0b74Schristos     char revision_date[12];
3075fd0b74Schristos     unsigned int mod_count;
3175fd0b74Schristos     file_ptr mod_tbl_offset;
3275fd0b74Schristos     unsigned int sym_tbl_size;
3375fd0b74Schristos     unsigned int sym_count;
3475fd0b74Schristos     file_ptr sym_tbl_offset;
3575fd0b74Schristos     unsigned int xref_count;
3675fd0b74Schristos     file_ptr xref_lst_offset;
3775fd0b74Schristos   }
3875fd0b74Schristos oasys_archive_header_type;
3975fd0b74Schristos 
4075fd0b74Schristos typedef struct oasys_extarchive_header
4175fd0b74Schristos   {
4275fd0b74Schristos     bfd_byte version[4];
4375fd0b74Schristos     bfd_byte create_date[12];
4475fd0b74Schristos     bfd_byte revision_date[12];
4575fd0b74Schristos     bfd_byte mod_count[4];
4675fd0b74Schristos     bfd_byte mod_tbl_offset[4];
4775fd0b74Schristos     bfd_byte sym_tbl_size[4];
4875fd0b74Schristos     bfd_byte sym_count[4];
4975fd0b74Schristos     bfd_byte sym_tbl_offset[4];
5075fd0b74Schristos     bfd_byte xref_count[4];
5175fd0b74Schristos     bfd_byte xref_lst_offset[4];
5275fd0b74Schristos   }
5375fd0b74Schristos oasys_extarchive_header_type;
5475fd0b74Schristos 
5575fd0b74Schristos typedef struct oasys_module_table
5675fd0b74Schristos   {
5775fd0b74Schristos     int mod_number;
5875fd0b74Schristos     char mod_date[12];
5975fd0b74Schristos     unsigned int mod_size;
6075fd0b74Schristos     unsigned int dep_count;
6175fd0b74Schristos     unsigned int depee_count;
6275fd0b74Schristos     file_ptr file_offset;
6375fd0b74Schristos     unsigned int sect_count;
6475fd0b74Schristos     char *module_name;
6575fd0b74Schristos     unsigned int module_name_size;
6675fd0b74Schristos   }
6775fd0b74Schristos oasys_module_table_type;
6875fd0b74Schristos 
6975fd0b74Schristos typedef struct oasys_extmodule_table_a
7075fd0b74Schristos   {
7175fd0b74Schristos     bfd_byte mod_number[4];
7275fd0b74Schristos     bfd_byte mod_date[12];
7375fd0b74Schristos     bfd_byte mod_size[4];
7475fd0b74Schristos     bfd_byte dep_count[4];
7575fd0b74Schristos     bfd_byte depee_count[4];
7675fd0b74Schristos     bfd_byte sect_count[4];
7775fd0b74Schristos     bfd_byte file_offset[4];
7875fd0b74Schristos     bfd_byte mod_name[32];
7975fd0b74Schristos   }
8075fd0b74Schristos oasys_extmodule_table_type_a_type;
8175fd0b74Schristos 
8275fd0b74Schristos typedef struct oasys_extmodule_table_b
8375fd0b74Schristos   {
8475fd0b74Schristos     bfd_byte mod_number[4];
8575fd0b74Schristos     bfd_byte mod_date[12];
8675fd0b74Schristos     bfd_byte mod_size[4];
8775fd0b74Schristos     bfd_byte dep_count[4];
8875fd0b74Schristos     bfd_byte depee_count[4];
8975fd0b74Schristos     bfd_byte sect_count[4];
9075fd0b74Schristos     bfd_byte file_offset[4];
9175fd0b74Schristos     bfd_byte mod_name_length[4];
9275fd0b74Schristos   }
9375fd0b74Schristos oasys_extmodule_table_type_b_type;
9475fd0b74Schristos 
9575fd0b74Schristos typedef enum oasys_record
9675fd0b74Schristos   {
9775fd0b74Schristos     oasys_record_is_end_enum = 0,
9875fd0b74Schristos     oasys_record_is_data_enum = 1,
9975fd0b74Schristos     oasys_record_is_symbol_enum = 2,
10075fd0b74Schristos     oasys_record_is_header_enum = 3,
10175fd0b74Schristos     oasys_record_is_named_section_enum = 4,
10275fd0b74Schristos     oasys_record_is_com_enum = 5,
10375fd0b74Schristos     oasys_record_is_debug_enum = 6,
10475fd0b74Schristos     oasys_record_is_section_enum = 7,
10575fd0b74Schristos     oasys_record_is_debug_file_enum = 8,
10675fd0b74Schristos     oasys_record_is_module_enum = 9,
10775fd0b74Schristos     oasys_record_is_local_enum = 10
10875fd0b74Schristos   }
10975fd0b74Schristos oasys_record_enum_type;
11075fd0b74Schristos 
11175fd0b74Schristos typedef struct oasys_record_header
11275fd0b74Schristos   {
11375fd0b74Schristos     unsigned char length;
11475fd0b74Schristos     unsigned char check_sum;
11575fd0b74Schristos     unsigned char type;
11675fd0b74Schristos     unsigned char fill;
11775fd0b74Schristos   }
11875fd0b74Schristos oasys_record_header_type;
11975fd0b74Schristos 
12075fd0b74Schristos typedef struct oasys_data_record
12175fd0b74Schristos   {
12275fd0b74Schristos     oasys_record_header_type header;
12375fd0b74Schristos     unsigned char relb;
12475fd0b74Schristos     bfd_byte addr[4];
12575fd0b74Schristos     /* maximum total size of data record is 255 bytes */
12675fd0b74Schristos     bfd_byte data[246];
12775fd0b74Schristos   }
12875fd0b74Schristos oasys_data_record_type;
12975fd0b74Schristos 
13075fd0b74Schristos typedef struct oasys_header_record
13175fd0b74Schristos   {
13275fd0b74Schristos     oasys_record_header_type header;
13375fd0b74Schristos     unsigned char version_number;
13475fd0b74Schristos     unsigned char rev_number;
13575fd0b74Schristos     char module_name[26-6];
13675fd0b74Schristos     char description[64-26];
13775fd0b74Schristos   }
13875fd0b74Schristos oasys_header_record_type;
13975fd0b74Schristos 
14075fd0b74Schristos #define OASYS_VERSION_NUMBER 0
14175fd0b74Schristos #define OASYS_REV_NUMBER 0
14275fd0b74Schristos 
14375fd0b74Schristos typedef struct oasys_symbol_record
14475fd0b74Schristos   {
14575fd0b74Schristos     oasys_record_header_type header;
14675fd0b74Schristos     unsigned char relb;
14775fd0b74Schristos     bfd_byte value[4];
14875fd0b74Schristos     bfd_byte refno[2];
14975fd0b74Schristos     char name[64];
15075fd0b74Schristos   }
15175fd0b74Schristos oasys_symbol_record_type;
15275fd0b74Schristos 
15375fd0b74Schristos #define RELOCATION_PCREL_BIT 0x80
15475fd0b74Schristos #define RELOCATION_32BIT_BIT 0x40
15575fd0b74Schristos #define RELOCATION_TYPE_BITS 0x30
15675fd0b74Schristos #define RELOCATION_TYPE_ABS 0x00
15775fd0b74Schristos #define RELOCATION_TYPE_REL 0x10
15875fd0b74Schristos #define RELOCATION_TYPE_UND 0x20
15975fd0b74Schristos #define RELOCATION_TYPE_COM 0x30
16075fd0b74Schristos #define RELOCATION_SECT_BITS 0x0f
16175fd0b74Schristos 
16275fd0b74Schristos typedef struct oasys_section_record
16375fd0b74Schristos   {
16475fd0b74Schristos     oasys_record_header_type header;
16575fd0b74Schristos     unsigned char relb;
16675fd0b74Schristos     bfd_byte value[4];
16775fd0b74Schristos     bfd_byte vma[4];
16875fd0b74Schristos     bfd_byte fill[3];
16975fd0b74Schristos   }
17075fd0b74Schristos oasys_section_record_type;
17175fd0b74Schristos 
17275fd0b74Schristos typedef struct oasys_end_record
17375fd0b74Schristos   {
17475fd0b74Schristos     oasys_record_header_type header;
17575fd0b74Schristos     unsigned char relb;
17675fd0b74Schristos     bfd_byte entry[4];
17775fd0b74Schristos     bfd_byte fill[2];
17875fd0b74Schristos     bfd_byte zero;
17975fd0b74Schristos   }
18075fd0b74Schristos oasys_end_record_type;
18175fd0b74Schristos 
18275fd0b74Schristos typedef union oasys_record_union
18375fd0b74Schristos   {
18475fd0b74Schristos     oasys_record_header_type header;
18575fd0b74Schristos     oasys_data_record_type data;
18675fd0b74Schristos     oasys_section_record_type section;
18775fd0b74Schristos     oasys_symbol_record_type symbol;
18875fd0b74Schristos     oasys_header_record_type first;
18975fd0b74Schristos     oasys_end_record_type end;
19075fd0b74Schristos     bfd_byte pad[256];
19175fd0b74Schristos   }
19275fd0b74Schristos oasys_record_union_type;
193