xref: /openbsd-src/gnu/usr.bin/binutils-2.17/bfd/libieee.h (revision 3d8817e467ea46cf4772788d6804dd293abfb01a)
1*3d8817e4Smiod /* IEEE-695 object file formats:  definitions internal to BFD.
2*3d8817e4Smiod    Copyright 1990, 1991, 1992, 1994, 1996, 2001, 2002
3*3d8817e4Smiod    Free Software Foundation, Inc.
4*3d8817e4Smiod    Written by Cygnus Support.  Mostly Steve Chamberlain's fault.
5*3d8817e4Smiod 
6*3d8817e4Smiod This file is part of BFD, the Binary File Descriptor library.
7*3d8817e4Smiod 
8*3d8817e4Smiod This program is free software; you can redistribute it and/or modify
9*3d8817e4Smiod it under the terms of the GNU General Public License as published by
10*3d8817e4Smiod the Free Software Foundation; either version 2 of the License, or
11*3d8817e4Smiod (at your option) any later version.
12*3d8817e4Smiod 
13*3d8817e4Smiod This program is distributed in the hope that it will be useful,
14*3d8817e4Smiod but WITHOUT ANY WARRANTY; without even the implied warranty of
15*3d8817e4Smiod MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*3d8817e4Smiod GNU General Public License for more details.
17*3d8817e4Smiod 
18*3d8817e4Smiod You should have received a copy of the GNU General Public License
19*3d8817e4Smiod along with this program; if not, write to the Free Software
20*3d8817e4Smiod Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
21*3d8817e4Smiod 
22*3d8817e4Smiod typedef struct {
23*3d8817e4Smiod   unsigned int index:24;
24*3d8817e4Smiod   char letter;
25*3d8817e4Smiod } ieee_symbol_index_type;
26*3d8817e4Smiod 
27*3d8817e4Smiod typedef struct ct {
28*3d8817e4Smiod   bfd *this;
29*3d8817e4Smiod   struct ct *next;
30*3d8817e4Smiod } bfd_chain_type;
31*3d8817e4Smiod 
32*3d8817e4Smiod typedef struct ieee_symbol
33*3d8817e4Smiod {
34*3d8817e4Smiod   asymbol symbol;
35*3d8817e4Smiod   struct ieee_symbol *next;
36*3d8817e4Smiod 
37*3d8817e4Smiod   unsigned int index;
38*3d8817e4Smiod } ieee_symbol_type;
39*3d8817e4Smiod 
40*3d8817e4Smiod 
41*3d8817e4Smiod typedef struct ieee_reloc {
42*3d8817e4Smiod   arelent relent;
43*3d8817e4Smiod   struct ieee_reloc *next;
44*3d8817e4Smiod   ieee_symbol_index_type symbol;
45*3d8817e4Smiod 
46*3d8817e4Smiod } ieee_reloc_type;
47*3d8817e4Smiod 
48*3d8817e4Smiod #define ieee_symbol(x) ((ieee_symbol_type *)(x))
49*3d8817e4Smiod 
50*3d8817e4Smiod typedef struct ieee_per_section
51*3d8817e4Smiod {
52*3d8817e4Smiod   asection *section;
53*3d8817e4Smiod   bfd_byte *data;
54*3d8817e4Smiod   bfd_vma offset;
55*3d8817e4Smiod   bfd_vma pc;
56*3d8817e4Smiod   /* For output */
57*3d8817e4Smiod   file_ptr current_pos;
58*3d8817e4Smiod   unsigned int current_byte;
59*3d8817e4Smiod   bfd_boolean initialized;
60*3d8817e4Smiod   ieee_reloc_type **reloc_tail_ptr;
61*3d8817e4Smiod } ieee_per_section_type;
62*3d8817e4Smiod 
63*3d8817e4Smiod #define ieee_per_section(x) ((ieee_per_section_type *)((x)->used_by_bfd))
64*3d8817e4Smiod 
65*3d8817e4Smiod typedef struct {
66*3d8817e4Smiod   unsigned char *input_p;
67*3d8817e4Smiod   unsigned char *first_byte;
68*3d8817e4Smiod   unsigned char *last_byte;
69*3d8817e4Smiod   bfd *abfd;
70*3d8817e4Smiod } common_header_type ;
71*3d8817e4Smiod 
72*3d8817e4Smiod typedef struct ieee_data_struct
73*3d8817e4Smiod {
74*3d8817e4Smiod   common_header_type h;
75*3d8817e4Smiod   bfd_boolean read_symbols;
76*3d8817e4Smiod   bfd_boolean read_data;
77*3d8817e4Smiod   file_ptr output_cursor;
78*3d8817e4Smiod   /* Map of section indexes to section ptrs */
79*3d8817e4Smiod   asection **section_table;
80*3d8817e4Smiod   unsigned int section_table_size;
81*3d8817e4Smiod   ieee_address_descriptor_type ad;
82*3d8817e4Smiod   ieee_module_begin_type mb;
83*3d8817e4Smiod   ieee_w_variable_type w;
84*3d8817e4Smiod 
85*3d8817e4Smiod   unsigned int section_count;
86*3d8817e4Smiod 
87*3d8817e4Smiod   unsigned int map_idx;
88*3d8817e4Smiod   /* List of GLOBAL EXPORT symbols */
89*3d8817e4Smiod   ieee_symbol_type *external_symbols;
90*3d8817e4Smiod   /* List of UNDEFINED symbols */
91*3d8817e4Smiod   ieee_symbol_type *external_reference;
92*3d8817e4Smiod 
93*3d8817e4Smiod   /* When the symbols have been canonicalized, they are in a
94*3d8817e4Smiod     * special order, we remember various bases here.. */
95*3d8817e4Smiod   unsigned int external_symbol_max_index;
96*3d8817e4Smiod   unsigned int external_symbol_min_index;
97*3d8817e4Smiod   unsigned int external_symbol_count;
98*3d8817e4Smiod   int external_symbol_base_offset;
99*3d8817e4Smiod 
100*3d8817e4Smiod   unsigned int external_reference_max_index;
101*3d8817e4Smiod   unsigned int external_reference_min_index;
102*3d8817e4Smiod   unsigned int external_reference_count;
103*3d8817e4Smiod   int external_reference_base_offset;
104*3d8817e4Smiod 
105*3d8817e4Smiod 
106*3d8817e4Smiod   bfd_boolean symbol_table_full;
107*3d8817e4Smiod 
108*3d8817e4Smiod 
109*3d8817e4Smiod bfd_boolean done_debug;
110*3d8817e4Smiod 
111*3d8817e4Smiod 
112*3d8817e4Smiod bfd_chain_type *chain_head;
113*3d8817e4Smiod bfd_chain_type *chain_root;
114*3d8817e4Smiod 
115*3d8817e4Smiod } ieee_data_type;
116*3d8817e4Smiod 
117*3d8817e4Smiod typedef struct {
118*3d8817e4Smiod   file_ptr file_offset;
119*3d8817e4Smiod   bfd *abfd;
120*3d8817e4Smiod } ieee_ar_obstack_type;
121*3d8817e4Smiod 
122*3d8817e4Smiod typedef struct ieee_ar_data_struct
123*3d8817e4Smiod {
124*3d8817e4Smiod   common_header_type h;
125*3d8817e4Smiod   ieee_ar_obstack_type *elements;
126*3d8817e4Smiod 
127*3d8817e4Smiod   unsigned  int element_index ;
128*3d8817e4Smiod   unsigned int element_count;
129*3d8817e4Smiod 
130*3d8817e4Smiod } ieee_ar_data_type;
131*3d8817e4Smiod 
132*3d8817e4Smiod #define IEEE_DATA(abfd) ((abfd)->tdata.ieee_data)
133*3d8817e4Smiod #define IEEE_AR_DATA(abfd) ((abfd)->tdata.ieee_ar_data)
134*3d8817e4Smiod 
135*3d8817e4Smiod #define ptr(abfd) (ieee_data(abfd)->input_p)
136