Subversion Repositories Kolibri OS

Rev

Rev 5197 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5197 Rev 6324
1
/* Generic BFD library interface and support routines.
1
/* Generic BFD library interface and support routines.
2
   Copyright 1990-2013 Free Software Foundation, Inc.
2
   Copyright (C) 1990-2015 Free Software Foundation, Inc.
3
   Written by Cygnus Support.
3
   Written by Cygnus Support.
4
 
4
 
5
   This file is part of BFD, the Binary File Descriptor library.
5
   This file is part of BFD, the Binary File Descriptor library.
6
 
6
 
7
   This program is free software; you can redistribute it and/or modify
7
   This program is free software; you can redistribute it and/or modify
8
   it under the terms of the GNU General Public License as published by
8
   it under the terms of the GNU General Public License as published by
9
   the Free Software Foundation; either version 3 of the License, or
9
   the Free Software Foundation; either version 3 of the License, or
10
   (at your option) any later version.
10
   (at your option) any later version.
11
 
11
 
12
   This program is distributed in the hope that it will be useful,
12
   This program is distributed in the hope that it will be useful,
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
   GNU General Public License for more details.
15
   GNU General Public License for more details.
16
 
16
 
17
   You should have received a copy of the GNU General Public License
17
   You should have received a copy of the GNU General Public License
18
   along with this program; if not, write to the Free Software
18
   along with this program; if not, write to the Free Software
19
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20
   MA 02110-1301, USA.  */
20
   MA 02110-1301, USA.  */
21
 
21
 
22
/*
22
/*
23
INODE
23
INODE
24
typedef bfd, Error reporting, BFD front end, BFD front end
24
typedef bfd, Error reporting, BFD front end, BFD front end
25
 
25
 
26
SECTION
26
SECTION
27
	<>
27
	<>
28
 
28
 
29
	A BFD has type <>; objects of this type are the
29
	A BFD has type <>; objects of this type are the
30
	cornerstone of any application using BFD. Using BFD
30
	cornerstone of any application using BFD. Using BFD
31
	consists of making references though the BFD and to data in the BFD.
31
	consists of making references though the BFD and to data in the BFD.
32
 
32
 
33
	Here is the structure that defines the type <>.  It
33
	Here is the structure that defines the type <>.  It
34
	contains the major data about the file and pointers
34
	contains the major data about the file and pointers
35
	to the rest of the data.
35
	to the rest of the data.
36
 
36
 
37
CODE_FRAGMENT
37
CODE_FRAGMENT
38
.
38
.
39
.enum bfd_direction
39
.enum bfd_direction
40
.  {
40
.  {
41
.    no_direction = 0,
41
.    no_direction = 0,
42
.    read_direction = 1,
42
.    read_direction = 1,
43
.    write_direction = 2,
43
.    write_direction = 2,
44
.    both_direction = 3
44
.    both_direction = 3
45
.  };
45
.  };
46
.
46
.
47
.struct bfd
47
.enum bfd_plugin_format
48
.{
48
.  {
49
.  {* A unique identifier of the BFD  *}
49
.    bfd_plugin_uknown = 0,
-
 
50
.    bfd_plugin_yes = 1,
50
.  unsigned int id;
51
.    bfd_plugin_no = 2
-
 
52
.  };
51
.
53
.
-
 
54
.struct bfd_build_id
-
 
55
.  {
-
 
56
.    bfd_size_type size;
-
 
57
.    bfd_byte data[1];
-
 
58
.  };
-
 
59
.
-
 
60
.struct bfd
-
 
61
.{
52
.  {* The filename the application opened the BFD with.  *}
62
.  {* The filename the application opened the BFD with.  *}
53
.  const char *filename;
63
.  const char *filename;
54
.
64
.
55
.  {* A pointer to the target jump table.  *}
65
.  {* A pointer to the target jump table.  *}
56
.  const struct bfd_target *xvec;
66
.  const struct bfd_target *xvec;
57
.
67
.
58
.  {* The IOSTREAM, and corresponding IO vector that provide access
68
.  {* The IOSTREAM, and corresponding IO vector that provide access
59
.     to the file backing the BFD.  *}
69
.     to the file backing the BFD.  *}
60
.  void *iostream;
70
.  void *iostream;
61
.  const struct bfd_iovec *iovec;
71
.  const struct bfd_iovec *iovec;
62
.
72
.
63
.  {* The caching routines use these to maintain a
73
.  {* The caching routines use these to maintain a
64
.     least-recently-used list of BFDs.  *}
74
.     least-recently-used list of BFDs.  *}
65
.  struct bfd *lru_prev, *lru_next;
75
.  struct bfd *lru_prev, *lru_next;
66
.
76
.
67
.  {* When a file is closed by the caching routines, BFD retains
77
.  {* When a file is closed by the caching routines, BFD retains
68
.     state information on the file here...  *}
78
.     state information on the file here...  *}
69
.  ufile_ptr where;
79
.  ufile_ptr where;
70
.
80
.
71
.  {* File modified time, if mtime_set is TRUE.  *}
81
.  {* File modified time, if mtime_set is TRUE.  *}
72
.  long mtime;
82
.  long mtime;
73
.
83
.
74
.  {* Reserved for an unimplemented file locking extension.  *}
84
.  {* A unique identifier of the BFD  *}
75
.  int ifd;
85
.  unsigned int id;
76
.
86
.
77
.  {* The format which belongs to the BFD. (object, core, etc.)  *}
87
.  {* The format which belongs to the BFD. (object, core, etc.)  *}
78
.  bfd_format format;
88
.  ENUM_BITFIELD (bfd_format) format : 3;
79
.
89
.
80
.  {* The direction with which the BFD was opened.  *}
90
.  {* The direction with which the BFD was opened.  *}
81
.  enum bfd_direction direction;
91
.  ENUM_BITFIELD (bfd_direction) direction : 2;
82
.
92
.
83
.  {* Format_specific flags.  *}
93
.  {* Format_specific flags.  *}
84
.  flagword flags;
94
.  flagword flags : 18;
85
.
95
.
86
.  {* Values that may appear in the flags field of a BFD.  These also
96
.  {* Values that may appear in the flags field of a BFD.  These also
87
.     appear in the object_flags field of the bfd_target structure, where
97
.     appear in the object_flags field of the bfd_target structure, where
88
.     they indicate the set of flags used by that backend (not all flags
98
.     they indicate the set of flags used by that backend (not all flags
89
.     are meaningful for all object file formats) (FIXME: at the moment,
99
.     are meaningful for all object file formats) (FIXME: at the moment,
90
.     the object_flags values have mostly just been copied from backend
100
.     the object_flags values have mostly just been copied from backend
91
.     to another, and are not necessarily correct).  *}
101
.     to another, and are not necessarily correct).  *}
92
.
102
.
93
.#define BFD_NO_FLAGS	0x00
103
.#define BFD_NO_FLAGS	0x00
94
.
104
.
95
.  {* BFD contains relocation entries.  *}
105
.  {* BFD contains relocation entries.  *}
96
.#define HAS_RELOC   	0x01
106
.#define HAS_RELOC   	0x01
97
.
107
.
98
.  {* BFD is directly executable.  *}
108
.  {* BFD is directly executable.  *}
99
.#define EXEC_P      	0x02
109
.#define EXEC_P      	0x02
100
.
110
.
101
.  {* BFD has line number information (basically used for F_LNNO in a
111
.  {* BFD has line number information (basically used for F_LNNO in a
102
.     COFF header).  *}
112
.     COFF header).  *}
103
.#define HAS_LINENO  	0x04
113
.#define HAS_LINENO  	0x04
104
.
114
.
105
.  {* BFD has debugging information.  *}
115
.  {* BFD has debugging information.  *}
106
.#define HAS_DEBUG   	0x08
116
.#define HAS_DEBUG   	0x08
107
.
117
.
108
.  {* BFD has symbols.  *}
118
.  {* BFD has symbols.  *}
109
.#define HAS_SYMS    	0x10
119
.#define HAS_SYMS    	0x10
110
.
120
.
111
.  {* BFD has local symbols (basically used for F_LSYMS in a COFF
121
.  {* BFD has local symbols (basically used for F_LSYMS in a COFF
112
.     header).  *}
122
.     header).  *}
113
.#define HAS_LOCALS  	0x20
123
.#define HAS_LOCALS  	0x20
114
.
124
.
115
.  {* BFD is a dynamic object.  *}
125
.  {* BFD is a dynamic object.  *}
116
.#define DYNAMIC     	0x40
126
.#define DYNAMIC     	0x40
117
.
127
.
118
.  {* Text section is write protected (if D_PAGED is not set, this is
128
.  {* Text section is write protected (if D_PAGED is not set, this is
119
.     like an a.out NMAGIC file) (the linker sets this by default, but
129
.     like an a.out NMAGIC file) (the linker sets this by default, but
120
.     clears it for -r or -N).  *}
130
.     clears it for -r or -N).  *}
121
.#define WP_TEXT     	0x80
131
.#define WP_TEXT     	0x80
122
.
132
.
123
.  {* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
133
.  {* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
124
.     linker sets this by default, but clears it for -r or -n or -N).  *}
134
.     linker sets this by default, but clears it for -r or -n or -N).  *}
125
.#define D_PAGED     	0x100
135
.#define D_PAGED     	0x100
126
.
136
.
127
.  {* BFD is relaxable (this means that bfd_relax_section may be able to
137
.  {* BFD is relaxable (this means that bfd_relax_section may be able to
128
.     do something) (sometimes bfd_relax_section can do something even if
138
.     do something) (sometimes bfd_relax_section can do something even if
129
.     this is not set).  *}
139
.     this is not set).  *}
130
.#define BFD_IS_RELAXABLE 0x200
140
.#define BFD_IS_RELAXABLE 0x200
131
.
141
.
132
.  {* This may be set before writing out a BFD to request using a
142
.  {* This may be set before writing out a BFD to request using a
133
.     traditional format.  For example, this is used to request that when
143
.     traditional format.  For example, this is used to request that when
134
.     writing out an a.out object the symbols not be hashed to eliminate
144
.     writing out an a.out object the symbols not be hashed to eliminate
135
.     duplicates.  *}
145
.     duplicates.  *}
136
.#define BFD_TRADITIONAL_FORMAT 0x400
146
.#define BFD_TRADITIONAL_FORMAT 0x400
137
.
147
.
138
.  {* This flag indicates that the BFD contents are actually cached
148
.  {* This flag indicates that the BFD contents are actually cached
139
.     in memory.  If this is set, iostream points to a bfd_in_memory
149
.     in memory.  If this is set, iostream points to a bfd_in_memory
140
.     struct.  *}
150
.     struct.  *}
141
.#define BFD_IN_MEMORY 0x800
151
.#define BFD_IN_MEMORY 0x800
142
.
152
.
143
.  {* The sections in this BFD specify a memory page.  *}
-
 
144
.#define HAS_LOAD_PAGE 0x1000
-
 
145
.
-
 
146
.  {* This BFD has been created by the linker and doesn't correspond
153
.  {* This BFD has been created by the linker and doesn't correspond
147
.     to any input file.  *}
154
.     to any input file.  *}
148
.#define BFD_LINKER_CREATED 0x2000
155
.#define BFD_LINKER_CREATED 0x1000
149
.
156
.
150
.  {* This may be set before writing out a BFD to request that it
157
.  {* This may be set before writing out a BFD to request that it
151
.     be written using values for UIDs, GIDs, timestamps, etc. that
158
.     be written using values for UIDs, GIDs, timestamps, etc. that
152
.     will be consistent from run to run.  *}
159
.     will be consistent from run to run.  *}
153
.#define BFD_DETERMINISTIC_OUTPUT 0x4000
160
.#define BFD_DETERMINISTIC_OUTPUT 0x2000
154
.
161
.
155
.  {* Compress sections in this BFD.  *}
162
.  {* Compress sections in this BFD.  *}
156
.#define BFD_COMPRESS 0x8000
163
.#define BFD_COMPRESS 0x4000
157
.
164
.
158
.  {* Decompress sections in this BFD.  *}
165
.  {* Decompress sections in this BFD.  *}
159
.#define BFD_DECOMPRESS 0x10000
166
.#define BFD_DECOMPRESS 0x8000
160
.
167
.
161
.  {* BFD is a dummy, for plugins.  *}
168
.  {* BFD is a dummy, for plugins.  *}
162
.#define BFD_PLUGIN 0x20000
169
.#define BFD_PLUGIN 0x10000
-
 
170
.
-
 
171
.  {* Compress sections in this BFD with SHF_COMPRESSED from gABI.  *}
-
 
172
.#define BFD_COMPRESS_GABI 0x20000
163
.
173
.
164
.  {* Flags bits to be saved in bfd_preserve_save.  *}
174
.  {* Flags bits to be saved in bfd_preserve_save.  *}
165
.#define BFD_FLAGS_SAVED \
175
.#define BFD_FLAGS_SAVED \
166
.  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN)
176
.  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN \
-
 
177
.   | BFD_COMPRESS_GABI)
167
.
178
.
168
.  {* Flags bits which are for BFD use only.  *}
179
.  {* Flags bits which are for BFD use only.  *}
169
.#define BFD_FLAGS_FOR_BFD_USE_MASK \
180
.#define BFD_FLAGS_FOR_BFD_USE_MASK \
170
.  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
181
.  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
171
.   | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT)
182
.   | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
-
 
183
.   | BFD_COMPRESS_GABI)
-
 
184
.
-
 
185
.  {* Is the file descriptor being cached?  That is, can it be closed as
-
 
186
.     needed, and re-opened when accessed later?  *}
-
 
187
.  unsigned int cacheable : 1;
-
 
188
.
-
 
189
.  {* Marks whether there was a default target specified when the
-
 
190
.     BFD was opened. This is used to select which matching algorithm
-
 
191
.     to use to choose the back end.  *}
-
 
192
.  unsigned int target_defaulted : 1;
-
 
193
.
-
 
194
.  {* ... and here: (``once'' means at least once).  *}
-
 
195
.  unsigned int opened_once : 1;
-
 
196
.
-
 
197
.  {* Set if we have a locally maintained mtime value, rather than
-
 
198
.     getting it from the file each time.  *}
-
 
199
.  unsigned int mtime_set : 1;
-
 
200
.
-
 
201
.  {* Flag set if symbols from this BFD should not be exported.  *}
-
 
202
.  unsigned int no_export : 1;
-
 
203
.
-
 
204
.  {* Remember when output has begun, to stop strange things
-
 
205
.     from happening.  *}
-
 
206
.  unsigned int output_has_begun : 1;
-
 
207
.
-
 
208
.  {* Have archive map.  *}
-
 
209
.  unsigned int has_armap : 1;
-
 
210
.
-
 
211
.  {* Set if this is a thin archive.  *}
-
 
212
.  unsigned int is_thin_archive : 1;
-
 
213
.
-
 
214
.  {* Set if only required symbols should be added in the link hash table for
-
 
215
.     this object.  Used by VMS linkers.  *}
-
 
216
.  unsigned int selective_search : 1;
-
 
217
.
-
 
218
.  {* Set if this is the linker output BFD.  *}
-
 
219
.  unsigned int is_linker_output : 1;
-
 
220
.
-
 
221
.  {* Set if this is the linker input BFD.  *}
-
 
222
.  unsigned int is_linker_input : 1;
-
 
223
.
-
 
224
.  {* If this is an input for a compiler plug-in library.  *}
-
 
225
.  ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2;
-
 
226
.
-
 
227
.  {* Set if this is a plugin output file.  *}
-
 
228
.  unsigned int lto_output : 1;
-
 
229
.
-
 
230
.  {* Set to dummy BFD created when claimed by a compiler plug-in
-
 
231
.     library.  *}
-
 
232
.  bfd *plugin_dummy_bfd;
172
.
233
.
173
.  {* Currently my_archive is tested before adding origin to
234
.  {* Currently my_archive is tested before adding origin to
174
.     anything. I believe that this can become always an add of
235
.     anything. I believe that this can become always an add of
175
.     origin, with origin set to 0 for non archive files.  *}
236
.     origin, with origin set to 0 for non archive files.  *}
176
.  ufile_ptr origin;
237
.  ufile_ptr origin;
177
.
238
.
178
.  {* The origin in the archive of the proxy entry.  This will
239
.  {* The origin in the archive of the proxy entry.  This will
179
.     normally be the same as origin, except for thin archives,
240
.     normally be the same as origin, except for thin archives,
180
.     when it will contain the current offset of the proxy in the
241
.     when it will contain the current offset of the proxy in the
181
.     thin archive rather than the offset of the bfd in its actual
242
.     thin archive rather than the offset of the bfd in its actual
182
.     container.  *}
243
.     container.  *}
183
.  ufile_ptr proxy_origin;
244
.  ufile_ptr proxy_origin;
184
.
245
.
185
.  {* A hash table for section names.  *}
246
.  {* A hash table for section names.  *}
186
.  struct bfd_hash_table section_htab;
247
.  struct bfd_hash_table section_htab;
187
.
248
.
188
.  {* Pointer to linked list of sections.  *}
249
.  {* Pointer to linked list of sections.  *}
189
.  struct bfd_section *sections;
250
.  struct bfd_section *sections;
190
.
251
.
191
.  {* The last section on the section list.  *}
252
.  {* The last section on the section list.  *}
192
.  struct bfd_section *section_last;
253
.  struct bfd_section *section_last;
193
.
254
.
194
.  {* The number of sections.  *}
255
.  {* The number of sections.  *}
195
.  unsigned int section_count;
256
.  unsigned int section_count;
196
.
257
.
-
 
258
.  {* A field used by _bfd_generic_link_add_archive_symbols.  This will
-
 
259
.     be used only for archive elements.  *}
-
 
260
.  int archive_pass;
-
 
261
.
197
.  {* Stuff only useful for object files:
262
.  {* Stuff only useful for object files:
198
.     The start address.  *}
263
.     The start address.  *}
199
.  bfd_vma start_address;
264
.  bfd_vma start_address;
200
.
265
.
201
.  {* Used for input and output.  *}
-
 
202
.  unsigned int symcount;
-
 
203
.
-
 
204
.  {* Symbol table for output BFD (with symcount entries).
266
.  {* Symbol table for output BFD (with symcount entries).
205
.     Also used by the linker to cache input BFD symbols.  *}
267
.     Also used by the linker to cache input BFD symbols.  *}
206
.  struct bfd_symbol  **outsymbols;
268
.  struct bfd_symbol  **outsymbols;
207
.
269
.
-
 
270
.  {* Used for input and output.  *}
-
 
271
.  unsigned int symcount;
-
 
272
.
208
.  {* Used for slurped dynamic symbol tables.  *}
273
.  {* Used for slurped dynamic symbol tables.  *}
209
.  unsigned int dynsymcount;
274
.  unsigned int dynsymcount;
210
.
275
.
211
.  {* Pointer to structure which contains architecture information.  *}
276
.  {* Pointer to structure which contains architecture information.  *}
212
.  const struct bfd_arch_info *arch_info;
277
.  const struct bfd_arch_info *arch_info;
213
.
278
.
214
.  {* Stuff only useful for archives.  *}
279
.  {* Stuff only useful for archives.  *}
215
.  void *arelt_data;
280
.  void *arelt_data;
216
.  struct bfd *my_archive;      {* The containing archive BFD.  *}
281
.  struct bfd *my_archive;      {* The containing archive BFD.  *}
217
.  struct bfd *archive_next;    {* The next BFD in the archive.  *}
282
.  struct bfd *archive_next;    {* The next BFD in the archive.  *}
218
.  struct bfd *archive_head;    {* The first BFD in the archive.  *}
283
.  struct bfd *archive_head;    {* The first BFD in the archive.  *}
219
.  struct bfd *nested_archives; {* List of nested archive in a flattened
284
.  struct bfd *nested_archives; {* List of nested archive in a flattened
220
.                                  thin archive.  *}
285
.                                  thin archive.  *}
221
.
286
.
-
 
287
.  union {
222
.  {* A chain of BFD structures involved in a link.  *}
288
.    {* For input BFDs, a chain of BFDs involved in a link.  *}
223
.  struct bfd *link_next;
289
.    struct bfd *next;
224
.
-
 
225
.  {* A field used by _bfd_generic_link_add_archive_symbols.  This will
290
.    {* For output BFD, the linker hash table.  *}
226
.     be used only for archive elements.  *}
291
.    struct bfd_link_hash_table *hash;
227
.  int archive_pass;
292
.  } link;
228
.
293
.
229
.  {* Used by the back end to hold private data.  *}
294
.  {* Used by the back end to hold private data.  *}
230
.  union
295
.  union
231
.    {
296
.    {
232
.      struct aout_data_struct *aout_data;
297
.      struct aout_data_struct *aout_data;
233
.      struct artdata *aout_ar_data;
298
.      struct artdata *aout_ar_data;
234
.      struct _oasys_data *oasys_obj_data;
299
.      struct _oasys_data *oasys_obj_data;
235
.      struct _oasys_ar_data *oasys_ar_data;
300
.      struct _oasys_ar_data *oasys_ar_data;
236
.      struct coff_tdata *coff_obj_data;
301
.      struct coff_tdata *coff_obj_data;
237
.      struct pe_tdata *pe_obj_data;
302
.      struct pe_tdata *pe_obj_data;
238
.      struct xcoff_tdata *xcoff_obj_data;
303
.      struct xcoff_tdata *xcoff_obj_data;
239
.      struct ecoff_tdata *ecoff_obj_data;
304
.      struct ecoff_tdata *ecoff_obj_data;
240
.      struct ieee_data_struct *ieee_data;
305
.      struct ieee_data_struct *ieee_data;
241
.      struct ieee_ar_data_struct *ieee_ar_data;
306
.      struct ieee_ar_data_struct *ieee_ar_data;
242
.      struct srec_data_struct *srec_data;
307
.      struct srec_data_struct *srec_data;
243
.      struct verilog_data_struct *verilog_data;
308
.      struct verilog_data_struct *verilog_data;
244
.      struct ihex_data_struct *ihex_data;
309
.      struct ihex_data_struct *ihex_data;
245
.      struct tekhex_data_struct *tekhex_data;
310
.      struct tekhex_data_struct *tekhex_data;
246
.      struct elf_obj_tdata *elf_obj_data;
311
.      struct elf_obj_tdata *elf_obj_data;
247
.      struct nlm_obj_tdata *nlm_obj_data;
312
.      struct nlm_obj_tdata *nlm_obj_data;
248
.      struct bout_data_struct *bout_data;
313
.      struct bout_data_struct *bout_data;
249
.      struct mmo_data_struct *mmo_data;
314
.      struct mmo_data_struct *mmo_data;
250
.      struct sun_core_struct *sun_core_data;
315
.      struct sun_core_struct *sun_core_data;
251
.      struct sco5_core_struct *sco5_core_data;
316
.      struct sco5_core_struct *sco5_core_data;
252
.      struct trad_core_struct *trad_core_data;
317
.      struct trad_core_struct *trad_core_data;
253
.      struct som_data_struct *som_data;
318
.      struct som_data_struct *som_data;
254
.      struct hpux_core_struct *hpux_core_data;
319
.      struct hpux_core_struct *hpux_core_data;
255
.      struct hppabsd_core_struct *hppabsd_core_data;
320
.      struct hppabsd_core_struct *hppabsd_core_data;
256
.      struct sgi_core_struct *sgi_core_data;
321
.      struct sgi_core_struct *sgi_core_data;
257
.      struct lynx_core_struct *lynx_core_data;
322
.      struct lynx_core_struct *lynx_core_data;
258
.      struct osf_core_struct *osf_core_data;
323
.      struct osf_core_struct *osf_core_data;
259
.      struct cisco_core_struct *cisco_core_data;
324
.      struct cisco_core_struct *cisco_core_data;
260
.      struct versados_data_struct *versados_data;
325
.      struct versados_data_struct *versados_data;
261
.      struct netbsd_core_struct *netbsd_core_data;
326
.      struct netbsd_core_struct *netbsd_core_data;
262
.      struct mach_o_data_struct *mach_o_data;
327
.      struct mach_o_data_struct *mach_o_data;
263
.      struct mach_o_fat_data_struct *mach_o_fat_data;
328
.      struct mach_o_fat_data_struct *mach_o_fat_data;
264
.      struct plugin_data_struct *plugin_data;
329
.      struct plugin_data_struct *plugin_data;
265
.      struct bfd_pef_data_struct *pef_data;
330
.      struct bfd_pef_data_struct *pef_data;
266
.      struct bfd_pef_xlib_data_struct *pef_xlib_data;
331
.      struct bfd_pef_xlib_data_struct *pef_xlib_data;
267
.      struct bfd_sym_data_struct *sym_data;
332
.      struct bfd_sym_data_struct *sym_data;
268
.      void *any;
333
.      void *any;
269
.    }
334
.    }
270
.  tdata;
335
.  tdata;
271
.
336
.
272
.  {* Used by the application to hold private data.  *}
337
.  {* Used by the application to hold private data.  *}
273
.  void *usrdata;
338
.  void *usrdata;
274
.
339
.
275
.  {* Where all the allocated stuff under this BFD goes.  This is a
340
.  {* Where all the allocated stuff under this BFD goes.  This is a
276
.     struct objalloc *, but we use void * to avoid requiring the inclusion
341
.     struct objalloc *, but we use void * to avoid requiring the inclusion
277
.     of objalloc.h.  *}
342
.     of objalloc.h.  *}
278
.  void *memory;
343
.  void *memory;
279
.
344
.
280
.  {* Is the file descriptor being cached?  That is, can it be closed as
-
 
281
.     needed, and re-opened when accessed later?  *}
-
 
282
.  unsigned int cacheable : 1;
-
 
283
.
-
 
284
.  {* Marks whether there was a default target specified when the
-
 
285
.     BFD was opened. This is used to select which matching algorithm
-
 
286
.     to use to choose the back end.  *}
-
 
287
.  unsigned int target_defaulted : 1;
-
 
288
.
-
 
289
.  {* ... and here: (``once'' means at least once).  *}
345
.  {* For input BFDs, the build ID, if the object has one. *}
290
.  unsigned int opened_once : 1;
-
 
291
.
-
 
292
.  {* Set if we have a locally maintained mtime value, rather than
-
 
293
.     getting it from the file each time.  *}
-
 
294
.  unsigned int mtime_set : 1;
-
 
295
.
-
 
296
.  {* Flag set if symbols from this BFD should not be exported.  *}
-
 
297
.  unsigned int no_export : 1;
-
 
298
.
-
 
299
.  {* Remember when output has begun, to stop strange things
-
 
300
.     from happening.  *}
-
 
301
.  unsigned int output_has_begun : 1;
-
 
302
.
-
 
303
.  {* Have archive map.  *}
-
 
304
.  unsigned int has_armap : 1;
-
 
305
.
-
 
306
.  {* Set if this is a thin archive.  *}
-
 
307
.  unsigned int is_thin_archive : 1;
346
.  const struct bfd_build_id *build_id;
308
.
-
 
309
.  {* Set if only required symbols should be added in the link hash table for
-
 
310
.     this object.  Used by VMS linkers.  *}
-
 
311
.  unsigned int selective_search : 1;
-
 
312
.};
347
.};
313
.
348
.
-
 
349
.{* See note beside bfd_set_section_userdata.  *}
-
 
350
.static inline bfd_boolean
-
 
351
.bfd_set_cacheable (bfd * abfd, bfd_boolean val)
-
 
352
.{
-
 
353
.  abfd->cacheable = val;
-
 
354
.  return TRUE;
-
 
355
.}
-
 
356
.
314
*/
357
*/
315
 
358
 
316
#include "sysdep.h"
359
#include "sysdep.h"
317
#include 
360
#include 
318
#include "bfd.h"
361
#include "bfd.h"
319
#include "bfdver.h"
362
#include "bfdver.h"
320
#include "libiberty.h"
363
#include "libiberty.h"
321
#include "demangle.h"
364
#include "demangle.h"
322
#include "safe-ctype.h"
365
#include "safe-ctype.h"
323
#include "bfdlink.h"
366
#include "bfdlink.h"
324
#include "libbfd.h"
367
#include "libbfd.h"
325
#include "coff/internal.h"
368
#include "coff/internal.h"
326
#include "coff/sym.h"
369
#include "coff/sym.h"
327
#include "libcoff.h"
370
#include "libcoff.h"
328
#include "libecoff.h"
371
#include "libecoff.h"
329
#undef obj_symbols
372
#undef obj_symbols
330
#include "elf-bfd.h"
373
#include "elf-bfd.h"
331
 
374
 
332
#ifndef EXIT_FAILURE
375
#ifndef EXIT_FAILURE
333
#define EXIT_FAILURE 1
376
#define EXIT_FAILURE 1
334
#endif
377
#endif
335
 
378
 
336

379

337
/* provide storage for subsystem, stack and heap data which may have been
380
/* provide storage for subsystem, stack and heap data which may have been
338
   passed in on the command line.  Ld puts this data into a bfd_link_info
381
   passed in on the command line.  Ld puts this data into a bfd_link_info
339
   struct which ultimately gets passed in to the bfd.  When it arrives, copy
382
   struct which ultimately gets passed in to the bfd.  When it arrives, copy
340
   it to the following struct so that the data will be available in coffcode.h
383
   it to the following struct so that the data will be available in coffcode.h
341
   where it is needed.  The typedef's used are defined in bfd.h */
384
   where it is needed.  The typedef's used are defined in bfd.h */
342

385

343
/*
386
/*
344
INODE
387
INODE
345
Error reporting, Miscellaneous, typedef bfd, BFD front end
388
Error reporting, Miscellaneous, typedef bfd, BFD front end
346
 
389
 
347
SECTION
390
SECTION
348
	Error reporting
391
	Error reporting
349
 
392
 
350
	Most BFD functions return nonzero on success (check their
393
	Most BFD functions return nonzero on success (check their
351
	individual documentation for precise semantics).  On an error,
394
	individual documentation for precise semantics).  On an error,
352
	they call <> to set an error condition that callers
395
	they call <> to set an error condition that callers
353
	can check by calling <>.
396
	can check by calling <>.
354
        If that returns <>, then check
397
        If that returns <>, then check
355
	<>.
398
	<>.
356
 
399
 
357
	The easiest way to report a BFD error to the user is to
400
	The easiest way to report a BFD error to the user is to
358
	use <>.
401
	use <>.
359
 
402
 
360
SUBSECTION
403
SUBSECTION
361
	Type <>
404
	Type <>
362
 
405
 
363
	The values returned by <> are defined by the
406
	The values returned by <> are defined by the
364
	enumerated type <>.
407
	enumerated type <>.
365
 
408
 
366
CODE_FRAGMENT
409
CODE_FRAGMENT
367
.
410
.
368
.typedef enum bfd_error
411
.typedef enum bfd_error
369
.{
412
.{
370
.  bfd_error_no_error = 0,
413
.  bfd_error_no_error = 0,
371
.  bfd_error_system_call,
414
.  bfd_error_system_call,
372
.  bfd_error_invalid_target,
415
.  bfd_error_invalid_target,
373
.  bfd_error_wrong_format,
416
.  bfd_error_wrong_format,
374
.  bfd_error_wrong_object_format,
417
.  bfd_error_wrong_object_format,
375
.  bfd_error_invalid_operation,
418
.  bfd_error_invalid_operation,
376
.  bfd_error_no_memory,
419
.  bfd_error_no_memory,
377
.  bfd_error_no_symbols,
420
.  bfd_error_no_symbols,
378
.  bfd_error_no_armap,
421
.  bfd_error_no_armap,
379
.  bfd_error_no_more_archived_files,
422
.  bfd_error_no_more_archived_files,
380
.  bfd_error_malformed_archive,
423
.  bfd_error_malformed_archive,
381
.  bfd_error_missing_dso,
424
.  bfd_error_missing_dso,
382
.  bfd_error_file_not_recognized,
425
.  bfd_error_file_not_recognized,
383
.  bfd_error_file_ambiguously_recognized,
426
.  bfd_error_file_ambiguously_recognized,
384
.  bfd_error_no_contents,
427
.  bfd_error_no_contents,
385
.  bfd_error_nonrepresentable_section,
428
.  bfd_error_nonrepresentable_section,
386
.  bfd_error_no_debug_section,
429
.  bfd_error_no_debug_section,
387
.  bfd_error_bad_value,
430
.  bfd_error_bad_value,
388
.  bfd_error_file_truncated,
431
.  bfd_error_file_truncated,
389
.  bfd_error_file_too_big,
432
.  bfd_error_file_too_big,
390
.  bfd_error_on_input,
433
.  bfd_error_on_input,
391
.  bfd_error_invalid_error_code
434
.  bfd_error_invalid_error_code
392
.}
435
.}
393
.bfd_error_type;
436
.bfd_error_type;
394
.
437
.
395
*/
438
*/
396
 
439
 
397
static bfd_error_type bfd_error = bfd_error_no_error;
440
static bfd_error_type bfd_error = bfd_error_no_error;
398
static bfd *input_bfd = NULL;
441
static bfd *input_bfd = NULL;
399
static bfd_error_type input_error = bfd_error_no_error;
442
static bfd_error_type input_error = bfd_error_no_error;
400
 
443
 
401
const char *const bfd_errmsgs[] =
444
const char *const bfd_errmsgs[] =
402
{
445
{
403
  N_("No error"),
446
  N_("No error"),
404
  N_("System call error"),
447
  N_("System call error"),
405
  N_("Invalid bfd target"),
448
  N_("Invalid bfd target"),
406
  N_("File in wrong format"),
449
  N_("File in wrong format"),
407
  N_("Archive object file in wrong format"),
450
  N_("Archive object file in wrong format"),
408
  N_("Invalid operation"),
451
  N_("Invalid operation"),
409
  N_("Memory exhausted"),
452
  N_("Memory exhausted"),
410
  N_("No symbols"),
453
  N_("No symbols"),
411
  N_("Archive has no index; run ranlib to add one"),
454
  N_("Archive has no index; run ranlib to add one"),
412
  N_("No more archived files"),
455
  N_("No more archived files"),
413
  N_("Malformed archive"),
456
  N_("Malformed archive"),
414
  N_("DSO missing from command line"),
457
  N_("DSO missing from command line"),
415
  N_("File format not recognized"),
458
  N_("File format not recognized"),
416
  N_("File format is ambiguous"),
459
  N_("File format is ambiguous"),
417
  N_("Section has no contents"),
460
  N_("Section has no contents"),
418
  N_("Nonrepresentable section on output"),
461
  N_("Nonrepresentable section on output"),
419
  N_("Symbol needs debug section which does not exist"),
462
  N_("Symbol needs debug section which does not exist"),
420
  N_("Bad value"),
463
  N_("Bad value"),
421
  N_("File truncated"),
464
  N_("File truncated"),
422
  N_("File too big"),
465
  N_("File too big"),
423
  N_("Error reading %s: %s"),
466
  N_("Error reading %s: %s"),
424
  N_("#")
467
  N_("#")
425
};
468
};
426
 
469
 
427
/*
470
/*
428
FUNCTION
471
FUNCTION
429
	bfd_get_error
472
	bfd_get_error
430
 
473
 
431
SYNOPSIS
474
SYNOPSIS
432
	bfd_error_type bfd_get_error (void);
475
	bfd_error_type bfd_get_error (void);
433
 
476
 
434
DESCRIPTION
477
DESCRIPTION
435
	Return the current BFD error condition.
478
	Return the current BFD error condition.
436
*/
479
*/
437
 
480
 
438
bfd_error_type
481
bfd_error_type
439
bfd_get_error (void)
482
bfd_get_error (void)
440
{
483
{
441
  return bfd_error;
484
  return bfd_error;
442
}
485
}
443
 
486
 
444
/*
487
/*
445
FUNCTION
488
FUNCTION
446
	bfd_set_error
489
	bfd_set_error
447
 
490
 
448
SYNOPSIS
491
SYNOPSIS
449
	void bfd_set_error (bfd_error_type error_tag, ...);
492
	void bfd_set_error (bfd_error_type error_tag, ...);
450
 
493
 
451
DESCRIPTION
494
DESCRIPTION
452
	Set the BFD error condition to be @var{error_tag}.
495
	Set the BFD error condition to be @var{error_tag}.
453
	If @var{error_tag} is bfd_error_on_input, then this function
496
	If @var{error_tag} is bfd_error_on_input, then this function
454
	takes two more parameters, the input bfd where the error
497
	takes two more parameters, the input bfd where the error
455
	occurred, and the bfd_error_type error.
498
	occurred, and the bfd_error_type error.
456
*/
499
*/
457
 
500
 
458
void
501
void
459
bfd_set_error (bfd_error_type error_tag, ...)
502
bfd_set_error (bfd_error_type error_tag, ...)
460
{
503
{
461
  bfd_error = error_tag;
504
  bfd_error = error_tag;
462
  if (error_tag == bfd_error_on_input)
505
  if (error_tag == bfd_error_on_input)
463
    {
506
    {
464
      /* This is an error that occurred during bfd_close when
507
      /* This is an error that occurred during bfd_close when
465
	 writing an archive, but on one of the input files.  */
508
	 writing an archive, but on one of the input files.  */
466
      va_list ap;
509
      va_list ap;
467
 
510
 
468
      va_start (ap, error_tag);
511
      va_start (ap, error_tag);
469
      input_bfd = va_arg (ap, bfd *);
512
      input_bfd = va_arg (ap, bfd *);
470
      input_error = (bfd_error_type) va_arg (ap, int);
513
      input_error = (bfd_error_type) va_arg (ap, int);
471
      if (input_error >= bfd_error_on_input)
514
      if (input_error >= bfd_error_on_input)
472
	abort ();
515
	abort ();
473
      va_end (ap);
516
      va_end (ap);
474
    }
517
    }
475
}
518
}
476
 
519
 
477
/*
520
/*
478
FUNCTION
521
FUNCTION
479
	bfd_errmsg
522
	bfd_errmsg
480
 
523
 
481
SYNOPSIS
524
SYNOPSIS
482
	const char *bfd_errmsg (bfd_error_type error_tag);
525
	const char *bfd_errmsg (bfd_error_type error_tag);
483
 
526
 
484
DESCRIPTION
527
DESCRIPTION
485
	Return a string describing the error @var{error_tag}, or
528
	Return a string describing the error @var{error_tag}, or
486
	the system error if @var{error_tag} is <>.
529
	the system error if @var{error_tag} is <>.
487
*/
530
*/
488
 
531
 
489
const char *
532
const char *
490
bfd_errmsg (bfd_error_type error_tag)
533
bfd_errmsg (bfd_error_type error_tag)
491
{
534
{
492
#ifndef errno
535
#ifndef errno
493
  extern int errno;
536
  extern int errno;
494
#endif
537
#endif
495
  if (error_tag == bfd_error_on_input)
538
  if (error_tag == bfd_error_on_input)
496
    {
539
    {
497
      char *buf;
540
      char *buf;
498
      const char *msg = bfd_errmsg (input_error);
541
      const char *msg = bfd_errmsg (input_error);
499
 
542
 
500
      if (asprintf (&buf, _(bfd_errmsgs [error_tag]), input_bfd->filename, msg)
543
      if (asprintf (&buf, _(bfd_errmsgs [error_tag]), input_bfd->filename, msg)
501
	  != -1)
544
	  != -1)
502
	return buf;
545
	return buf;
503
 
546
 
504
      /* Ick, what to do on out of memory?  */
547
      /* Ick, what to do on out of memory?  */
505
      return msg;
548
      return msg;
506
    }
549
    }
507
 
550
 
508
  if (error_tag == bfd_error_system_call)
551
  if (error_tag == bfd_error_system_call)
509
    return xstrerror (errno);
552
    return xstrerror (errno);
510
 
553
 
511
  if (error_tag > bfd_error_invalid_error_code)
554
  if (error_tag > bfd_error_invalid_error_code)
512
    error_tag = bfd_error_invalid_error_code;	/* sanity check */
555
    error_tag = bfd_error_invalid_error_code;	/* sanity check */
513
 
556
 
514
  return _(bfd_errmsgs [error_tag]);
557
  return _(bfd_errmsgs [error_tag]);
515
}
558
}
516
 
559
 
517
/*
560
/*
518
FUNCTION
561
FUNCTION
519
	bfd_perror
562
	bfd_perror
520
 
563
 
521
SYNOPSIS
564
SYNOPSIS
522
	void bfd_perror (const char *message);
565
	void bfd_perror (const char *message);
523
 
566
 
524
DESCRIPTION
567
DESCRIPTION
525
	Print to the standard error stream a string describing the
568
	Print to the standard error stream a string describing the
526
	last BFD error that occurred, or the last system error if
569
	last BFD error that occurred, or the last system error if
527
	the last BFD error was a system call failure.  If @var{message}
570
	the last BFD error was a system call failure.  If @var{message}
528
	is non-NULL and non-empty, the error string printed is preceded
571
	is non-NULL and non-empty, the error string printed is preceded
529
	by @var{message}, a colon, and a space.  It is followed by a newline.
572
	by @var{message}, a colon, and a space.  It is followed by a newline.
530
*/
573
*/
531
 
574
 
532
void
575
void
533
bfd_perror (const char *message)
576
bfd_perror (const char *message)
534
{
577
{
535
  fflush (stdout);
578
  fflush (stdout);
536
  if (message == NULL || *message == '\0')
579
  if (message == NULL || *message == '\0')
537
    fprintf (stderr, "%s\n", bfd_errmsg (bfd_get_error ()));
580
    fprintf (stderr, "%s\n", bfd_errmsg (bfd_get_error ()));
538
  else
581
  else
539
    fprintf (stderr, "%s: %s\n", message, bfd_errmsg (bfd_get_error ()));
582
    fprintf (stderr, "%s: %s\n", message, bfd_errmsg (bfd_get_error ()));
540
  fflush (stderr);
583
  fflush (stderr);
541
}
584
}
542
 
585
 
543
/*
586
/*
544
SUBSECTION
587
SUBSECTION
545
	BFD error handler
588
	BFD error handler
546
 
589
 
547
	Some BFD functions want to print messages describing the
590
	Some BFD functions want to print messages describing the
548
	problem.  They call a BFD error handler function.  This
591
	problem.  They call a BFD error handler function.  This
549
	function may be overridden by the program.
592
	function may be overridden by the program.
550
 
593
 
551
	The BFD error handler acts like printf.
594
	The BFD error handler acts like printf.
552
 
595
 
553
CODE_FRAGMENT
596
CODE_FRAGMENT
554
.
597
.
555
.typedef void (*bfd_error_handler_type) (const char *, ...);
598
.typedef void (*bfd_error_handler_type) (const char *, ...);
556
.
599
.
557
*/
600
*/
558
 
601
 
559
/* The program name used when printing BFD error messages.  */
602
/* The program name used when printing BFD error messages.  */
560
 
603
 
561
static const char *_bfd_error_program_name;
604
static const char *_bfd_error_program_name;
562
 
605
 
563
/* This is the default routine to handle BFD error messages.
606
/* This is the default routine to handle BFD error messages.
564
   Like fprintf (stderr, ...), but also handles some extra format specifiers.
607
   Like fprintf (stderr, ...), but also handles some extra format specifiers.
565
 
608
 
566
   %A section name from section.  For group components, print group name too.
609
   %A section name from section.  For group components, print group name too.
567
   %B file name from bfd.  For archive components, prints archive too.
610
   %B file name from bfd.  For archive components, prints archive too.
568
 
611
 
569
   Note - because these two extra format specifiers require special handling
612
   Note - because these two extra format specifiers require special handling
570
   they are scanned for and processed in this function, before calling
613
   they are scanned for and processed in this function, before calling
571
   vfprintf.  This means that the *arguments* for these format specifiers
614
   vfprintf.  This means that the *arguments* for these format specifiers
572
   must be the first ones in the variable argument list, regardless of where
615
   must be the first ones in the variable argument list, regardless of where
573
   the specifiers appear in the format string.  Thus for example calling
616
   the specifiers appear in the format string.  Thus for example calling
574
   this function with a format string of:
617
   this function with a format string of:
575
 
618
 
576
      "blah %s blah %A blah %d blah %B"
619
      "blah %s blah %A blah %d blah %B"
577
 
620
 
578
   would involve passing the arguments as:
621
   would involve passing the arguments as:
579
 
622
 
580
      "blah %s blah %A blah %d blah %B",
623
      "blah %s blah %A blah %d blah %B",
581
        asection_for_the_%A,
624
        asection_for_the_%A,
582
	bfd_for_the_%B,
625
	bfd_for_the_%B,
583
	string_for_the_%s,
626
	string_for_the_%s,
584
	integer_for_the_%d);
627
	integer_for_the_%d);
585
 */
628
 */
586
 
629
 
587
void
630
void
588
_bfd_default_error_handler (const char *fmt, ...)
631
_bfd_default_error_handler (const char *fmt, ...)
589
{
632
{
590
  va_list ap;
633
  va_list ap;
591
  char *bufp;
634
  char *bufp;
592
  const char *new_fmt, *p;
635
  const char *new_fmt, *p;
593
  size_t avail = 1000;
636
  size_t avail = 1000;
594
  char buf[1000];
637
  char buf[1000];
595
 
638
 
596
  /* PR 4992: Don't interrupt output being sent to stdout.  */
639
  /* PR 4992: Don't interrupt output being sent to stdout.  */
597
  fflush (stdout);
640
  fflush (stdout);
598
 
641
 
599
  if (_bfd_error_program_name != NULL)
642
  if (_bfd_error_program_name != NULL)
600
    fprintf (stderr, "%s: ", _bfd_error_program_name);
643
    fprintf (stderr, "%s: ", _bfd_error_program_name);
601
  else
644
  else
602
    fprintf (stderr, "BFD: ");
645
    fprintf (stderr, "BFD: ");
603
 
646
 
604
  va_start (ap, fmt);
647
  va_start (ap, fmt);
605
  new_fmt = fmt;
648
  new_fmt = fmt;
606
  bufp = buf;
649
  bufp = buf;
607
 
650
 
608
  /* Reserve enough space for the existing format string.  */
651
  /* Reserve enough space for the existing format string.  */
609
  avail -= strlen (fmt) + 1;
652
  avail -= strlen (fmt) + 1;
610
  if (avail > 1000)
653
  if (avail > 1000)
611
    _exit (EXIT_FAILURE);
654
    _exit (EXIT_FAILURE);
612
 
655
 
613
  p = fmt;
656
  p = fmt;
614
  while (1)
657
  while (1)
615
    {
658
    {
616
      char *q;
659
      char *q;
617
      size_t len, extra, trim;
660
      size_t len, extra, trim;
618
 
661
 
619
      p = strchr (p, '%');
662
      p = strchr (p, '%');
620
      if (p == NULL || p[1] == '\0')
663
      if (p == NULL || p[1] == '\0')
621
	{
664
	{
622
	  if (new_fmt == buf)
665
	  if (new_fmt == buf)
623
	    {
666
	    {
624
	      len = strlen (fmt);
667
	      len = strlen (fmt);
625
	      memcpy (bufp, fmt, len + 1);
668
	      memcpy (bufp, fmt, len + 1);
626
	    }
669
	    }
627
	  break;
670
	  break;
628
	}
671
	}
629
 
672
 
630
      if (p[1] == 'A' || p[1] == 'B')
673
      if (p[1] == 'A' || p[1] == 'B')
631
	{
674
	{
632
	  len = p - fmt;
675
	  len = p - fmt;
633
	  memcpy (bufp, fmt, len);
676
	  memcpy (bufp, fmt, len);
634
	  bufp += len;
677
	  bufp += len;
635
	  fmt = p + 2;
678
	  fmt = p + 2;
636
	  new_fmt = buf;
679
	  new_fmt = buf;
637
 
680
 
638
	  /* If we run out of space, tough, you lose your ridiculously
681
	  /* If we run out of space, tough, you lose your ridiculously
639
	     long file or section name.  It's not safe to try to alloc
682
	     long file or section name.  It's not safe to try to alloc
640
	     memory here;  We might be printing an out of memory message.  */
683
	     memory here;  We might be printing an out of memory message.  */
641
	  if (avail == 0)
684
	  if (avail == 0)
642
	    {
685
	    {
643
	      *bufp++ = '*';
686
	      *bufp++ = '*';
644
	      *bufp++ = '*';
687
	      *bufp++ = '*';
645
	      *bufp = '\0';
688
	      *bufp = '\0';
646
	    }
689
	    }
647
	  else
690
	  else
648
	    {
691
	    {
649
	      if (p[1] == 'B')
692
	      if (p[1] == 'B')
650
		{
693
		{
651
		  bfd *abfd = va_arg (ap, bfd *);
694
		  bfd *abfd = va_arg (ap, bfd *);
652
 
695
 
653
		  if (abfd == NULL)
696
		  if (abfd == NULL)
654
		    /* Invoking %B with a null bfd pointer is an internal error.  */
697
		    /* Invoking %B with a null bfd pointer is an internal error.  */
655
		    abort ();
698
		    abort ();
656
		  else if (abfd->my_archive)
699
		  else if (abfd->my_archive)
657
		    snprintf (bufp, avail, "%s(%s)",
700
		    snprintf (bufp, avail, "%s(%s)",
658
			      abfd->my_archive->filename, abfd->filename);
701
			      abfd->my_archive->filename, abfd->filename);
659
		  else
702
		  else
660
		    snprintf (bufp, avail, "%s", abfd->filename);
703
		    snprintf (bufp, avail, "%s", abfd->filename);
661
		}
704
		}
662
	      else
705
	      else
663
		{
706
		{
664
		  asection *sec = va_arg (ap, asection *);
707
		  asection *sec = va_arg (ap, asection *);
665
		  bfd *abfd;
708
		  bfd *abfd;
666
		  const char *group = NULL;
709
		  const char *group = NULL;
667
		  struct coff_comdat_info *ci;
710
		  struct coff_comdat_info *ci;
668
 
711
 
669
		  if (sec == NULL)
712
		  if (sec == NULL)
670
		    /* Invoking %A with a null section pointer is an internal error.  */
713
		    /* Invoking %A with a null section pointer is an internal error.  */
671
		    abort ();
714
		    abort ();
672
		  abfd = sec->owner;
715
		  abfd = sec->owner;
673
		  if (abfd != NULL
716
		  if (abfd != NULL
674
		      && bfd_get_flavour (abfd) == bfd_target_elf_flavour
717
		      && bfd_get_flavour (abfd) == bfd_target_elf_flavour
675
		      && elf_next_in_group (sec) != NULL
718
		      && elf_next_in_group (sec) != NULL
676
		      && (sec->flags & SEC_GROUP) == 0)
719
		      && (sec->flags & SEC_GROUP) == 0)
677
		    group = elf_group_name (sec);
720
		    group = elf_group_name (sec);
678
		  else if (abfd != NULL
721
		  else if (abfd != NULL
679
			   && bfd_get_flavour (abfd) == bfd_target_coff_flavour
722
			   && bfd_get_flavour (abfd) == bfd_target_coff_flavour
680
			   && (ci = bfd_coff_get_comdat_section (sec->owner,
723
			   && (ci = bfd_coff_get_comdat_section (sec->owner,
681
								 sec)) != NULL)
724
								 sec)) != NULL)
682
		    group = ci->name;
725
		    group = ci->name;
683
		  if (group != NULL)
726
		  if (group != NULL)
684
		    snprintf (bufp, avail, "%s[%s]", sec->name, group);
727
		    snprintf (bufp, avail, "%s[%s]", sec->name, group);
685
		  else
728
		  else
686
		    snprintf (bufp, avail, "%s", sec->name);
729
		    snprintf (bufp, avail, "%s", sec->name);
687
		}
730
		}
688
	      len = strlen (bufp);
731
	      len = strlen (bufp);
689
	      avail = avail - len + 2;
732
	      avail = avail - len + 2;
690
 
733
 
691
	      /* We need to replace any '%' we printed by "%%".
734
	      /* We need to replace any '%' we printed by "%%".
692
		 First count how many.  */
735
		 First count how many.  */
693
	      q = bufp;
736
	      q = bufp;
694
	      bufp += len;
737
	      bufp += len;
695
	      extra = 0;
738
	      extra = 0;
696
	      while ((q = strchr (q, '%')) != NULL)
739
	      while ((q = strchr (q, '%')) != NULL)
697
		{
740
		{
698
		  ++q;
741
		  ++q;
699
		  ++extra;
742
		  ++extra;
700
		}
743
		}
701
 
744
 
702
	      /* If there isn't room, trim off the end of the string.  */
745
	      /* If there isn't room, trim off the end of the string.  */
703
	      q = bufp;
746
	      q = bufp;
704
	      bufp += extra;
747
	      bufp += extra;
705
	      if (extra > avail)
748
	      if (extra > avail)
706
		{
749
		{
707
		  trim = extra - avail;
750
		  trim = extra - avail;
708
		  bufp -= trim;
751
		  bufp -= trim;
709
		  do
752
		  do
710
		    {
753
		    {
711
		      if (*--q == '%')
754
		      if (*--q == '%')
712
			--extra;
755
			--extra;
713
		    }
756
		    }
714
		  while (--trim != 0);
757
		  while (--trim != 0);
715
		  *q = '\0';
758
		  *q = '\0';
716
		  avail = extra;
759
		  avail = extra;
717
		}
760
		}
718
	      avail -= extra;
761
	      avail -= extra;
719
 
762
 
720
	      /* Now double all '%' chars, shuffling the string as we go.  */
763
	      /* Now double all '%' chars, shuffling the string as we go.  */
721
	      while (extra != 0)
764
	      while (extra != 0)
722
		{
765
		{
723
		  while ((q[extra] = *q) != '%')
766
		  while ((q[extra] = *q) != '%')
724
		    --q;
767
		    --q;
725
		  q[--extra] = '%';
768
		  q[--extra] = '%';
726
		  --q;
769
		  --q;
727
		}
770
		}
728
	    }
771
	    }
729
	}
772
	}
730
      p = p + 2;
773
      p = p + 2;
731
    }
774
    }
732
 
775
 
733
  vfprintf (stderr, new_fmt, ap);
776
  vfprintf (stderr, new_fmt, ap);
734
  va_end (ap);
777
  va_end (ap);
735
 
778
 
736
  /* On AIX, putc is implemented as a macro that triggers a -Wunused-value
779
  /* On AIX, putc is implemented as a macro that triggers a -Wunused-value
737
     warning, so use the fputc function to avoid it.  */
780
     warning, so use the fputc function to avoid it.  */
738
  fputc ('\n', stderr);
781
  fputc ('\n', stderr);
739
  fflush (stderr);
782
  fflush (stderr);
740
}
783
}
741
 
784
 
742
/* This is a function pointer to the routine which should handle BFD
785
/* This is a function pointer to the routine which should handle BFD
743
   error messages.  It is called when a BFD routine encounters an
786
   error messages.  It is called when a BFD routine encounters an
744
   error for which it wants to print a message.  Going through a
787
   error for which it wants to print a message.  Going through a
745
   function pointer permits a program linked against BFD to intercept
788
   function pointer permits a program linked against BFD to intercept
746
   the messages and deal with them itself.  */
789
   the messages and deal with them itself.  */
747
 
790
 
748
bfd_error_handler_type _bfd_error_handler = _bfd_default_error_handler;
791
bfd_error_handler_type _bfd_error_handler = _bfd_default_error_handler;
749
 
792
 
750
/*
793
/*
751
FUNCTION
794
FUNCTION
752
	bfd_set_error_handler
795
	bfd_set_error_handler
753
 
796
 
754
SYNOPSIS
797
SYNOPSIS
755
	bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
798
	bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
756
 
799
 
757
DESCRIPTION
800
DESCRIPTION
758
	Set the BFD error handler function.  Returns the previous
801
	Set the BFD error handler function.  Returns the previous
759
	function.
802
	function.
760
*/
803
*/
761
 
804
 
762
bfd_error_handler_type
805
bfd_error_handler_type
763
bfd_set_error_handler (bfd_error_handler_type pnew)
806
bfd_set_error_handler (bfd_error_handler_type pnew)
764
{
807
{
765
  bfd_error_handler_type pold;
808
  bfd_error_handler_type pold;
766
 
809
 
767
  pold = _bfd_error_handler;
810
  pold = _bfd_error_handler;
768
  _bfd_error_handler = pnew;
811
  _bfd_error_handler = pnew;
769
  return pold;
812
  return pold;
770
}
813
}
771
 
814
 
772
/*
815
/*
773
FUNCTION
816
FUNCTION
774
	bfd_set_error_program_name
817
	bfd_set_error_program_name
775
 
818
 
776
SYNOPSIS
819
SYNOPSIS
777
	void bfd_set_error_program_name (const char *);
820
	void bfd_set_error_program_name (const char *);
778
 
821
 
779
DESCRIPTION
822
DESCRIPTION
780
	Set the program name to use when printing a BFD error.  This
823
	Set the program name to use when printing a BFD error.  This
781
	is printed before the error message followed by a colon and
824
	is printed before the error message followed by a colon and
782
	space.  The string must not be changed after it is passed to
825
	space.  The string must not be changed after it is passed to
783
	this function.
826
	this function.
784
*/
827
*/
785
 
828
 
786
void
829
void
787
bfd_set_error_program_name (const char *name)
830
bfd_set_error_program_name (const char *name)
788
{
831
{
789
  _bfd_error_program_name = name;
832
  _bfd_error_program_name = name;
790
}
833
}
791
 
834
 
792
/*
835
/*
793
FUNCTION
836
FUNCTION
794
	bfd_get_error_handler
837
	bfd_get_error_handler
795
 
838
 
796
SYNOPSIS
839
SYNOPSIS
797
	bfd_error_handler_type bfd_get_error_handler (void);
840
	bfd_error_handler_type bfd_get_error_handler (void);
798
 
841
 
799
DESCRIPTION
842
DESCRIPTION
800
	Return the BFD error handler function.
843
	Return the BFD error handler function.
801
*/
844
*/
802
 
845
 
803
bfd_error_handler_type
846
bfd_error_handler_type
804
bfd_get_error_handler (void)
847
bfd_get_error_handler (void)
805
{
848
{
806
  return _bfd_error_handler;
849
  return _bfd_error_handler;
807
}
850
}
808
 
851
 
809
/*
852
/*
810
SUBSECTION
853
SUBSECTION
811
	BFD assert handler
854
	BFD assert handler
812
 
855
 
813
	If BFD finds an internal inconsistency, the bfd assert
856
	If BFD finds an internal inconsistency, the bfd assert
814
	handler is called with information on the BFD version, BFD
857
	handler is called with information on the BFD version, BFD
815
	source file and line.  If this happens, most programs linked
858
	source file and line.  If this happens, most programs linked
816
	against BFD are expected to want to exit with an error, or mark
859
	against BFD are expected to want to exit with an error, or mark
817
	the current BFD operation as failed, so it is recommended to
860
	the current BFD operation as failed, so it is recommended to
818
	override the default handler, which just calls
861
	override the default handler, which just calls
819
	_bfd_error_handler and continues.
862
	_bfd_error_handler and continues.
820
 
863
 
821
CODE_FRAGMENT
864
CODE_FRAGMENT
822
.
865
.
823
.typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
866
.typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
824
.                                         const char *bfd_version,
867
.                                         const char *bfd_version,
825
.                                         const char *bfd_file,
868
.                                         const char *bfd_file,
826
.                                         int bfd_line);
869
.                                         int bfd_line);
827
.
870
.
828
*/
871
*/
829
 
872
 
830
/* Note the use of bfd_ prefix on the parameter names above: we want to
873
/* Note the use of bfd_ prefix on the parameter names above: we want to
831
   show which one is the message and which is the version by naming the
874
   show which one is the message and which is the version by naming the
832
   parameters, but avoid polluting the program-using-bfd namespace as
875
   parameters, but avoid polluting the program-using-bfd namespace as
833
   the typedef is visible in the exported headers that the program
876
   the typedef is visible in the exported headers that the program
834
   includes.  Below, it's just for consistency.  */
877
   includes.  Below, it's just for consistency.  */
835
 
878
 
836
static void
879
static void
837
_bfd_default_assert_handler (const char *bfd_formatmsg,
880
_bfd_default_assert_handler (const char *bfd_formatmsg,
838
			     const char *bfd_version,
881
			     const char *bfd_version,
839
			     const char *bfd_file,
882
			     const char *bfd_file,
840
			     int bfd_line)
883
			     int bfd_line)
841
 
884
 
842
{
885
{
843
  (*_bfd_error_handler) (bfd_formatmsg, bfd_version, bfd_file, bfd_line);
886
  (*_bfd_error_handler) (bfd_formatmsg, bfd_version, bfd_file, bfd_line);
844
}
887
}
845
 
888
 
846
/* Similar to _bfd_error_handler, a program can decide to exit on an
889
/* Similar to _bfd_error_handler, a program can decide to exit on an
847
   internal BFD error.  We use a non-variadic type to simplify passing
890
   internal BFD error.  We use a non-variadic type to simplify passing
848
   on parameters to other functions, e.g. _bfd_error_handler.  */
891
   on parameters to other functions, e.g. _bfd_error_handler.  */
849
 
892
 
850
bfd_assert_handler_type _bfd_assert_handler = _bfd_default_assert_handler;
893
bfd_assert_handler_type _bfd_assert_handler = _bfd_default_assert_handler;
851
 
894
 
852
/*
895
/*
853
FUNCTION
896
FUNCTION
854
	bfd_set_assert_handler
897
	bfd_set_assert_handler
855
 
898
 
856
SYNOPSIS
899
SYNOPSIS
857
	bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
900
	bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
858
 
901
 
859
DESCRIPTION
902
DESCRIPTION
860
	Set the BFD assert handler function.  Returns the previous
903
	Set the BFD assert handler function.  Returns the previous
861
	function.
904
	function.
862
*/
905
*/
863
 
906
 
864
bfd_assert_handler_type
907
bfd_assert_handler_type
865
bfd_set_assert_handler (bfd_assert_handler_type pnew)
908
bfd_set_assert_handler (bfd_assert_handler_type pnew)
866
{
909
{
867
  bfd_assert_handler_type pold;
910
  bfd_assert_handler_type pold;
868
 
911
 
869
  pold = _bfd_assert_handler;
912
  pold = _bfd_assert_handler;
870
  _bfd_assert_handler = pnew;
913
  _bfd_assert_handler = pnew;
871
  return pold;
914
  return pold;
872
}
915
}
873
 
916
 
874
/*
917
/*
875
FUNCTION
918
FUNCTION
876
	bfd_get_assert_handler
919
	bfd_get_assert_handler
877
 
920
 
878
SYNOPSIS
921
SYNOPSIS
879
	bfd_assert_handler_type bfd_get_assert_handler (void);
922
	bfd_assert_handler_type bfd_get_assert_handler (void);
880
 
923
 
881
DESCRIPTION
924
DESCRIPTION
882
	Return the BFD assert handler function.
925
	Return the BFD assert handler function.
883
*/
926
*/
884
 
927
 
885
bfd_assert_handler_type
928
bfd_assert_handler_type
886
bfd_get_assert_handler (void)
929
bfd_get_assert_handler (void)
887
{
930
{
888
  return _bfd_assert_handler;
931
  return _bfd_assert_handler;
889
}
932
}
890

933

891
/*
934
/*
892
INODE
935
INODE
893
Miscellaneous, Memory Usage, Error reporting, BFD front end
936
Miscellaneous, Memory Usage, Error reporting, BFD front end
894
 
937
 
895
SECTION
938
SECTION
896
	Miscellaneous
939
	Miscellaneous
897
 
940
 
898
SUBSECTION
941
SUBSECTION
899
	Miscellaneous functions
942
	Miscellaneous functions
900
*/
943
*/
901
 
944
 
902
/*
945
/*
903
FUNCTION
946
FUNCTION
904
	bfd_get_reloc_upper_bound
947
	bfd_get_reloc_upper_bound
905
 
948
 
906
SYNOPSIS
949
SYNOPSIS
907
	long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
950
	long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
908
 
951
 
909
DESCRIPTION
952
DESCRIPTION
910
	Return the number of bytes required to store the
953
	Return the number of bytes required to store the
911
	relocation information associated with section @var{sect}
954
	relocation information associated with section @var{sect}
912
	attached to bfd @var{abfd}.  If an error occurs, return -1.
955
	attached to bfd @var{abfd}.  If an error occurs, return -1.
913
 
956
 
914
*/
957
*/
915
 
958
 
916
long
959
long
917
bfd_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
960
bfd_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
918
{
961
{
919
  if (abfd->format != bfd_object)
962
  if (abfd->format != bfd_object)
920
    {
963
    {
921
      bfd_set_error (bfd_error_invalid_operation);
964
      bfd_set_error (bfd_error_invalid_operation);
922
      return -1;
965
      return -1;
923
    }
966
    }
924
 
967
 
925
  return BFD_SEND (abfd, _get_reloc_upper_bound, (abfd, asect));
968
  return BFD_SEND (abfd, _get_reloc_upper_bound, (abfd, asect));
926
}
969
}
927
 
970
 
928
/*
971
/*
929
FUNCTION
972
FUNCTION
930
	bfd_canonicalize_reloc
973
	bfd_canonicalize_reloc
931
 
974
 
932
SYNOPSIS
975
SYNOPSIS
933
	long bfd_canonicalize_reloc
976
	long bfd_canonicalize_reloc
934
	  (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
977
	  (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
935
 
978
 
936
DESCRIPTION
979
DESCRIPTION
937
	Call the back end associated with the open BFD
980
	Call the back end associated with the open BFD
938
	@var{abfd} and translate the external form of the relocation
981
	@var{abfd} and translate the external form of the relocation
939
	information attached to @var{sec} into the internal canonical
982
	information attached to @var{sec} into the internal canonical
940
	form.  Place the table into memory at @var{loc}, which has
983
	form.  Place the table into memory at @var{loc}, which has
941
	been preallocated, usually by a call to
984
	been preallocated, usually by a call to
942
	<>.  Returns the number of relocs, or
985
	<>.  Returns the number of relocs, or
943
	-1 on error.
986
	-1 on error.
944
 
987
 
945
	The @var{syms} table is also needed for horrible internal magic
988
	The @var{syms} table is also needed for horrible internal magic
946
	reasons.
989
	reasons.
947
 
990
 
948
*/
991
*/
949
long
992
long
950
bfd_canonicalize_reloc (bfd *abfd,
993
bfd_canonicalize_reloc (bfd *abfd,
951
			sec_ptr asect,
994
			sec_ptr asect,
952
			arelent **location,
995
			arelent **location,
953
			asymbol **symbols)
996
			asymbol **symbols)
954
{
997
{
955
  if (abfd->format != bfd_object)
998
  if (abfd->format != bfd_object)
956
    {
999
    {
957
      bfd_set_error (bfd_error_invalid_operation);
1000
      bfd_set_error (bfd_error_invalid_operation);
958
      return -1;
1001
      return -1;
959
    }
1002
    }
960
 
1003
 
961
  return BFD_SEND (abfd, _bfd_canonicalize_reloc,
1004
  return BFD_SEND (abfd, _bfd_canonicalize_reloc,
962
		   (abfd, asect, location, symbols));
1005
		   (abfd, asect, location, symbols));
963
}
1006
}
964
 
1007
 
965
/*
1008
/*
966
FUNCTION
1009
FUNCTION
967
	bfd_set_reloc
1010
	bfd_set_reloc
968
 
1011
 
969
SYNOPSIS
1012
SYNOPSIS
970
	void bfd_set_reloc
1013
	void bfd_set_reloc
971
	  (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
1014
	  (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
972
 
1015
 
973
DESCRIPTION
1016
DESCRIPTION
974
	Set the relocation pointer and count within
1017
	Set the relocation pointer and count within
975
	section @var{sec} to the values @var{rel} and @var{count}.
1018
	section @var{sec} to the values @var{rel} and @var{count}.
976
	The argument @var{abfd} is ignored.
1019
	The argument @var{abfd} is ignored.
977
 
1020
 
978
*/
1021
*/
979
 
1022
 
980
void
1023
void
981
bfd_set_reloc (bfd *ignore_abfd ATTRIBUTE_UNUSED,
1024
bfd_set_reloc (bfd *ignore_abfd ATTRIBUTE_UNUSED,
982
	       sec_ptr asect,
1025
	       sec_ptr asect,
983
	       arelent **location,
1026
	       arelent **location,
984
	       unsigned int count)
1027
	       unsigned int count)
985
{
1028
{
986
  asect->orelocation = location;
1029
  asect->orelocation = location;
987
  asect->reloc_count = count;
1030
  asect->reloc_count = count;
988
}
1031
}
989
 
1032
 
990
/*
1033
/*
991
FUNCTION
1034
FUNCTION
992
	bfd_set_file_flags
1035
	bfd_set_file_flags
993
 
1036
 
994
SYNOPSIS
1037
SYNOPSIS
995
	bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
1038
	bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
996
 
1039
 
997
DESCRIPTION
1040
DESCRIPTION
998
	Set the flag word in the BFD @var{abfd} to the value @var{flags}.
1041
	Set the flag word in the BFD @var{abfd} to the value @var{flags}.
999
 
1042
 
1000
	Possible errors are:
1043
	Possible errors are:
1001
	o <> - The target bfd was not of object format.
1044
	o <> - The target bfd was not of object format.
1002
	o <> - The target bfd was open for reading.
1045
	o <> - The target bfd was open for reading.
1003
	o <> -
1046
	o <> -
1004
	The flag word contained a bit which was not applicable to the
1047
	The flag word contained a bit which was not applicable to the
1005
	type of file.  E.g., an attempt was made to set the <> bit
1048
	type of file.  E.g., an attempt was made to set the <> bit
1006
	on a BFD format which does not support demand paging.
1049
	on a BFD format which does not support demand paging.
1007
 
1050
 
1008
*/
1051
*/
1009
 
1052
 
1010
bfd_boolean
1053
bfd_boolean
1011
bfd_set_file_flags (bfd *abfd, flagword flags)
1054
bfd_set_file_flags (bfd *abfd, flagword flags)
1012
{
1055
{
1013
  if (abfd->format != bfd_object)
1056
  if (abfd->format != bfd_object)
1014
    {
1057
    {
1015
      bfd_set_error (bfd_error_wrong_format);
1058
      bfd_set_error (bfd_error_wrong_format);
1016
      return FALSE;
1059
      return FALSE;
1017
    }
1060
    }
1018
 
1061
 
1019
  if (bfd_read_p (abfd))
1062
  if (bfd_read_p (abfd))
1020
    {
1063
    {
1021
      bfd_set_error (bfd_error_invalid_operation);
1064
      bfd_set_error (bfd_error_invalid_operation);
1022
      return FALSE;
1065
      return FALSE;
1023
    }
1066
    }
1024
 
1067
 
1025
  bfd_get_file_flags (abfd) = flags;
1068
  bfd_get_file_flags (abfd) = flags;
1026
  if ((flags & bfd_applicable_file_flags (abfd)) != flags)
1069
  if ((flags & bfd_applicable_file_flags (abfd)) != flags)
1027
    {
1070
    {
1028
      bfd_set_error (bfd_error_invalid_operation);
1071
      bfd_set_error (bfd_error_invalid_operation);
1029
      return FALSE;
1072
      return FALSE;
1030
    }
1073
    }
1031
 
1074
 
1032
  return TRUE;
1075
  return TRUE;
1033
}
1076
}
1034
 
1077
 
1035
void
1078
void
1036
bfd_assert (const char *file, int line)
1079
bfd_assert (const char *file, int line)
1037
{
1080
{
1038
  (*_bfd_assert_handler) (_("BFD %s assertion fail %s:%d"),
1081
  (*_bfd_assert_handler) (_("BFD %s assertion fail %s:%d"),
1039
			  BFD_VERSION_STRING, file, line);
1082
			  BFD_VERSION_STRING, file, line);
1040
}
1083
}
1041
 
1084
 
1042
/* A more or less friendly abort message.  In libbfd.h abort is
1085
/* A more or less friendly abort message.  In libbfd.h abort is
1043
   defined to call this function.  */
1086
   defined to call this function.  */
1044
 
1087
 
1045
void
1088
void
1046
_bfd_abort (const char *file, int line, const char *fn)
1089
_bfd_abort (const char *file, int line, const char *fn)
1047
{
1090
{
1048
  if (fn != NULL)
1091
  if (fn != NULL)
1049
    (*_bfd_error_handler)
1092
    (*_bfd_error_handler)
1050
      (_("BFD %s internal error, aborting at %s line %d in %s\n"),
1093
      (_("BFD %s internal error, aborting at %s:%d in %s\n"),
1051
       BFD_VERSION_STRING, file, line, fn);
1094
       BFD_VERSION_STRING, file, line, fn);
1052
  else
1095
  else
1053
    (*_bfd_error_handler)
1096
    (*_bfd_error_handler)
1054
      (_("BFD %s internal error, aborting at %s line %d\n"),
1097
      (_("BFD %s internal error, aborting at %s:%d\n"),
1055
       BFD_VERSION_STRING, file, line);
1098
       BFD_VERSION_STRING, file, line);
1056
  (*_bfd_error_handler) (_("Please report this bug.\n"));
1099
  (*_bfd_error_handler) (_("Please report this bug.\n"));
1057
  _exit (EXIT_FAILURE);
1100
  _exit (EXIT_FAILURE);
1058
}
1101
}
1059
 
1102
 
1060
/*
1103
/*
1061
FUNCTION
1104
FUNCTION
1062
	bfd_get_arch_size
1105
	bfd_get_arch_size
1063
 
1106
 
1064
SYNOPSIS
1107
SYNOPSIS
1065
 	int bfd_get_arch_size (bfd *abfd);
1108
 	int bfd_get_arch_size (bfd *abfd);
1066
 
1109
 
1067
DESCRIPTION
1110
DESCRIPTION
1068
	Returns the architecture address size, in bits, as determined
1111
	Returns the normalized architecture address size, in bits, as
1069
	by the object file's format.  For ELF, this information is
1112
	determined by the object file's format.  By normalized, we mean
-
 
1113
	either 32 or 64.  For ELF, this information is included in the
-
 
1114
	header.  Use bfd_arch_bits_per_address for number of bits in
1070
	included in the header.
1115
	the architecture address.
1071
 
1116
 
1072
RETURNS
1117
RETURNS
1073
	Returns the arch size in bits if known, <<-1>> otherwise.
1118
	Returns the arch size in bits if known, <<-1>> otherwise.
1074
*/
1119
*/
1075
 
1120
 
1076
int
1121
int
1077
bfd_get_arch_size (bfd *abfd)
1122
bfd_get_arch_size (bfd *abfd)
1078
{
1123
{
1079
  if (abfd->xvec->flavour == bfd_target_elf_flavour)
1124
  if (abfd->xvec->flavour == bfd_target_elf_flavour)
1080
    return get_elf_backend_data (abfd)->s->arch_size;
1125
    return get_elf_backend_data (abfd)->s->arch_size;
1081
 
1126
 
1082
  return -1;
1127
  return bfd_arch_bits_per_address (abfd) > 32 ? 64 : 32;
1083
}
1128
}
1084
 
1129
 
1085
/*
1130
/*
1086
FUNCTION
1131
FUNCTION
1087
	bfd_get_sign_extend_vma
1132
	bfd_get_sign_extend_vma
1088
 
1133
 
1089
SYNOPSIS
1134
SYNOPSIS
1090
 	int bfd_get_sign_extend_vma (bfd *abfd);
1135
 	int bfd_get_sign_extend_vma (bfd *abfd);
1091
 
1136
 
1092
DESCRIPTION
1137
DESCRIPTION
1093
	Indicates if the target architecture "naturally" sign extends
1138
	Indicates if the target architecture "naturally" sign extends
1094
	an address.  Some architectures implicitly sign extend address
1139
	an address.  Some architectures implicitly sign extend address
1095
	values when they are converted to types larger than the size
1140
	values when they are converted to types larger than the size
1096
	of an address.  For instance, bfd_get_start_address() will
1141
	of an address.  For instance, bfd_get_start_address() will
1097
	return an address sign extended to fill a bfd_vma when this is
1142
	return an address sign extended to fill a bfd_vma when this is
1098
	the case.
1143
	the case.
1099
 
1144
 
1100
RETURNS
1145
RETURNS
1101
	Returns <<1>> if the target architecture is known to sign
1146
	Returns <<1>> if the target architecture is known to sign
1102
	extend addresses, <<0>> if the target architecture is known to
1147
	extend addresses, <<0>> if the target architecture is known to
1103
	not sign extend addresses, and <<-1>> otherwise.
1148
	not sign extend addresses, and <<-1>> otherwise.
1104
*/
1149
*/
1105
 
1150
 
1106
int
1151
int
1107
bfd_get_sign_extend_vma (bfd *abfd)
1152
bfd_get_sign_extend_vma (bfd *abfd)
1108
{
1153
{
1109
  char *name;
1154
  char *name;
1110
 
1155
 
1111
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1156
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1112
    return get_elf_backend_data (abfd)->sign_extend_vma;
1157
    return get_elf_backend_data (abfd)->sign_extend_vma;
1113
 
1158
 
1114
  name = bfd_get_target (abfd);
1159
  name = bfd_get_target (abfd);
1115
 
1160
 
1116
  /* Return a proper value for DJGPP & PE COFF.
1161
  /* Return a proper value for DJGPP & PE COFF.
1117
     This function is required for DWARF2 support, but there is
1162
     This function is required for DWARF2 support, but there is
1118
     no place to store this information in the COFF back end.
1163
     no place to store this information in the COFF back end.
1119
     Should enough other COFF targets add support for DWARF2,
1164
     Should enough other COFF targets add support for DWARF2,
1120
     a place will have to be found.  Until then, this hack will do.  */
1165
     a place will have to be found.  Until then, this hack will do.  */
1121
  if (CONST_STRNEQ (name, "coff-go32")
1166
  if (CONST_STRNEQ (name, "coff-go32")
1122
      || strcmp (name, "pe-i386") == 0
1167
      || strcmp (name, "pe-i386") == 0
1123
      || strcmp (name, "pei-i386") == 0
1168
      || strcmp (name, "pei-i386") == 0
1124
      || strcmp (name, "pe-x86-64") == 0
1169
      || strcmp (name, "pe-x86-64") == 0
1125
      || strcmp (name, "pei-x86-64") == 0
1170
      || strcmp (name, "pei-x86-64") == 0
1126
      || strcmp (name, "pe-arm-wince-little") == 0
1171
      || strcmp (name, "pe-arm-wince-little") == 0
1127
      || strcmp (name, "pei-arm-wince-little") == 0
1172
      || strcmp (name, "pei-arm-wince-little") == 0
1128
      || strcmp (name, "aixcoff-rs6000") == 0)
1173
      || strcmp (name, "aixcoff-rs6000") == 0)
1129
    return 1;
1174
    return 1;
1130
 
1175
 
1131
  if (CONST_STRNEQ (name, "mach-o"))
1176
  if (CONST_STRNEQ (name, "mach-o"))
1132
    return 0;
1177
    return 0;
1133
 
1178
 
1134
  bfd_set_error (bfd_error_wrong_format);
1179
  bfd_set_error (bfd_error_wrong_format);
1135
  return -1;
1180
  return -1;
1136
}
1181
}
1137
 
1182
 
1138
/*
1183
/*
1139
FUNCTION
1184
FUNCTION
1140
	bfd_set_start_address
1185
	bfd_set_start_address
1141
 
1186
 
1142
SYNOPSIS
1187
SYNOPSIS
1143
 	bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
1188
 	bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
1144
 
1189
 
1145
DESCRIPTION
1190
DESCRIPTION
1146
	Make @var{vma} the entry point of output BFD @var{abfd}.
1191
	Make @var{vma} the entry point of output BFD @var{abfd}.
1147
 
1192
 
1148
RETURNS
1193
RETURNS
1149
	Returns <> on success, <> otherwise.
1194
	Returns <> on success, <> otherwise.
1150
*/
1195
*/
1151
 
1196
 
1152
bfd_boolean
1197
bfd_boolean
1153
bfd_set_start_address (bfd *abfd, bfd_vma vma)
1198
bfd_set_start_address (bfd *abfd, bfd_vma vma)
1154
{
1199
{
1155
  abfd->start_address = vma;
1200
  abfd->start_address = vma;
1156
  return TRUE;
1201
  return TRUE;
1157
}
1202
}
1158
 
1203
 
1159
/*
1204
/*
1160
FUNCTION
1205
FUNCTION
1161
	bfd_get_gp_size
1206
	bfd_get_gp_size
1162
 
1207
 
1163
SYNOPSIS
1208
SYNOPSIS
1164
	unsigned int bfd_get_gp_size (bfd *abfd);
1209
	unsigned int bfd_get_gp_size (bfd *abfd);
1165
 
1210
 
1166
DESCRIPTION
1211
DESCRIPTION
1167
	Return the maximum size of objects to be optimized using the GP
1212
	Return the maximum size of objects to be optimized using the GP
1168
	register under MIPS ECOFF.  This is typically set by the <<-G>>
1213
	register under MIPS ECOFF.  This is typically set by the <<-G>>
1169
	argument to the compiler, assembler or linker.
1214
	argument to the compiler, assembler or linker.
1170
*/
1215
*/
1171
 
1216
 
1172
unsigned int
1217
unsigned int
1173
bfd_get_gp_size (bfd *abfd)
1218
bfd_get_gp_size (bfd *abfd)
1174
{
1219
{
1175
  if (abfd->format == bfd_object)
1220
  if (abfd->format == bfd_object)
1176
    {
1221
    {
1177
      if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1222
      if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1178
	return ecoff_data (abfd)->gp_size;
1223
	return ecoff_data (abfd)->gp_size;
1179
      else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1224
      else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1180
	return elf_gp_size (abfd);
1225
	return elf_gp_size (abfd);
1181
    }
1226
    }
1182
  return 0;
1227
  return 0;
1183
}
1228
}
1184
 
1229
 
1185
/*
1230
/*
1186
FUNCTION
1231
FUNCTION
1187
	bfd_set_gp_size
1232
	bfd_set_gp_size
1188
 
1233
 
1189
SYNOPSIS
1234
SYNOPSIS
1190
	void bfd_set_gp_size (bfd *abfd, unsigned int i);
1235
	void bfd_set_gp_size (bfd *abfd, unsigned int i);
1191
 
1236
 
1192
DESCRIPTION
1237
DESCRIPTION
1193
	Set the maximum size of objects to be optimized using the GP
1238
	Set the maximum size of objects to be optimized using the GP
1194
	register under ECOFF or MIPS ELF.  This is typically set by
1239
	register under ECOFF or MIPS ELF.  This is typically set by
1195
	the <<-G>> argument to the compiler, assembler or linker.
1240
	the <<-G>> argument to the compiler, assembler or linker.
1196
*/
1241
*/
1197
 
1242
 
1198
void
1243
void
1199
bfd_set_gp_size (bfd *abfd, unsigned int i)
1244
bfd_set_gp_size (bfd *abfd, unsigned int i)
1200
{
1245
{
1201
  /* Don't try to set GP size on an archive or core file!  */
1246
  /* Don't try to set GP size on an archive or core file!  */
1202
  if (abfd->format != bfd_object)
1247
  if (abfd->format != bfd_object)
1203
    return;
1248
    return;
1204
 
1249
 
1205
  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1250
  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1206
    ecoff_data (abfd)->gp_size = i;
1251
    ecoff_data (abfd)->gp_size = i;
1207
  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1252
  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1208
    elf_gp_size (abfd) = i;
1253
    elf_gp_size (abfd) = i;
1209
}
1254
}
1210
 
1255
 
1211
/* Get the GP value.  This is an internal function used by some of the
1256
/* Get the GP value.  This is an internal function used by some of the
1212
   relocation special_function routines on targets which support a GP
1257
   relocation special_function routines on targets which support a GP
1213
   register.  */
1258
   register.  */
1214
 
1259
 
1215
bfd_vma
1260
bfd_vma
1216
_bfd_get_gp_value (bfd *abfd)
1261
_bfd_get_gp_value (bfd *abfd)
1217
{
1262
{
1218
  if (! abfd)
1263
  if (! abfd)
1219
    return 0;
1264
    return 0;
1220
  if (abfd->format != bfd_object)
1265
  if (abfd->format != bfd_object)
1221
    return 0;
1266
    return 0;
1222
 
1267
 
1223
  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1268
  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1224
    return ecoff_data (abfd)->gp;
1269
    return ecoff_data (abfd)->gp;
1225
  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1270
  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1226
    return elf_gp (abfd);
1271
    return elf_gp (abfd);
1227
 
1272
 
1228
  return 0;
1273
  return 0;
1229
}
1274
}
1230
 
1275
 
1231
/* Set the GP value.  */
1276
/* Set the GP value.  */
1232
 
1277
 
1233
void
1278
void
1234
_bfd_set_gp_value (bfd *abfd, bfd_vma v)
1279
_bfd_set_gp_value (bfd *abfd, bfd_vma v)
1235
{
1280
{
1236
  if (! abfd)
1281
  if (! abfd)
1237
    abort ();
1282
    abort ();
1238
  if (abfd->format != bfd_object)
1283
  if (abfd->format != bfd_object)
1239
    return;
1284
    return;
1240
 
1285
 
1241
  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1286
  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1242
    ecoff_data (abfd)->gp = v;
1287
    ecoff_data (abfd)->gp = v;
1243
  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1288
  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1244
    elf_gp (abfd) = v;
1289
    elf_gp (abfd) = v;
1245
}
1290
}
1246
 
1291
 
1247
/*
1292
/*
1248
FUNCTION
1293
FUNCTION
1249
	bfd_scan_vma
1294
	bfd_scan_vma
1250
 
1295
 
1251
SYNOPSIS
1296
SYNOPSIS
1252
	bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
1297
	bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
1253
 
1298
 
1254
DESCRIPTION
1299
DESCRIPTION
1255
	Convert, like <>, a numerical expression
1300
	Convert, like <>, a numerical expression
1256
	@var{string} into a <> integer, and return that integer.
1301
	@var{string} into a <> integer, and return that integer.
1257
	(Though without as many bells and whistles as <>.)
1302
	(Though without as many bells and whistles as <>.)
1258
	The expression is assumed to be unsigned (i.e., positive).
1303
	The expression is assumed to be unsigned (i.e., positive).
1259
	If given a @var{base}, it is used as the base for conversion.
1304
	If given a @var{base}, it is used as the base for conversion.
1260
	A base of 0 causes the function to interpret the string
1305
	A base of 0 causes the function to interpret the string
1261
	in hex if a leading "0x" or "0X" is found, otherwise
1306
	in hex if a leading "0x" or "0X" is found, otherwise
1262
	in octal if a leading zero is found, otherwise in decimal.
1307
	in octal if a leading zero is found, otherwise in decimal.
1263
 
1308
 
1264
	If the value would overflow, the maximum <> value is
1309
	If the value would overflow, the maximum <> value is
1265
	returned.
1310
	returned.
1266
*/
1311
*/
1267
 
1312
 
1268
bfd_vma
1313
bfd_vma
1269
bfd_scan_vma (const char *string, const char **end, int base)
1314
bfd_scan_vma (const char *string, const char **end, int base)
1270
{
1315
{
1271
  bfd_vma value;
1316
  bfd_vma value;
1272
  bfd_vma cutoff;
1317
  bfd_vma cutoff;
1273
  unsigned int cutlim;
1318
  unsigned int cutlim;
1274
  int overflow;
1319
  int overflow;
1275
 
1320
 
1276
  /* Let the host do it if possible.  */
1321
  /* Let the host do it if possible.  */
1277
  if (sizeof (bfd_vma) <= sizeof (unsigned long))
1322
  if (sizeof (bfd_vma) <= sizeof (unsigned long))
1278
    return strtoul (string, (char **) end, base);
1323
    return strtoul (string, (char **) end, base);
1279
 
1324
 
1280
#ifdef HAVE_STRTOULL
1325
#ifdef HAVE_STRTOULL
1281
  if (sizeof (bfd_vma) <= sizeof (unsigned long long))
1326
  if (sizeof (bfd_vma) <= sizeof (unsigned long long))
1282
    return strtoull (string, (char **) end, base);
1327
    return strtoull (string, (char **) end, base);
1283
#endif
1328
#endif
1284
 
1329
 
1285
  if (base == 0)
1330
  if (base == 0)
1286
    {
1331
    {
1287
      if (string[0] == '0')
1332
      if (string[0] == '0')
1288
	{
1333
	{
1289
	  if ((string[1] == 'x') || (string[1] == 'X'))
1334
	  if ((string[1] == 'x') || (string[1] == 'X'))
1290
	    base = 16;
1335
	    base = 16;
1291
	  else
1336
	  else
1292
	    base = 8;
1337
	    base = 8;
1293
	}
1338
	}
1294
    }
1339
    }
1295
 
1340
 
1296
  if ((base < 2) || (base > 36))
1341
  if ((base < 2) || (base > 36))
1297
    base = 10;
1342
    base = 10;
1298
 
1343
 
1299
  if (base == 16
1344
  if (base == 16
1300
      && string[0] == '0'
1345
      && string[0] == '0'
1301
      && (string[1] == 'x' || string[1] == 'X')
1346
      && (string[1] == 'x' || string[1] == 'X')
1302
      && ISXDIGIT (string[2]))
1347
      && ISXDIGIT (string[2]))
1303
    {
1348
    {
1304
      string += 2;
1349
      string += 2;
1305
    }
1350
    }
1306
 
1351
 
1307
  cutoff = (~ (bfd_vma) 0) / (bfd_vma) base;
1352
  cutoff = (~ (bfd_vma) 0) / (bfd_vma) base;
1308
  cutlim = (~ (bfd_vma) 0) % (bfd_vma) base;
1353
  cutlim = (~ (bfd_vma) 0) % (bfd_vma) base;
1309
  value = 0;
1354
  value = 0;
1310
  overflow = 0;
1355
  overflow = 0;
1311
  while (1)
1356
  while (1)
1312
    {
1357
    {
1313
      unsigned int digit;
1358
      unsigned int digit;
1314
 
1359
 
1315
      digit = *string;
1360
      digit = *string;
1316
      if (ISDIGIT (digit))
1361
      if (ISDIGIT (digit))
1317
	digit = digit - '0';
1362
	digit = digit - '0';
1318
      else if (ISALPHA (digit))
1363
      else if (ISALPHA (digit))
1319
	digit = TOUPPER (digit) - 'A' + 10;
1364
	digit = TOUPPER (digit) - 'A' + 10;
1320
      else
1365
      else
1321
	break;
1366
	break;
1322
      if (digit >= (unsigned int) base)
1367
      if (digit >= (unsigned int) base)
1323
	break;
1368
	break;
1324
      if (value > cutoff || (value == cutoff && digit > cutlim))
1369
      if (value > cutoff || (value == cutoff && digit > cutlim))
1325
	overflow = 1;
1370
	overflow = 1;
1326
      value = value * base + digit;
1371
      value = value * base + digit;
1327
      ++string;
1372
      ++string;
1328
    }
1373
    }
1329
 
1374
 
1330
  if (overflow)
1375
  if (overflow)
1331
    value = ~ (bfd_vma) 0;
1376
    value = ~ (bfd_vma) 0;
1332
 
1377
 
1333
  if (end != NULL)
1378
  if (end != NULL)
1334
    *end = string;
1379
    *end = string;
1335
 
1380
 
1336
  return value;
1381
  return value;
1337
}
1382
}
1338
 
1383
 
1339
/*
1384
/*
1340
FUNCTION
1385
FUNCTION
1341
	bfd_copy_private_header_data
1386
	bfd_copy_private_header_data
1342
 
1387
 
1343
SYNOPSIS
1388
SYNOPSIS
1344
	bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
1389
	bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
1345
 
1390
 
1346
DESCRIPTION
1391
DESCRIPTION
1347
	Copy private BFD header information from the BFD @var{ibfd} to the
1392
	Copy private BFD header information from the BFD @var{ibfd} to the
1348
	the BFD @var{obfd}.  This copies information that may require
1393
	the BFD @var{obfd}.  This copies information that may require
1349
	sections to exist, but does not require symbol tables.  Return
1394
	sections to exist, but does not require symbol tables.  Return
1350
	<> on success, <> on error.
1395
	<> on success, <> on error.
1351
	Possible error returns are:
1396
	Possible error returns are:
1352
 
1397
 
1353
	o <> -
1398
	o <> -
1354
	Not enough memory exists to create private data for @var{obfd}.
1399
	Not enough memory exists to create private data for @var{obfd}.
1355
 
1400
 
1356
.#define bfd_copy_private_header_data(ibfd, obfd) \
1401
.#define bfd_copy_private_header_data(ibfd, obfd) \
1357
.     BFD_SEND (obfd, _bfd_copy_private_header_data, \
1402
.     BFD_SEND (obfd, _bfd_copy_private_header_data, \
1358
.		(ibfd, obfd))
1403
.		(ibfd, obfd))
1359
 
1404
 
1360
*/
1405
*/
1361
 
1406
 
1362
/*
1407
/*
1363
FUNCTION
1408
FUNCTION
1364
	bfd_copy_private_bfd_data
1409
	bfd_copy_private_bfd_data
1365
 
1410
 
1366
SYNOPSIS
1411
SYNOPSIS
1367
	bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
1412
	bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
1368
 
1413
 
1369
DESCRIPTION
1414
DESCRIPTION
1370
	Copy private BFD information from the BFD @var{ibfd} to the
1415
	Copy private BFD information from the BFD @var{ibfd} to the
1371
	the BFD @var{obfd}.  Return <> on success, <> on error.
1416
	the BFD @var{obfd}.  Return <> on success, <> on error.
1372
	Possible error returns are:
1417
	Possible error returns are:
1373
 
1418
 
1374
	o <> -
1419
	o <> -
1375
	Not enough memory exists to create private data for @var{obfd}.
1420
	Not enough memory exists to create private data for @var{obfd}.
1376
 
1421
 
1377
.#define bfd_copy_private_bfd_data(ibfd, obfd) \
1422
.#define bfd_copy_private_bfd_data(ibfd, obfd) \
1378
.     BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
1423
.     BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
1379
.		(ibfd, obfd))
1424
.		(ibfd, obfd))
1380
 
1425
 
1381
*/
1426
*/
1382
 
1427
 
1383
/*
1428
/*
1384
FUNCTION
1429
FUNCTION
1385
	bfd_merge_private_bfd_data
1430
	bfd_merge_private_bfd_data
1386
 
1431
 
1387
SYNOPSIS
1432
SYNOPSIS
1388
	bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
1433
	bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
1389
 
1434
 
1390
DESCRIPTION
1435
DESCRIPTION
1391
	Merge private BFD information from the BFD @var{ibfd} to the
1436
	Merge private BFD information from the BFD @var{ibfd} to the
1392
	the output file BFD @var{obfd} when linking.  Return <>
1437
	the output file BFD @var{obfd} when linking.  Return <>
1393
	on success, <> on error.  Possible error returns are:
1438
	on success, <> on error.  Possible error returns are:
1394
 
1439
 
1395
	o <> -
1440
	o <> -
1396
	Not enough memory exists to create private data for @var{obfd}.
1441
	Not enough memory exists to create private data for @var{obfd}.
1397
 
1442
 
1398
.#define bfd_merge_private_bfd_data(ibfd, obfd) \
1443
.#define bfd_merge_private_bfd_data(ibfd, obfd) \
1399
.     BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
1444
.     BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
1400
.		(ibfd, obfd))
1445
.		(ibfd, obfd))
1401
 
1446
 
1402
*/
1447
*/
1403
 
1448
 
1404
/*
1449
/*
1405
FUNCTION
1450
FUNCTION
1406
	bfd_set_private_flags
1451
	bfd_set_private_flags
1407
 
1452
 
1408
SYNOPSIS
1453
SYNOPSIS
1409
	bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
1454
	bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
1410
 
1455
 
1411
DESCRIPTION
1456
DESCRIPTION
1412
	Set private BFD flag information in the BFD @var{abfd}.
1457
	Set private BFD flag information in the BFD @var{abfd}.
1413
	Return <> on success, <> on error.  Possible error
1458
	Return <> on success, <> on error.  Possible error
1414
	returns are:
1459
	returns are:
1415
 
1460
 
1416
	o <> -
1461
	o <> -
1417
	Not enough memory exists to create private data for @var{obfd}.
1462
	Not enough memory exists to create private data for @var{obfd}.
1418
 
1463
 
1419
.#define bfd_set_private_flags(abfd, flags) \
1464
.#define bfd_set_private_flags(abfd, flags) \
1420
.     BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
1465
.     BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
1421
 
1466
 
1422
*/
1467
*/
1423
 
1468
 
1424
/*
1469
/*
1425
FUNCTION
1470
FUNCTION
1426
	Other functions
1471
	Other functions
1427
 
1472
 
1428
DESCRIPTION
1473
DESCRIPTION
1429
	The following functions exist but have not yet been documented.
1474
	The following functions exist but have not yet been documented.
1430
 
1475
 
1431
.#define bfd_sizeof_headers(abfd, info) \
1476
.#define bfd_sizeof_headers(abfd, info) \
1432
.       BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
1477
.       BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
1433
.
1478
.
1434
.#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
1479
.#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
1435
.       BFD_SEND (abfd, _bfd_find_nearest_line, \
1480
.       BFD_SEND (abfd, _bfd_find_nearest_line, \
1436
.                 (abfd, sec, syms, off, file, func, line))
1481
.                 (abfd, syms, sec, off, file, func, line, NULL))
1437
.
1482
.
1438
.#define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
1483
.#define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
1439
.                                            line, disc) \
1484
.                                            line, disc) \
1440
.       BFD_SEND (abfd, _bfd_find_nearest_line_discriminator, \
1485
.       BFD_SEND (abfd, _bfd_find_nearest_line, \
1441
.                 (abfd, sec, syms, off, file, func, line, disc))
1486
.                 (abfd, syms, sec, off, file, func, line, disc))
1442
.
1487
.
1443
.#define bfd_find_line(abfd, syms, sym, file, line) \
1488
.#define bfd_find_line(abfd, syms, sym, file, line) \
1444
.       BFD_SEND (abfd, _bfd_find_line, \
1489
.       BFD_SEND (abfd, _bfd_find_line, \
1445
.                 (abfd, syms, sym, file, line))
1490
.                 (abfd, syms, sym, file, line))
1446
.
1491
.
1447
.#define bfd_find_inliner_info(abfd, file, func, line) \
1492
.#define bfd_find_inliner_info(abfd, file, func, line) \
1448
.       BFD_SEND (abfd, _bfd_find_inliner_info, \
1493
.       BFD_SEND (abfd, _bfd_find_inliner_info, \
1449
.                 (abfd, file, func, line))
1494
.                 (abfd, file, func, line))
1450
.
1495
.
1451
.#define bfd_debug_info_start(abfd) \
1496
.#define bfd_debug_info_start(abfd) \
1452
.       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
1497
.       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
1453
.
1498
.
1454
.#define bfd_debug_info_end(abfd) \
1499
.#define bfd_debug_info_end(abfd) \
1455
.       BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
1500
.       BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
1456
.
1501
.
1457
.#define bfd_debug_info_accumulate(abfd, section) \
1502
.#define bfd_debug_info_accumulate(abfd, section) \
1458
.       BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
1503
.       BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
1459
.
1504
.
1460
.#define bfd_stat_arch_elt(abfd, stat) \
1505
.#define bfd_stat_arch_elt(abfd, stat) \
1461
.       BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
1506
.       BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
1462
.
1507
.
1463
.#define bfd_update_armap_timestamp(abfd) \
1508
.#define bfd_update_armap_timestamp(abfd) \
1464
.       BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
1509
.       BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
1465
.
1510
.
1466
.#define bfd_set_arch_mach(abfd, arch, mach)\
1511
.#define bfd_set_arch_mach(abfd, arch, mach)\
1467
.       BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
1512
.       BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
1468
.
1513
.
1469
.#define bfd_relax_section(abfd, section, link_info, again) \
1514
.#define bfd_relax_section(abfd, section, link_info, again) \
1470
.       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
1515
.       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
1471
.
1516
.
1472
.#define bfd_gc_sections(abfd, link_info) \
1517
.#define bfd_gc_sections(abfd, link_info) \
1473
.	BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
1518
.	BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
1474
.
1519
.
1475
.#define bfd_lookup_section_flags(link_info, flag_info, section) \
1520
.#define bfd_lookup_section_flags(link_info, flag_info, section) \
1476
.	BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
1521
.	BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
1477
.
1522
.
1478
.#define bfd_merge_sections(abfd, link_info) \
1523
.#define bfd_merge_sections(abfd, link_info) \
1479
.	BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
1524
.	BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
1480
.
1525
.
1481
.#define bfd_is_group_section(abfd, sec) \
1526
.#define bfd_is_group_section(abfd, sec) \
1482
.	BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
1527
.	BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
1483
.
1528
.
1484
.#define bfd_discard_group(abfd, sec) \
1529
.#define bfd_discard_group(abfd, sec) \
1485
.	BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
1530
.	BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
1486
.
1531
.
1487
.#define bfd_link_hash_table_create(abfd) \
1532
.#define bfd_link_hash_table_create(abfd) \
1488
.	BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
1533
.	BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
1489
.
1534
.
1490
.#define bfd_link_hash_table_free(abfd, hash) \
-
 
1491
.	BFD_SEND (abfd, _bfd_link_hash_table_free, (hash))
-
 
1492
.
-
 
1493
.#define bfd_link_add_symbols(abfd, info) \
1535
.#define bfd_link_add_symbols(abfd, info) \
1494
.	BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
1536
.	BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
1495
.
1537
.
1496
.#define bfd_link_just_syms(abfd, sec, info) \
1538
.#define bfd_link_just_syms(abfd, sec, info) \
1497
.	BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
1539
.	BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
1498
.
1540
.
1499
.#define bfd_final_link(abfd, info) \
1541
.#define bfd_final_link(abfd, info) \
1500
.	BFD_SEND (abfd, _bfd_final_link, (abfd, info))
1542
.	BFD_SEND (abfd, _bfd_final_link, (abfd, info))
1501
.
1543
.
1502
.#define bfd_free_cached_info(abfd) \
1544
.#define bfd_free_cached_info(abfd) \
1503
.       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
1545
.       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
1504
.
1546
.
1505
.#define bfd_get_dynamic_symtab_upper_bound(abfd) \
1547
.#define bfd_get_dynamic_symtab_upper_bound(abfd) \
1506
.	BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
1548
.	BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
1507
.
1549
.
1508
.#define bfd_print_private_bfd_data(abfd, file)\
1550
.#define bfd_print_private_bfd_data(abfd, file)\
1509
.	BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
1551
.	BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
1510
.
1552
.
1511
.#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
1553
.#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
1512
.	BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
1554
.	BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
1513
.
1555
.
1514
.#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
1556
.#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
1515
.	BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
1557
.	BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
1516
.						    dyncount, dynsyms, ret))
1558
.						    dyncount, dynsyms, ret))
1517
.
1559
.
1518
.#define bfd_get_dynamic_reloc_upper_bound(abfd) \
1560
.#define bfd_get_dynamic_reloc_upper_bound(abfd) \
1519
.	BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
1561
.	BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
1520
.
1562
.
1521
.#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
1563
.#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
1522
.	BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
1564
.	BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
1523
.
1565
.
1524
.extern bfd_byte *bfd_get_relocated_section_contents
1566
.extern bfd_byte *bfd_get_relocated_section_contents
1525
.  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
1567
.  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
1526
.   bfd_boolean, asymbol **);
1568
.   bfd_boolean, asymbol **);
1527
.
1569
.
1528
 
1570
 
1529
*/
1571
*/
1530
 
1572
 
1531
bfd_byte *
1573
bfd_byte *
1532
bfd_get_relocated_section_contents (bfd *abfd,
1574
bfd_get_relocated_section_contents (bfd *abfd,
1533
				    struct bfd_link_info *link_info,
1575
				    struct bfd_link_info *link_info,
1534
				    struct bfd_link_order *link_order,
1576
				    struct bfd_link_order *link_order,
1535
				    bfd_byte *data,
1577
				    bfd_byte *data,
1536
				    bfd_boolean relocatable,
1578
				    bfd_boolean relocatable,
1537
				    asymbol **symbols)
1579
				    asymbol **symbols)
1538
{
1580
{
1539
  bfd *abfd2;
1581
  bfd *abfd2;
1540
  bfd_byte *(*fn) (bfd *, struct bfd_link_info *, struct bfd_link_order *,
1582
  bfd_byte *(*fn) (bfd *, struct bfd_link_info *, struct bfd_link_order *,
1541
		   bfd_byte *, bfd_boolean, asymbol **);
1583
		   bfd_byte *, bfd_boolean, asymbol **);
1542
 
1584
 
1543
  if (link_order->type == bfd_indirect_link_order)
1585
  if (link_order->type == bfd_indirect_link_order)
1544
    {
1586
    {
1545
      abfd2 = link_order->u.indirect.section->owner;
1587
      abfd2 = link_order->u.indirect.section->owner;
1546
      if (abfd2 == NULL)
1588
      if (abfd2 == NULL)
1547
	abfd2 = abfd;
1589
	abfd2 = abfd;
1548
    }
1590
    }
1549
  else
1591
  else
1550
    abfd2 = abfd;
1592
    abfd2 = abfd;
1551
 
1593
 
1552
  fn = abfd2->xvec->_bfd_get_relocated_section_contents;
1594
  fn = abfd2->xvec->_bfd_get_relocated_section_contents;
1553
 
1595
 
1554
  return (*fn) (abfd, link_info, link_order, data, relocatable, symbols);
1596
  return (*fn) (abfd, link_info, link_order, data, relocatable, symbols);
1555
}
1597
}
1556
 
1598
 
1557
/* Record information about an ELF program header.  */
1599
/* Record information about an ELF program header.  */
1558
 
1600
 
1559
bfd_boolean
1601
bfd_boolean
1560
bfd_record_phdr (bfd *abfd,
1602
bfd_record_phdr (bfd *abfd,
1561
		 unsigned long type,
1603
		 unsigned long type,
1562
		 bfd_boolean flags_valid,
1604
		 bfd_boolean flags_valid,
1563
		 flagword flags,
1605
		 flagword flags,
1564
		 bfd_boolean at_valid,
1606
		 bfd_boolean at_valid,
1565
		 bfd_vma at,
1607
		 bfd_vma at,
1566
		 bfd_boolean includes_filehdr,
1608
		 bfd_boolean includes_filehdr,
1567
		 bfd_boolean includes_phdrs,
1609
		 bfd_boolean includes_phdrs,
1568
		 unsigned int count,
1610
		 unsigned int count,
1569
		 asection **secs)
1611
		 asection **secs)
1570
{
1612
{
1571
  struct elf_segment_map *m, **pm;
1613
  struct elf_segment_map *m, **pm;
1572
  bfd_size_type amt;
1614
  bfd_size_type amt;
1573
 
1615
 
1574
  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
1616
  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
1575
    return TRUE;
1617
    return TRUE;
1576
 
1618
 
1577
  amt = sizeof (struct elf_segment_map);
1619
  amt = sizeof (struct elf_segment_map);
1578
  amt += ((bfd_size_type) count - 1) * sizeof (asection *);
1620
  amt += ((bfd_size_type) count - 1) * sizeof (asection *);
1579
  m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
1621
  m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
1580
  if (m == NULL)
1622
  if (m == NULL)
1581
    return FALSE;
1623
    return FALSE;
1582
 
1624
 
1583
  m->p_type = type;
1625
  m->p_type = type;
1584
  m->p_flags = flags;
1626
  m->p_flags = flags;
1585
  m->p_paddr = at;
1627
  m->p_paddr = at;
1586
  m->p_flags_valid = flags_valid;
1628
  m->p_flags_valid = flags_valid;
1587
  m->p_paddr_valid = at_valid;
1629
  m->p_paddr_valid = at_valid;
1588
  m->includes_filehdr = includes_filehdr;
1630
  m->includes_filehdr = includes_filehdr;
1589
  m->includes_phdrs = includes_phdrs;
1631
  m->includes_phdrs = includes_phdrs;
1590
  m->count = count;
1632
  m->count = count;
1591
  if (count > 0)
1633
  if (count > 0)
1592
    memcpy (m->sections, secs, count * sizeof (asection *));
1634
    memcpy (m->sections, secs, count * sizeof (asection *));
1593
 
1635
 
1594
  for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
1636
  for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
1595
    ;
1637
    ;
1596
  *pm = m;
1638
  *pm = m;
1597
 
1639
 
1598
  return TRUE;
1640
  return TRUE;
1599
}
1641
}
1600
 
1642
 
1601
#ifdef BFD64
1643
#ifdef BFD64
1602
/* Return true iff this target is 32-bit.  */
1644
/* Return true iff this target is 32-bit.  */
1603
 
1645
 
1604
static bfd_boolean
1646
static bfd_boolean
1605
is32bit (bfd *abfd)
1647
is32bit (bfd *abfd)
1606
{
1648
{
1607
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1649
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1608
    {
1650
    {
1609
      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1651
      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1610
      return bed->s->elfclass == ELFCLASS32;
1652
      return bed->s->elfclass == ELFCLASS32;
1611
    }
1653
    }
1612
 
1654
 
1613
  /* For non-ELF targets, use architecture information.  */
1655
  /* For non-ELF targets, use architecture information.  */
1614
  return bfd_arch_bits_per_address (abfd) <= 32;
1656
  return bfd_arch_bits_per_address (abfd) <= 32;
1615
}
1657
}
1616
#endif
1658
#endif
1617
 
1659
 
1618
/* bfd_sprintf_vma and bfd_fprintf_vma display an address in the
1660
/* bfd_sprintf_vma and bfd_fprintf_vma display an address in the
1619
   target's address size.  */
1661
   target's address size.  */
1620
 
1662
 
1621
void
1663
void
1622
bfd_sprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, char *buf, bfd_vma value)
1664
bfd_sprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, char *buf, bfd_vma value)
1623
{
1665
{
1624
#ifdef BFD64
1666
#ifdef BFD64
1625
  if (is32bit (abfd))
1667
  if (is32bit (abfd))
1626
    {
1668
    {
1627
      sprintf (buf, "%08lx", (unsigned long) value & 0xffffffff);
1669
      sprintf (buf, "%08lx", (unsigned long) value & 0xffffffff);
1628
      return;
1670
      return;
1629
    }
1671
    }
1630
#endif
1672
#endif
1631
  sprintf_vma (buf, value);
1673
  sprintf_vma (buf, value);
1632
}
1674
}
1633
 
1675
 
1634
void
1676
void
1635
bfd_fprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, void *stream, bfd_vma value)
1677
bfd_fprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, void *stream, bfd_vma value)
1636
{
1678
{
1637
#ifdef BFD64
1679
#ifdef BFD64
1638
  if (is32bit (abfd))
1680
  if (is32bit (abfd))
1639
    {
1681
    {
1640
      fprintf ((FILE *) stream, "%08lx", (unsigned long) value & 0xffffffff);
1682
      fprintf ((FILE *) stream, "%08lx", (unsigned long) value & 0xffffffff);
1641
      return;
1683
      return;
1642
    }
1684
    }
1643
#endif
1685
#endif
1644
  fprintf_vma ((FILE *) stream, value);
1686
  fprintf_vma ((FILE *) stream, value);
1645
}
1687
}
1646
 
1688
 
1647
/*
1689
/*
1648
FUNCTION
1690
FUNCTION
1649
	bfd_alt_mach_code
1691
	bfd_alt_mach_code
1650
 
1692
 
1651
SYNOPSIS
1693
SYNOPSIS
1652
	bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
1694
	bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
1653
 
1695
 
1654
DESCRIPTION
1696
DESCRIPTION
1655
 
1697
 
1656
	When more than one machine code number is available for the
1698
	When more than one machine code number is available for the
1657
	same machine type, this function can be used to switch between
1699
	same machine type, this function can be used to switch between
1658
	the preferred one (alternative == 0) and any others.  Currently,
1700
	the preferred one (alternative == 0) and any others.  Currently,
1659
	only ELF supports this feature, with up to two alternate
1701
	only ELF supports this feature, with up to two alternate
1660
	machine codes.
1702
	machine codes.
1661
*/
1703
*/
1662
 
1704
 
1663
bfd_boolean
1705
bfd_boolean
1664
bfd_alt_mach_code (bfd *abfd, int alternative)
1706
bfd_alt_mach_code (bfd *abfd, int alternative)
1665
{
1707
{
1666
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1708
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1667
    {
1709
    {
1668
      int code;
1710
      int code;
1669
 
1711
 
1670
      switch (alternative)
1712
      switch (alternative)
1671
	{
1713
	{
1672
	case 0:
1714
	case 0:
1673
	  code = get_elf_backend_data (abfd)->elf_machine_code;
1715
	  code = get_elf_backend_data (abfd)->elf_machine_code;
1674
	  break;
1716
	  break;
1675
 
1717
 
1676
	case 1:
1718
	case 1:
1677
	  code = get_elf_backend_data (abfd)->elf_machine_alt1;
1719
	  code = get_elf_backend_data (abfd)->elf_machine_alt1;
1678
	  if (code == 0)
1720
	  if (code == 0)
1679
	    return FALSE;
1721
	    return FALSE;
1680
	  break;
1722
	  break;
1681
 
1723
 
1682
	case 2:
1724
	case 2:
1683
	  code = get_elf_backend_data (abfd)->elf_machine_alt2;
1725
	  code = get_elf_backend_data (abfd)->elf_machine_alt2;
1684
	  if (code == 0)
1726
	  if (code == 0)
1685
	    return FALSE;
1727
	    return FALSE;
1686
	  break;
1728
	  break;
1687
 
1729
 
1688
	default:
1730
	default:
1689
	  return FALSE;
1731
	  return FALSE;
1690
	}
1732
	}
1691
 
1733
 
1692
      elf_elfheader (abfd)->e_machine = code;
1734
      elf_elfheader (abfd)->e_machine = code;
1693
 
1735
 
1694
      return TRUE;
1736
      return TRUE;
1695
    }
1737
    }
1696
 
1738
 
1697
  return FALSE;
1739
  return FALSE;
1698
}
1740
}
1699
 
1741
 
1700
/*
1742
/*
1701
FUNCTION
1743
FUNCTION
1702
	bfd_emul_get_maxpagesize
1744
	bfd_emul_get_maxpagesize
1703
 
1745
 
1704
SYNOPSIS
1746
SYNOPSIS
1705
 	bfd_vma bfd_emul_get_maxpagesize (const char *);
1747
 	bfd_vma bfd_emul_get_maxpagesize (const char *);
1706
 
1748
 
1707
DESCRIPTION
1749
DESCRIPTION
1708
	Returns the maximum page size, in bytes, as determined by
1750
	Returns the maximum page size, in bytes, as determined by
1709
	emulation.
1751
	emulation.
1710
 
1752
 
1711
RETURNS
1753
RETURNS
1712
	Returns the maximum page size in bytes for ELF, 0 otherwise.
1754
	Returns the maximum page size in bytes for ELF, 0 otherwise.
1713
*/
1755
*/
1714
 
1756
 
1715
bfd_vma
1757
bfd_vma
1716
bfd_emul_get_maxpagesize (const char *emul)
1758
bfd_emul_get_maxpagesize (const char *emul)
1717
{
1759
{
1718
  const bfd_target *target;
1760
  const bfd_target *target;
1719
 
1761
 
1720
  target = bfd_find_target (emul, NULL);
1762
  target = bfd_find_target (emul, NULL);
1721
  if (target != NULL
1763
  if (target != NULL
1722
      && target->flavour == bfd_target_elf_flavour)
1764
      && target->flavour == bfd_target_elf_flavour)
1723
    return xvec_get_elf_backend_data (target)->maxpagesize;
1765
    return xvec_get_elf_backend_data (target)->maxpagesize;
1724
 
1766
 
1725
  return 0;
1767
  return 0;
1726
}
1768
}
1727
 
1769
 
1728
static void
1770
static void
1729
bfd_elf_set_pagesize (const bfd_target *target, bfd_vma size,
1771
bfd_elf_set_pagesize (const bfd_target *target, bfd_vma size,
1730
		      int offset, const bfd_target *orig_target)
1772
		      int offset, const bfd_target *orig_target)
1731
{
1773
{
1732
  if (target->flavour == bfd_target_elf_flavour)
1774
  if (target->flavour == bfd_target_elf_flavour)
1733
    {
1775
    {
1734
      const struct elf_backend_data *bed;
1776
      const struct elf_backend_data *bed;
1735
 
1777
 
1736
      bed = xvec_get_elf_backend_data (target);
1778
      bed = xvec_get_elf_backend_data (target);
1737
      *((bfd_vma *) ((char *) bed + offset)) = size;
1779
      *((bfd_vma *) ((char *) bed + offset)) = size;
1738
    }
1780
    }
1739
 
1781
 
1740
  if (target->alternative_target
1782
  if (target->alternative_target
1741
      && target->alternative_target != orig_target)
1783
      && target->alternative_target != orig_target)
1742
    bfd_elf_set_pagesize (target->alternative_target, size, offset,
1784
    bfd_elf_set_pagesize (target->alternative_target, size, offset,
1743
			  orig_target);
1785
			  orig_target);
1744
}
1786
}
1745
 
1787
 
1746
/*
1788
/*
1747
FUNCTION
1789
FUNCTION
1748
	bfd_emul_set_maxpagesize
1790
	bfd_emul_set_maxpagesize
1749
 
1791
 
1750
SYNOPSIS
1792
SYNOPSIS
1751
 	void bfd_emul_set_maxpagesize (const char *, bfd_vma);
1793
 	void bfd_emul_set_maxpagesize (const char *, bfd_vma);
1752
 
1794
 
1753
DESCRIPTION
1795
DESCRIPTION
1754
	For ELF, set the maximum page size for the emulation.  It is
1796
	For ELF, set the maximum page size for the emulation.  It is
1755
	a no-op for other formats.
1797
	a no-op for other formats.
1756
 
1798
 
1757
*/
1799
*/
1758
 
1800
 
1759
void
1801
void
1760
bfd_emul_set_maxpagesize (const char *emul, bfd_vma size)
1802
bfd_emul_set_maxpagesize (const char *emul, bfd_vma size)
1761
{
1803
{
1762
  const bfd_target *target;
1804
  const bfd_target *target;
1763
 
1805
 
1764
  target = bfd_find_target (emul, NULL);
1806
  target = bfd_find_target (emul, NULL);
1765
  if (target)
1807
  if (target)
1766
    bfd_elf_set_pagesize (target, size,
1808
    bfd_elf_set_pagesize (target, size,
1767
			  offsetof (struct elf_backend_data,
1809
			  offsetof (struct elf_backend_data,
1768
				    maxpagesize), target);
1810
				    maxpagesize), target);
1769
}
1811
}
1770
 
1812
 
1771
/*
1813
/*
1772
FUNCTION
1814
FUNCTION
1773
	bfd_emul_get_commonpagesize
1815
	bfd_emul_get_commonpagesize
1774
 
1816
 
1775
SYNOPSIS
1817
SYNOPSIS
1776
 	bfd_vma bfd_emul_get_commonpagesize (const char *);
1818
 	bfd_vma bfd_emul_get_commonpagesize (const char *);
1777
 
1819
 
1778
DESCRIPTION
1820
DESCRIPTION
1779
	Returns the common page size, in bytes, as determined by
1821
	Returns the common page size, in bytes, as determined by
1780
	emulation.
1822
	emulation.
1781
 
1823
 
1782
RETURNS
1824
RETURNS
1783
	Returns the common page size in bytes for ELF, 0 otherwise.
1825
	Returns the common page size in bytes for ELF, 0 otherwise.
1784
*/
1826
*/
1785
 
1827
 
1786
bfd_vma
1828
bfd_vma
1787
bfd_emul_get_commonpagesize (const char *emul)
1829
bfd_emul_get_commonpagesize (const char *emul)
1788
{
1830
{
1789
  const bfd_target *target;
1831
  const bfd_target *target;
1790
 
1832
 
1791
  target = bfd_find_target (emul, NULL);
1833
  target = bfd_find_target (emul, NULL);
1792
  if (target != NULL
1834
  if (target != NULL
1793
      && target->flavour == bfd_target_elf_flavour)
1835
      && target->flavour == bfd_target_elf_flavour)
1794
    return xvec_get_elf_backend_data (target)->commonpagesize;
1836
    return xvec_get_elf_backend_data (target)->commonpagesize;
1795
 
1837
 
1796
  return 0;
1838
  return 0;
1797
}
1839
}
1798
 
1840
 
1799
/*
1841
/*
1800
FUNCTION
1842
FUNCTION
1801
	bfd_emul_set_commonpagesize
1843
	bfd_emul_set_commonpagesize
1802
 
1844
 
1803
SYNOPSIS
1845
SYNOPSIS
1804
 	void bfd_emul_set_commonpagesize (const char *, bfd_vma);
1846
 	void bfd_emul_set_commonpagesize (const char *, bfd_vma);
1805
 
1847
 
1806
DESCRIPTION
1848
DESCRIPTION
1807
	For ELF, set the common page size for the emulation.  It is
1849
	For ELF, set the common page size for the emulation.  It is
1808
	a no-op for other formats.
1850
	a no-op for other formats.
1809
 
1851
 
1810
*/
1852
*/
1811
 
1853
 
1812
void
1854
void
1813
bfd_emul_set_commonpagesize (const char *emul, bfd_vma size)
1855
bfd_emul_set_commonpagesize (const char *emul, bfd_vma size)
1814
{
1856
{
1815
  const bfd_target *target;
1857
  const bfd_target *target;
1816
 
1858
 
1817
  target = bfd_find_target (emul, NULL);
1859
  target = bfd_find_target (emul, NULL);
1818
  if (target)
1860
  if (target)
1819
    bfd_elf_set_pagesize (target, size,
1861
    bfd_elf_set_pagesize (target, size,
1820
			  offsetof (struct elf_backend_data,
1862
			  offsetof (struct elf_backend_data,
1821
				    commonpagesize), target);
1863
				    commonpagesize), target);
1822
}
1864
}
1823
 
1865
 
1824
/*
1866
/*
1825
FUNCTION
1867
FUNCTION
1826
	bfd_demangle
1868
	bfd_demangle
1827
 
1869
 
1828
SYNOPSIS
1870
SYNOPSIS
1829
	char *bfd_demangle (bfd *, const char *, int);
1871
	char *bfd_demangle (bfd *, const char *, int);
1830
 
1872
 
1831
DESCRIPTION
1873
DESCRIPTION
1832
	Wrapper around cplus_demangle.  Strips leading underscores and
1874
	Wrapper around cplus_demangle.  Strips leading underscores and
1833
	other such chars that would otherwise confuse the demangler.
1875
	other such chars that would otherwise confuse the demangler.
1834
	If passed a g++ v3 ABI mangled name, returns a buffer allocated
1876
	If passed a g++ v3 ABI mangled name, returns a buffer allocated
1835
	with malloc holding the demangled name.  Returns NULL otherwise
1877
	with malloc holding the demangled name.  Returns NULL otherwise
1836
	and on memory alloc failure.
1878
	and on memory alloc failure.
1837
*/
1879
*/
1838
 
1880
 
1839
char *
1881
char *
1840
bfd_demangle (bfd *abfd, const char *name, int options)
1882
bfd_demangle (bfd *abfd, const char *name, int options)
1841
{
1883
{
1842
  char *res, *alloc;
1884
  char *res, *alloc;
1843
  const char *pre, *suf;
1885
  const char *pre, *suf;
1844
  size_t pre_len;
1886
  size_t pre_len;
1845
  bfd_boolean skip_lead;
1887
  bfd_boolean skip_lead;
1846
 
1888
 
1847
  skip_lead = (abfd != NULL
1889
  skip_lead = (abfd != NULL
1848
	       && *name != '\0'
1890
	       && *name != '\0'
1849
	       && bfd_get_symbol_leading_char (abfd) == *name);
1891
	       && bfd_get_symbol_leading_char (abfd) == *name);
1850
  if (skip_lead)
1892
  if (skip_lead)
1851
    ++name;
1893
    ++name;
1852
 
1894
 
1853
  /* This is a hack for better error reporting on XCOFF, PowerPC64-ELF
1895
  /* This is a hack for better error reporting on XCOFF, PowerPC64-ELF
1854
     or the MS PE format.  These formats have a number of leading '.'s
1896
     or the MS PE format.  These formats have a number of leading '.'s
1855
     on at least some symbols, so we remove all dots to avoid
1897
     on at least some symbols, so we remove all dots to avoid
1856
     confusing the demangler.  */
1898
     confusing the demangler.  */
1857
  pre = name;
1899
  pre = name;
1858
  while (*name == '.' || *name == '$')
1900
  while (*name == '.' || *name == '$')
1859
    ++name;
1901
    ++name;
1860
  pre_len = name - pre;
1902
  pre_len = name - pre;
1861
 
1903
 
1862
  /* Strip off @plt and suchlike too.  */
1904
  /* Strip off @plt and suchlike too.  */
1863
  alloc = NULL;
1905
  alloc = NULL;
1864
  suf = strchr (name, '@');
1906
  suf = strchr (name, '@');
1865
  if (suf != NULL)
1907
  if (suf != NULL)
1866
    {
1908
    {
1867
      alloc = (char *) bfd_malloc (suf - name + 1);
1909
      alloc = (char *) bfd_malloc (suf - name + 1);
1868
      if (alloc == NULL)
1910
      if (alloc == NULL)
1869
	return NULL;
1911
	return NULL;
1870
      memcpy (alloc, name, suf - name);
1912
      memcpy (alloc, name, suf - name);
1871
      alloc[suf - name] = '\0';
1913
      alloc[suf - name] = '\0';
1872
      name = alloc;
1914
      name = alloc;
1873
    }
1915
    }
1874
 
1916
 
1875
  res = cplus_demangle (name, options);
1917
  res = cplus_demangle (name, options);
1876
 
1918
 
1877
  if (alloc != NULL)
1919
  if (alloc != NULL)
1878
    free (alloc);
1920
    free (alloc);
1879
 
1921
 
1880
  if (res == NULL)
1922
  if (res == NULL)
1881
    {
1923
    {
1882
      if (skip_lead)
1924
      if (skip_lead)
1883
	{
1925
	{
1884
	  size_t len = strlen (pre) + 1;
1926
	  size_t len = strlen (pre) + 1;
1885
	  alloc = (char *) bfd_malloc (len);
1927
	  alloc = (char *) bfd_malloc (len);
1886
	  if (alloc == NULL)
1928
	  if (alloc == NULL)
1887
	    return NULL;
1929
	    return NULL;
1888
	  memcpy (alloc, pre, len);
1930
	  memcpy (alloc, pre, len);
1889
	  return alloc;
1931
	  return alloc;
1890
	}
1932
	}
1891
      return NULL;
1933
      return NULL;
1892
    }
1934
    }
1893
 
1935
 
1894
  /* Put back any prefix or suffix.  */
1936
  /* Put back any prefix or suffix.  */
1895
  if (pre_len != 0 || suf != NULL)
1937
  if (pre_len != 0 || suf != NULL)
1896
    {
1938
    {
1897
      size_t len;
1939
      size_t len;
1898
      size_t suf_len;
1940
      size_t suf_len;
1899
      char *final;
1941
      char *final;
1900
 
1942
 
1901
      len = strlen (res);
1943
      len = strlen (res);
1902
      if (suf == NULL)
1944
      if (suf == NULL)
1903
	suf = res + len;
1945
	suf = res + len;
1904
      suf_len = strlen (suf) + 1;
1946
      suf_len = strlen (suf) + 1;
1905
      final = (char *) bfd_malloc (pre_len + len + suf_len);
1947
      final = (char *) bfd_malloc (pre_len + len + suf_len);
1906
      if (final != NULL)
1948
      if (final != NULL)
1907
	{
1949
	{
1908
	  memcpy (final, pre, pre_len);
1950
	  memcpy (final, pre, pre_len);
1909
	  memcpy (final + pre_len, res, len);
1951
	  memcpy (final + pre_len, res, len);
1910
	  memcpy (final + pre_len + len, suf, suf_len);
1952
	  memcpy (final + pre_len + len, suf, suf_len);
1911
	}
1953
	}
1912
      free (res);
1954
      free (res);
1913
      res = final;
1955
      res = final;
1914
    }
1956
    }
1915
 
1957
 
1916
  return res;
1958
  return res;
1917
}
1959
}
-
 
1960
 
-
 
1961
/*
-
 
1962
FUNCTION
-
 
1963
	bfd_update_compression_header
-
 
1964
 
-
 
1965
SYNOPSIS
-
 
1966
	void bfd_update_compression_header
-
 
1967
	  (bfd *abfd, bfd_byte *contents, asection *sec);
-
 
1968
 
-
 
1969
DESCRIPTION
-
 
1970
	Set the compression header at CONTENTS of SEC in ABFD and update
-
 
1971
	elf_section_flags for compression.
-
 
1972
*/
-
 
1973
 
-
 
1974
void
-
 
1975
bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
-
 
1976
			       asection *sec)
-
 
1977
{
-
 
1978
  if ((abfd->flags & BFD_COMPRESS) != 0)
-
 
1979
    {
-
 
1980
      if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
-
 
1981
	{
-
 
1982
	  if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
-
 
1983
	    {
-
 
1984
	      const struct elf_backend_data *bed
-
 
1985
		= get_elf_backend_data (abfd);
-
 
1986
 
-
 
1987
	      /* Set the SHF_COMPRESSED bit.  */
-
 
1988
	      elf_section_flags (sec) |= SHF_COMPRESSED;
-
 
1989
 
-
 
1990
	      if (bed->s->elfclass == ELFCLASS32)
-
 
1991
		{
-
 
1992
		  Elf32_External_Chdr *echdr
-
 
1993
		    = (Elf32_External_Chdr *) contents;
-
 
1994
		  bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
-
 
1995
		  bfd_put_32 (abfd, sec->size, &echdr->ch_size);
-
 
1996
		  bfd_put_32 (abfd, 1 << sec->alignment_power,
-
 
1997
			      &echdr->ch_addralign);
-
 
1998
		}
-
 
1999
	      else
-
 
2000
		{
-
 
2001
		  Elf64_External_Chdr *echdr
-
 
2002
		    = (Elf64_External_Chdr *) contents;
-
 
2003
		  bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
-
 
2004
		  bfd_put_32 (abfd, 0, &echdr->ch_reserved);
-
 
2005
		  bfd_put_64 (abfd, sec->size, &echdr->ch_size);
-
 
2006
		  bfd_put_64 (abfd, 1 << sec->alignment_power,
-
 
2007
			      &echdr->ch_addralign);
-
 
2008
		}
-
 
2009
	    }
-
 
2010
	  else
-
 
2011
	    {
-
 
2012
	      /* Clear the SHF_COMPRESSED bit.  */
-
 
2013
	      elf_section_flags (sec) &= ~SHF_COMPRESSED;
-
 
2014
 
-
 
2015
	      /* Write the zlib header.  It should be "ZLIB" followed by
-
 
2016
		 the uncompressed section size, 8 bytes in big-endian
-
 
2017
		 order.  */
-
 
2018
	      memcpy (contents, "ZLIB", 4);
-
 
2019
	      bfd_putb64 (sec->size, contents + 4);
-
 
2020
	    }
-
 
2021
	}
-
 
2022
    }
-
 
2023
  else
-
 
2024
    abort ();
-
 
2025
}
-
 
2026
 
-
 
2027
/*
-
 
2028
   FUNCTION
-
 
2029
   bfd_check_compression_header
-
 
2030
 
-
 
2031
   SYNOPSIS
-
 
2032
	bfd_boolean bfd_check_compression_header
-
 
2033
	  (bfd *abfd, bfd_byte *contents, asection *sec,
-
 
2034
	  bfd_size_type *uncompressed_size);
-
 
2035
 
-
 
2036
DESCRIPTION
-
 
2037
	Check the compression header at CONTENTS of SEC in ABFD and
-
 
2038
	store the uncompressed size in UNCOMPRESSED_SIZE if the
-
 
2039
	compression header is valid.
-
 
2040
 
-
 
2041
RETURNS
-
 
2042
	Return TRUE if the compression header is valid.
-
 
2043
*/
-
 
2044
 
-
 
2045
bfd_boolean
-
 
2046
bfd_check_compression_header (bfd *abfd, bfd_byte *contents,
-
 
2047
			      asection *sec,
-
 
2048
			      bfd_size_type *uncompressed_size)
-
 
2049
{
-
 
2050
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
-
 
2051
      && (elf_section_flags (sec) & SHF_COMPRESSED) != 0)
-
 
2052
    {
-
 
2053
      Elf_Internal_Chdr chdr;
-
 
2054
      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
-
 
2055
      if (bed->s->elfclass == ELFCLASS32)
-
 
2056
	{
-
 
2057
	  Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
-
 
2058
	  chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
-
 
2059
	  chdr.ch_size = bfd_get_32 (abfd, &echdr->ch_size);
-
 
2060
	  chdr.ch_addralign = bfd_get_32 (abfd, &echdr->ch_addralign);
-
 
2061
	}
-
 
2062
      else
-
 
2063
	{
-
 
2064
	  Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
-
 
2065
	  chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
-
 
2066
	  chdr.ch_size = bfd_get_64 (abfd, &echdr->ch_size);
-
 
2067
	  chdr.ch_addralign = bfd_get_64 (abfd, &echdr->ch_addralign);
-
 
2068
	}
-
 
2069
      if (chdr.ch_type == ELFCOMPRESS_ZLIB
-
 
2070
	  && chdr.ch_addralign == 1U << sec->alignment_power)
-
 
2071
	{
-
 
2072
	  *uncompressed_size = chdr.ch_size;
-
 
2073
	  return TRUE;
-
 
2074
	}
-
 
2075
    }
-
 
2076
 
-
 
2077
  return FALSE;
-
 
2078
}
-
 
2079
 
-
 
2080
/*
-
 
2081
FUNCTION
-
 
2082
	bfd_get_compression_header_size
-
 
2083
 
-
 
2084
SYNOPSIS
-
 
2085
	int bfd_get_compression_header_size (bfd *abfd, asection *sec);
-
 
2086
 
-
 
2087
DESCRIPTION
-
 
2088
	Return the size of the compression header of SEC in ABFD.
-
 
2089
 
-
 
2090
RETURNS
-
 
2091
	Return the size of the compression header in bytes.
-
 
2092
*/
-
 
2093
 
-
 
2094
int
-
 
2095
bfd_get_compression_header_size (bfd *abfd, asection *sec)
-
 
2096
{
-
 
2097
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
-
 
2098
    {
-
 
2099
      if (sec == NULL)
-
 
2100
	{
-
 
2101
	  if (!(abfd->flags & BFD_COMPRESS_GABI))
-
 
2102
	    return 0;
-
 
2103
	}
-
 
2104
      else if (!(elf_section_flags (sec) & SHF_COMPRESSED))
-
 
2105
	return 0;
-
 
2106
 
-
 
2107
      if (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS32)
-
 
2108
	return sizeof (Elf32_External_Chdr);
-
 
2109
      else
-
 
2110
	return sizeof (Elf64_External_Chdr);
-
 
2111
    }
-
 
2112
 
-
 
2113
  return 0;
-
 
2114
}
-
 
2115
 
-
 
2116
/*
-
 
2117
FUNCTION
-
 
2118
	bfd_convert_section_size
-
 
2119
 
-
 
2120
SYNOPSIS
-
 
2121
	bfd_size_type bfd_convert_section_size
-
 
2122
	  (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size);
-
 
2123
 
-
 
2124
DESCRIPTION
-
 
2125
	Convert the size @var{size} of the section @var{isec} in input
-
 
2126
	BFD @var{ibfd} to the section size in output BFD @var{obfd}.
-
 
2127
*/
-
 
2128
 
-
 
2129
bfd_size_type
-
 
2130
bfd_convert_section_size (bfd *ibfd, sec_ptr isec, bfd *obfd,
-
 
2131
			  bfd_size_type size)
-
 
2132
{
-
 
2133
  bfd_size_type hdr_size;
-
 
2134
 
-
 
2135
  /* Do nothing if input file will be decompressed.  */
-
 
2136
  if ((ibfd->flags & BFD_DECOMPRESS))
-
 
2137
    return size;
-
 
2138
 
-
 
2139
  /* Do nothing if either input or output aren't ELF.  */
-
 
2140
  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
-
 
2141
      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-
 
2142
    return size;
-
 
2143
 
-
 
2144
  /* Do nothing if ELF classes of input and output are the same. */
-
 
2145
  if (get_elf_backend_data (ibfd)->s->elfclass
-
 
2146
      == get_elf_backend_data (obfd)->s->elfclass)
-
 
2147
    return size;
-
 
2148
 
-
 
2149
  /* Do nothing if the input section isn't a SHF_COMPRESSED section. */
-
 
2150
  hdr_size = bfd_get_compression_header_size (ibfd, isec);
-
 
2151
  if (hdr_size == 0)
-
 
2152
    return size;
-
 
2153
 
-
 
2154
  /* Adjust the size of the output SHF_COMPRESSED section.  */
-
 
2155
  if (hdr_size == sizeof (Elf32_External_Chdr))
-
 
2156
    return (size - sizeof (Elf32_External_Chdr)
-
 
2157
	    + sizeof (Elf64_External_Chdr));
-
 
2158
  else
-
 
2159
    return (size - sizeof (Elf64_External_Chdr)
-
 
2160
	    + sizeof (Elf32_External_Chdr));
-
 
2161
}
-
 
2162
 
-
 
2163
/*
-
 
2164
FUNCTION
-
 
2165
	bfd_convert_section_contents
-
 
2166
 
-
 
2167
SYNOPSIS
-
 
2168
	bfd_boolean bfd_convert_section_contents
-
 
2169
	  (bfd *ibfd, asection *isec, bfd *obfd,
-
 
2170
	   bfd_byte **ptr, bfd_size_type *ptr_size);
-
 
2171
 
-
 
2172
DESCRIPTION
-
 
2173
	Convert the contents, stored in @var{*ptr}, of the section
-
 
2174
	@var{isec} in input BFD @var{ibfd} to output BFD @var{obfd}
-
 
2175
	if needed.  The original buffer pointed to by @var{*ptr} may
-
 
2176
	be freed and @var{*ptr} is returned with memory malloc'd by this
-
 
2177
	function, and the new size written to @var{ptr_size}.
-
 
2178
*/
-
 
2179
 
-
 
2180
bfd_boolean
-
 
2181
bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
-
 
2182
			      bfd_byte **ptr, bfd_size_type *ptr_size)
-
 
2183
{
-
 
2184
  bfd_byte *contents;
-
 
2185
  bfd_size_type ihdr_size, ohdr_size, size;
-
 
2186
  Elf_Internal_Chdr chdr;
-
 
2187
  bfd_boolean use_memmove;
-
 
2188
 
-
 
2189
  /* Do nothing if input file will be decompressed.  */
-
 
2190
  if ((ibfd->flags & BFD_DECOMPRESS))
-
 
2191
    return TRUE;
-
 
2192
 
-
 
2193
  /* Do nothing if either input or output aren't ELF.  */
-
 
2194
  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
-
 
2195
      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-
 
2196
    return TRUE;
-
 
2197
 
-
 
2198
  /* Do nothing if ELF classes of input and output are the same. */
-
 
2199
  if (get_elf_backend_data (ibfd)->s->elfclass
-
 
2200
      == get_elf_backend_data (obfd)->s->elfclass)
-
 
2201
    return TRUE;
-
 
2202
 
-
 
2203
  /* Do nothing if the input section isn't a SHF_COMPRESSED section. */
-
 
2204
  ihdr_size = bfd_get_compression_header_size (ibfd, isec);
-
 
2205
  if (ihdr_size == 0)
-
 
2206
    return TRUE;
-
 
2207
 
-
 
2208
  contents = *ptr;
-
 
2209
 
-
 
2210
  /* Convert the contents of the input SHF_COMPRESSED section to
-
 
2211
     output.  Get the input compression header and the size of the
-
 
2212
     output compression header.  */
-
 
2213
  if (ihdr_size == sizeof (Elf32_External_Chdr))
-
 
2214
    {
-
 
2215
      Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
-
 
2216
      chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
-
 
2217
      chdr.ch_size = bfd_get_32 (ibfd, &echdr->ch_size);
-
 
2218
      chdr.ch_addralign = bfd_get_32 (ibfd, &echdr->ch_addralign);
-
 
2219
 
-
 
2220
      ohdr_size = sizeof (Elf64_External_Chdr);
-
 
2221
 
-
 
2222
      use_memmove = FALSE;
-
 
2223
    }
-
 
2224
  else
-
 
2225
    {
-
 
2226
      Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
-
 
2227
      chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
-
 
2228
      chdr.ch_size = bfd_get_64 (ibfd, &echdr->ch_size);
-
 
2229
      chdr.ch_addralign = bfd_get_64 (ibfd, &echdr->ch_addralign);
-
 
2230
 
-
 
2231
      ohdr_size = sizeof (Elf32_External_Chdr);
-
 
2232
      use_memmove = TRUE;
-
 
2233
    }
-
 
2234
 
-
 
2235
  size = bfd_get_section_size (isec) - ihdr_size + ohdr_size;
-
 
2236
  if (!use_memmove)
-
 
2237
    {
-
 
2238
      contents = (bfd_byte *) bfd_malloc (size);
-
 
2239
      if (contents == NULL)
-
 
2240
	return FALSE;
-
 
2241
    }
-
 
2242
 
-
 
2243
  /* Write out the output compression header.  */
-
 
2244
  if (ohdr_size == sizeof (Elf32_External_Chdr))
-
 
2245
    {
-
 
2246
      Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
-
 
2247
      bfd_put_32 (obfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
-
 
2248
      bfd_put_32 (obfd, chdr.ch_size, &echdr->ch_size);
-
 
2249
      bfd_put_32 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
-
 
2250
    }
-
 
2251
  else
-
 
2252
    {
-
 
2253
      Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
-
 
2254
      bfd_put_32 (obfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
-
 
2255
      bfd_put_32 (obfd, 0, &echdr->ch_reserved);
-
 
2256
      bfd_put_64 (obfd, chdr.ch_size, &echdr->ch_size);
-
 
2257
      bfd_put_64 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
-
 
2258
    }
-
 
2259
 
-
 
2260
  /* Copy the compressed contents.  */
-
 
2261
  if (use_memmove)
-
 
2262
    memmove (contents + ohdr_size, *ptr + ihdr_size, size - ohdr_size);
-
 
2263
  else
-
 
2264
    {
-
 
2265
      memcpy (contents + ohdr_size, *ptr + ihdr_size, size - ohdr_size);
-
 
2266
      free (*ptr);
-
 
2267
      *ptr = contents;
-
 
2268
    }
-
 
2269
 
-
 
2270
  *ptr_size = size;
-
 
2271
  return TRUE;
-
 
2272
}