bfd/
[deliverable/binutils-gdb.git] / bfd / section.c
CommitLineData
252b5132 1/* Object file "section" support for the BFD library.
7898deda 2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
72adc230 3 2000, 2001, 2002, 2003, 2004
252b5132
RH
4 Free Software Foundation, Inc.
5 Written by Cygnus Support.
6
7This file is part of BFD, the Binary File Descriptor library.
8
9This program is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2 of the License, or
12(at your option) any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with this program; if not, write to the Free Software
21Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
22
23/*
24SECTION
25 Sections
26
27 The raw data contained within a BFD is maintained through the
28 section abstraction. A single BFD may have any number of
29 sections. It keeps hold of them by pointing to the first;
30 each one points to the next in the list.
31
32 Sections are supported in BFD in <<section.c>>.
33
34@menu
35@* Section Input::
36@* Section Output::
37@* typedef asection::
38@* section prototypes::
39@end menu
40
41INODE
42Section Input, Section Output, Sections, Sections
43SUBSECTION
44 Section input
45
46 When a BFD is opened for reading, the section structures are
47 created and attached to the BFD.
48
49 Each section has a name which describes the section in the
50 outside world---for example, <<a.out>> would contain at least
51 three sections, called <<.text>>, <<.data>> and <<.bss>>.
52
53 Names need not be unique; for example a COFF file may have several
54 sections named <<.data>>.
55
56 Sometimes a BFD will contain more than the ``natural'' number of
57 sections. A back end may attach other sections containing
58 constructor data, or an application may add a section (using
59 <<bfd_make_section>>) to the sections attached to an already open
60 BFD. For example, the linker creates an extra section
61 <<COMMON>> for each input file's BFD to hold information about
62 common storage.
63
64 The raw data is not necessarily read in when
65 the section descriptor is created. Some targets may leave the
66 data in place until a <<bfd_get_section_contents>> call is
67 made. Other back ends may read in all the data at once. For
68 example, an S-record file has to be read once to determine the
69 size of the data. An IEEE-695 file doesn't contain raw data in
70 sections, but data and relocation expressions intermixed, so
71 the data area has to be parsed to get out the data and
72 relocations.
73
74INODE
75Section Output, typedef asection, Section Input, Sections
76
77SUBSECTION
78 Section output
79
80 To write a new object style BFD, the various sections to be
81 written have to be created. They are attached to the BFD in
82 the same way as input sections; data is written to the
83 sections using <<bfd_set_section_contents>>.
84
85 Any program that creates or combines sections (e.g., the assembler
86 and linker) must use the <<asection>> fields <<output_section>> and
87 <<output_offset>> to indicate the file sections to which each
88 section must be written. (If the section is being created from
89 scratch, <<output_section>> should probably point to the section
90 itself and <<output_offset>> should probably be zero.)
91
92 The data to be written comes from input sections attached
93 (via <<output_section>> pointers) to
94 the output sections. The output section structure can be
95 considered a filter for the input section: the output section
96 determines the vma of the output data and the name, but the
97 input section determines the offset into the output section of
98 the data to be written.
99
100 E.g., to create a section "O", starting at 0x100, 0x123 long,
101 containing two subsections, "A" at offset 0x0 (i.e., at vma
102 0x100) and "B" at offset 0x20 (i.e., at vma 0x120) the <<asection>>
103 structures would look like:
104
105| section name "A"
106| output_offset 0x00
107| size 0x20
108| output_section -----------> section name "O"
109| | vma 0x100
110| section name "B" | size 0x123
111| output_offset 0x20 |
112| size 0x103 |
113| output_section --------|
114
252b5132
RH
115SUBSECTION
116 Link orders
117
118 The data within a section is stored in a @dfn{link_order}.
119 These are much like the fixups in <<gas>>. The link_order
120 abstraction allows a section to grow and shrink within itself.
121
122 A link_order knows how big it is, and which is the next
123 link_order and where the raw data for it is; it also points to
124 a list of relocations which apply to it.
125
126 The link_order is used by the linker to perform relaxing on
127 final code. The compiler creates code which is as big as
128 necessary to make it work without relaxing, and the user can
129 select whether to relax. Sometimes relaxing takes a lot of
130 time. The linker runs around the relocations to see if any
131 are attached to data which can be shrunk, if so it does it on
132 a link_order by link_order basis.
133
134*/
135
252b5132
RH
136#include "bfd.h"
137#include "sysdep.h"
138#include "libbfd.h"
139#include "bfdlink.h"
140
141/*
142DOCDD
143INODE
144typedef asection, section prototypes, Section Output, Sections
145SUBSECTION
146 typedef asection
147
148 Here is the section structure:
149
150CODE_FRAGMENT
151.
52b219b5
AM
152.{* This structure is used for a comdat section, as in PE. A comdat
153. section is associated with a particular symbol. When the linker
154. sees a comdat section, it keeps only one of the sections with a
155. given name and associated with a given symbol. *}
022a5af4
ILT
156.
157.struct bfd_comdat_info
158.{
159. {* The name of the symbol associated with a comdat section. *}
160. const char *name;
161.
162. {* The local symbol table index of the symbol associated with a
163. comdat section. This is only meaningful to the object file format
164. specific code; it is not an index into the list returned by
165. bfd_canonicalize_symtab. *}
166. long symbol;
022a5af4
ILT
167.};
168.
198beae2 169.typedef struct bfd_section
252b5132 170.{
52b219b5
AM
171. {* The name of the section; the name isn't a copy, the pointer is
172. the same as that passed to bfd_make_section. *}
52b219b5
AM
173. const char *name;
174.
175. {* A unique sequence number. *}
52b219b5 176. int id;
252b5132 177.
dbb410c3 178. {* Which section in the bfd; 0..n-1 as sections are created in a bfd. *}
52b219b5 179. int index;
252b5132 180.
52b219b5 181. {* The next section in the list belonging to the BFD, or NULL. *}
198beae2 182. struct bfd_section *next;
252b5132 183.
52b219b5
AM
184. {* The field flags contains attributes of the section. Some
185. flags are read in from the object file, and some are
186. synthesized from other information. *}
52b219b5 187. flagword flags;
252b5132
RH
188.
189.#define SEC_NO_FLAGS 0x000
190.
52b219b5
AM
191. {* Tells the OS to allocate space for this section when loading.
192. This is clear for a section containing debug information only. *}
252b5132
RH
193.#define SEC_ALLOC 0x001
194.
52b219b5
AM
195. {* Tells the OS to load the section from the file when loading.
196. This is clear for a .bss section. *}
252b5132
RH
197.#define SEC_LOAD 0x002
198.
52b219b5
AM
199. {* The section contains data still to be relocated, so there is
200. some relocation information too. *}
252b5132
RH
201.#define SEC_RELOC 0x004
202.
65db3b0d
RH
203. {* ELF reserves 4 processor specific bits and 8 operating system
204. specific bits in sh_flags; at present we can get away with just
205. one in communicating between the assembler and BFD, but this
206. isn't a good long-term solution. *}
207.#define SEC_ARCH_BIT_0 0x008
252b5132 208.
52b219b5 209. {* A signal to the OS that the section contains read only data. *}
252b5132
RH
210.#define SEC_READONLY 0x010
211.
52b219b5 212. {* The section contains code only. *}
252b5132
RH
213.#define SEC_CODE 0x020
214.
52b219b5 215. {* The section contains data only. *}
252b5132
RH
216.#define SEC_DATA 0x040
217.
52b219b5 218. {* The section will reside in ROM. *}
252b5132
RH
219.#define SEC_ROM 0x080
220.
52b219b5
AM
221. {* The section contains constructor information. This section
222. type is used by the linker to create lists of constructors and
223. destructors used by <<g++>>. When a back end sees a symbol
224. which should be used in a constructor list, it creates a new
225. section for the type of name (e.g., <<__CTOR_LIST__>>), attaches
226. the symbol to it, and builds a relocation. To build the lists
227. of constructors, all the linker has to do is catenate all the
228. sections called <<__CTOR_LIST__>> and relocate the data
229. contained within - exactly the operations it would peform on
230. standard data. *}
252b5132
RH
231.#define SEC_CONSTRUCTOR 0x100
232.
52b219b5
AM
233. {* The section has contents - a data section could be
234. <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>; a debug section could be
235. <<SEC_HAS_CONTENTS>> *}
252b5132
RH
236.#define SEC_HAS_CONTENTS 0x200
237.
52b219b5
AM
238. {* An instruction to the linker to not output the section
239. even if it has information which would normally be written. *}
252b5132
RH
240.#define SEC_NEVER_LOAD 0x400
241.
52b219b5
AM
242. {* The section is a COFF shared library section. This flag is
243. only for the linker. If this type of section appears in
244. the input file, the linker must copy it to the output file
245. without changing the vma or size. FIXME: Although this
246. was originally intended to be general, it really is COFF
247. specific (and the flag was renamed to indicate this). It
248. might be cleaner to have some more general mechanism to
249. allow the back end to control what the linker does with
250. sections. *}
252b5132
RH
251.#define SEC_COFF_SHARED_LIBRARY 0x800
252.
13ae64f3
JJ
253. {* The section contains thread local data. *}
254.#define SEC_THREAD_LOCAL 0x1000
255.
1bd91689
AM
256. {* The section has GOT references. This flag is only for the
257. linker, and is currently only used by the elf32-hppa back end.
258. It will be set if global offset table references were detected
259. in this section, which indicate to the linker that the section
260. contains PIC code, and must be handled specially when doing a
261. static link. *}
262.#define SEC_HAS_GOT_REF 0x4000
263.
52b219b5
AM
264. {* The section contains common symbols (symbols may be defined
265. multiple times, the value of a symbol is the amount of
266. space it requires, and the largest symbol value is the one
267. used). Most targets have exactly one of these (which we
268. translate to bfd_com_section_ptr), but ECOFF has two. *}
252b5132
RH
269.#define SEC_IS_COMMON 0x8000
270.
52b219b5
AM
271. {* The section contains only debugging information. For
272. example, this is set for ELF .debug and .stab sections.
273. strip tests this flag to see if a section can be
274. discarded. *}
252b5132
RH
275.#define SEC_DEBUGGING 0x10000
276.
52b219b5
AM
277. {* The contents of this section are held in memory pointed to
278. by the contents field. This is checked by bfd_get_section_contents,
279. and the data is retrieved from memory if appropriate. *}
252b5132
RH
280.#define SEC_IN_MEMORY 0x20000
281.
52b219b5
AM
282. {* The contents of this section are to be excluded by the
283. linker for executable and shared objects unless those
284. objects are to be further relocated. *}
252b5132
RH
285.#define SEC_EXCLUDE 0x40000
286.
dbb410c3
AM
287. {* The contents of this section are to be sorted based on the sum of
288. the symbol and addend values specified by the associated relocation
289. entries. Entries without associated relocation entries will be
290. appended to the end of the section in an unspecified order. *}
252b5132
RH
291.#define SEC_SORT_ENTRIES 0x80000
292.
52b219b5
AM
293. {* When linking, duplicate sections of the same name should be
294. discarded, rather than being combined into a single section as
295. is usually done. This is similar to how common symbols are
296. handled. See SEC_LINK_DUPLICATES below. *}
252b5132
RH
297.#define SEC_LINK_ONCE 0x100000
298.
52b219b5
AM
299. {* If SEC_LINK_ONCE is set, this bitfield describes how the linker
300. should handle duplicate sections. *}
252b5132
RH
301.#define SEC_LINK_DUPLICATES 0x600000
302.
52b219b5
AM
303. {* This value for SEC_LINK_DUPLICATES means that duplicate
304. sections with the same name should simply be discarded. *}
252b5132
RH
305.#define SEC_LINK_DUPLICATES_DISCARD 0x0
306.
52b219b5
AM
307. {* This value for SEC_LINK_DUPLICATES means that the linker
308. should warn if there are any duplicate sections, although
309. it should still only link one copy. *}
252b5132
RH
310.#define SEC_LINK_DUPLICATES_ONE_ONLY 0x200000
311.
52b219b5
AM
312. {* This value for SEC_LINK_DUPLICATES means that the linker
313. should warn if any duplicate sections are a different size. *}
252b5132
RH
314.#define SEC_LINK_DUPLICATES_SAME_SIZE 0x400000
315.
52b219b5
AM
316. {* This value for SEC_LINK_DUPLICATES means that the linker
317. should warn if any duplicate sections contain different
318. contents. *}
252b5132
RH
319.#define SEC_LINK_DUPLICATES_SAME_CONTENTS 0x600000
320.
52b219b5
AM
321. {* This section was created by the linker as part of dynamic
322. relocation or other arcane processing. It is skipped when
323. going through the first-pass output, trusting that someone
324. else up the line will take care of it later. *}
252b5132
RH
325.#define SEC_LINKER_CREATED 0x800000
326.
52b219b5 327. {* This section should not be subject to garbage collection. *}
252b5132
RH
328.#define SEC_KEEP 0x1000000
329.
52b219b5
AM
330. {* This section contains "short" data, and should be placed
331. "near" the GP. *}
851edbaf 332.#define SEC_SMALL_DATA 0x2000000
0c3ff40b 333.
52b219b5
AM
334. {* This section contains data which may be shared with other
335. executables or shared objects. *}
bd826630
ILT
336.#define SEC_SHARED 0x4000000
337.
52b219b5
AM
338. {* When a section with this flag is being linked, then if the size of
339. the input section is less than a page, it should not cross a page
340. boundary. If the size of the input section is one page or more, it
341. should be aligned on a page boundary. *}
34cbe64e
TW
342.#define SEC_BLOCK 0x8000000
343.
52b219b5
AM
344. {* Conditionally link this section; do not link if there are no
345. references found to any symbol in the section. *}
34cbe64e
TW
346.#define SEC_CLINK 0x10000000
347.
2dd439c5
L
348. {* Attempt to merge identical entities in the section.
349. Entity size is given in the entsize field. *}
350.#define SEC_MERGE 0x20000000
351.
352. {* If given with SEC_MERGE, entities to merge are zero terminated
353. strings where entsize specifies character size instead of fixed
354. size entries. *}
355.#define SEC_STRINGS 0x40000000
356.
dbb410c3
AM
357. {* This section contains data about section groups. *}
358.#define SEC_GROUP 0x80000000
359.
52b219b5 360. {* End of section flags. *}
252b5132 361.
52b219b5 362. {* Some internal packed boolean fields. *}
252b5132 363.
52b219b5
AM
364. {* See the vma field. *}
365. unsigned int user_set_vma : 1;
252b5132 366.
52b219b5
AM
367. {* A mark flag used by some of the linker backends. *}
368. unsigned int linker_mark : 1;
252b5132 369.
d1778b88 370. {* Another mark flag used by some of the linker backends. Set for
08da05b0 371. output sections that have an input section. *}
d1778b88
AM
372. unsigned int linker_has_input : 1;
373.
52b219b5
AM
374. {* A mark flag used by some linker backends for garbage collection. *}
375. unsigned int gc_mark : 1;
252b5132 376.
68bfbfcc
AM
377. {* The following flags are used by the ELF linker. *}
378.
379. {* Mark sections which have been allocated to segments. *}
bc67d8a6
NC
380. unsigned int segment_mark : 1;
381.
68bfbfcc
AM
382. {* Type of sec_info information. *}
383. unsigned int sec_info_type:3;
384.#define ELF_INFO_TYPE_NONE 0
385.#define ELF_INFO_TYPE_STABS 1
386.#define ELF_INFO_TYPE_MERGE 2
387.#define ELF_INFO_TYPE_EH_FRAME 3
388.#define ELF_INFO_TYPE_JUST_SYMS 4
389.
390. {* Nonzero if this section uses RELA relocations, rather than REL. *}
391. unsigned int use_rela_p:1;
392.
393. {* Bits used by various backends. *}
68bfbfcc 394.
911d08a7
AM
395. {* Nonzero if this section has TLS related relocations. *}
396. unsigned int has_tls_reloc:1;
c7996ad6 397.
ad8e1ba5
AM
398. {* Nonzero if this section has a gp reloc. *}
399. unsigned int has_gp_reloc:1;
400.
911d08a7
AM
401. {* Nonzero if this section needs the relax finalize pass. *}
402. unsigned int need_finalize_relax:1;
403.
404. {* Whether relocations have been processed. *}
405. unsigned int reloc_done : 1;
68bfbfcc 406.
52b219b5 407. {* End of internal packed boolean fields. *}
252b5132 408.
52b219b5
AM
409. {* The virtual memory address of the section - where it will be
410. at run time. The symbols are relocated against this. The
411. user_set_vma flag is maintained by bfd; if it's not set, the
412. backend can assign addresses (for example, in <<a.out>>, where
413. the default address for <<.data>> is dependent on the specific
414. target and various flags). *}
52b219b5 415. bfd_vma vma;
252b5132 416.
52b219b5
AM
417. {* The load address of the section - where it would be in a
418. rom image; really only used for writing section header
b5f79c76 419. information. *}
52b219b5 420. bfd_vma lma;
252b5132 421.
52b219b5
AM
422. {* The size of the section in octets, as it will be output.
423. Contains a value even if the section has no contents (e.g., the
eea6121a
AM
424. size of <<.bss>>). *}
425. bfd_size_type size;
426.
427. {* The original size on disk of the section, in octets. This field
428. is used by the linker relaxation code. It is currently only set
429. for sections where the linker relaxation scheme doesn't cache
430. altered section and reloc contents (stabs, eh_frame, SEC_MERGE),
431. and thus the original size needs to be kept to read the section
432. multiple times. If non-zero, rawsize will be used in address
433. checks during relocation and to read section contents. *}
434. bfd_size_type rawsize;
252b5132 435.
52b219b5
AM
436. {* If this section is going to be output, then this value is the
437. offset in *bytes* into the output section of the first byte in the
438. input section (byte ==> smallest addressable unit on the
439. target). In most cases, if this was going to start at the
440. 100th octet (8-bit quantity) in the output section, this value
441. would be 100. However, if the target byte size is 16 bits
442. (bfd_octets_per_byte is "2"), this value would be 50. *}
52b219b5 443. bfd_vma output_offset;
252b5132 444.
52b219b5 445. {* The output section through which to map on output. *}
198beae2 446. struct bfd_section *output_section;
252b5132 447.
52b219b5
AM
448. {* The alignment requirement of the section, as an exponent of 2 -
449. e.g., 3 aligns to 2^3 (or 8). *}
52b219b5 450. unsigned int alignment_power;
252b5132 451.
52b219b5
AM
452. {* If an input section, a pointer to a vector of relocation
453. records for the data in this section. *}
52b219b5 454. struct reloc_cache_entry *relocation;
252b5132 455.
52b219b5
AM
456. {* If an output section, a pointer to a vector of pointers to
457. relocation records for the data in this section. *}
52b219b5 458. struct reloc_cache_entry **orelocation;
252b5132 459.
b5f79c76 460. {* The number of relocation records in one of the above. *}
52b219b5 461. unsigned reloc_count;
252b5132 462.
52b219b5
AM
463. {* Information below is back end specific - and not always used
464. or updated. *}
252b5132 465.
52b219b5 466. {* File position of section data. *}
52b219b5 467. file_ptr filepos;
252b5132 468.
52b219b5 469. {* File position of relocation info. *}
52b219b5 470. file_ptr rel_filepos;
252b5132 471.
52b219b5 472. {* File position of line data. *}
52b219b5 473. file_ptr line_filepos;
252b5132 474.
52b219b5 475. {* Pointer to data for applications. *}
c58b9523 476. void *userdata;
252b5132 477.
52b219b5
AM
478. {* If the SEC_IN_MEMORY flag is set, this points to the actual
479. contents. *}
480. unsigned char *contents;
252b5132 481.
52b219b5 482. {* Attached line number information. *}
52b219b5 483. alent *lineno;
252b5132 484.
52b219b5 485. {* Number of line number records. *}
52b219b5 486. unsigned int lineno_count;
252b5132 487.
2dd439c5 488. {* Entity size for merging purposes. *}
2dd439c5
L
489. unsigned int entsize;
490.
52b219b5 491. {* Optional information about a COMDAT entry; NULL if not COMDAT. *}
52b219b5 492. struct bfd_comdat_info *comdat;
022a5af4 493.
f97b9cb8
L
494. {* Points to the kept section if this section is a link-once section,
495. and is discarded. *}
198beae2 496. struct bfd_section *kept_section;
f97b9cb8 497.
52b219b5
AM
498. {* When a section is being output, this value changes as more
499. linenumbers are written out. *}
52b219b5 500. file_ptr moving_line_filepos;
252b5132 501.
52b219b5 502. {* What the section number is in the target world. *}
52b219b5 503. int target_index;
252b5132 504.
c58b9523 505. void *used_by_bfd;
252b5132 506.
52b219b5
AM
507. {* If this is a constructor section then here is a list of the
508. relocations created to relocate items within it. *}
52b219b5 509. struct relent_chain *constructor_chain;
252b5132 510.
52b219b5 511. {* The BFD which owns the section. *}
52b219b5 512. bfd *owner;
252b5132 513.
b5f79c76 514. {* A symbol which points at this section only. *}
fc0a2244
AC
515. struct bfd_symbol *symbol;
516. struct bfd_symbol **symbol_ptr_ptr;
252b5132 517.
52b219b5
AM
518. struct bfd_link_order *link_order_head;
519. struct bfd_link_order *link_order_tail;
b5f79c76 520.} asection;
252b5132 521.
52b219b5
AM
522.{* These sections are global, and are managed by BFD. The application
523. and target back end are not permitted to change the values in
524. these sections. New code should use the section_ptr macros rather
525. than referring directly to the const sections. The const sections
526. may eventually vanish. *}
252b5132
RH
527.#define BFD_ABS_SECTION_NAME "*ABS*"
528.#define BFD_UND_SECTION_NAME "*UND*"
529.#define BFD_COM_SECTION_NAME "*COM*"
530.#define BFD_IND_SECTION_NAME "*IND*"
531.
b5f79c76 532.{* The absolute section. *}
2f89ff8d 533.extern asection bfd_abs_section;
252b5132
RH
534.#define bfd_abs_section_ptr ((asection *) &bfd_abs_section)
535.#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
b5f79c76 536.{* Pointer to the undefined section. *}
2f89ff8d 537.extern asection bfd_und_section;
252b5132
RH
538.#define bfd_und_section_ptr ((asection *) &bfd_und_section)
539.#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
b5f79c76 540.{* Pointer to the common section. *}
2f89ff8d 541.extern asection bfd_com_section;
252b5132 542.#define bfd_com_section_ptr ((asection *) &bfd_com_section)
b5f79c76 543.{* Pointer to the indirect section. *}
2f89ff8d 544.extern asection bfd_ind_section;
252b5132
RH
545.#define bfd_ind_section_ptr ((asection *) &bfd_ind_section)
546.#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
547.
84c254c6
NC
548.#define bfd_is_const_section(SEC) \
549. ( ((SEC) == bfd_abs_section_ptr) \
550. || ((SEC) == bfd_und_section_ptr) \
551. || ((SEC) == bfd_com_section_ptr) \
552. || ((SEC) == bfd_ind_section_ptr))
553.
fc0a2244
AC
554.extern const struct bfd_symbol * const bfd_abs_symbol;
555.extern const struct bfd_symbol * const bfd_com_symbol;
556.extern const struct bfd_symbol * const bfd_und_symbol;
557.extern const struct bfd_symbol * const bfd_ind_symbol;
9e7b37b3
AM
558.
559.{* Macros to handle insertion and deletion of a bfd's sections. These
560. only handle the list pointers, ie. do not adjust section_count,
561. target_index etc. *}
562.#define bfd_section_list_remove(ABFD, PS) \
563. do \
564. { \
565. asection **_ps = PS; \
566. asection *_s = *_ps; \
567. *_ps = _s->next; \
568. if (_s->next == NULL) \
569. (ABFD)->section_tail = _ps; \
570. } \
571. while (0)
572.#define bfd_section_list_insert(ABFD, PS, S) \
573. do \
574. { \
575. asection **_ps = PS; \
576. asection *_s = S; \
577. _s->next = *_ps; \
578. *_ps = _s; \
579. if (_s->next == NULL) \
580. (ABFD)->section_tail = &_s->next; \
581. } \
582. while (0)
583.
252b5132
RH
584*/
585
22bc497d
ILT
586/* We use a macro to initialize the static asymbol structures because
587 traditional C does not permit us to initialize a union member while
588 gcc warns if we don't initialize it. */
589 /* the_bfd, name, value, attr, section [, udata] */
590#ifdef __STDC__
591#define GLOBAL_SYM_INIT(NAME, SECTION) \
592 { 0, NAME, 0, BSF_SECTION_SYM, (asection *) SECTION, { 0 }}
593#else
594#define GLOBAL_SYM_INIT(NAME, SECTION) \
595 { 0, NAME, 0, BSF_SECTION_SYM, (asection *) SECTION }
596#endif
597
252b5132
RH
598/* These symbols are global, not specific to any BFD. Therefore, anything
599 that tries to change them is broken, and should be repaired. */
22bc497d 600
252b5132
RH
601static const asymbol global_syms[] =
602{
22bc497d
ILT
603 GLOBAL_SYM_INIT (BFD_COM_SECTION_NAME, &bfd_com_section),
604 GLOBAL_SYM_INIT (BFD_UND_SECTION_NAME, &bfd_und_section),
605 GLOBAL_SYM_INIT (BFD_ABS_SECTION_NAME, &bfd_abs_section),
606 GLOBAL_SYM_INIT (BFD_IND_SECTION_NAME, &bfd_ind_section)
252b5132
RH
607};
608
bc67d8a6
NC
609#define STD_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
610 const asymbol * const SYM = (asymbol *) &global_syms[IDX]; \
2f89ff8d 611 asection SEC = \
911d08a7
AM
612 /* name, id, index, next, flags, user_set_vma, */ \
613 { NAME, IDX, 0, NULL, FLAGS, 0, \
52b219b5 614 \
d1778b88
AM
615 /* linker_mark, linker_has_input, gc_mark, segment_mark, */ \
616 0, 0, 1, 0, \
617 \
911d08a7
AM
618 /* sec_info_type, use_rela_p, has_tls_reloc, has_gp_reloc, */ \
619 0, 0, 0, 0, \
ad8e1ba5 620 \
911d08a7 621 /* need_finalize_relax, reloc_done, */ \
ad8e1ba5 622 0, 0, \
68bfbfcc 623 \
eea6121a
AM
624 /* vma, lma, size, rawsize */ \
625 0, 0, 0, 0, \
52b219b5 626 \
eea6121a 627 /* output_offset, output_section, alignment_power, */ \
198beae2 628 0, (struct bfd_section *) &SEC, 0, \
52b219b5
AM
629 \
630 /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \
631 NULL, NULL, 0, 0, 0, \
632 \
633 /* line_filepos, userdata, contents, lineno, lineno_count, */ \
634 0, NULL, NULL, NULL, 0, \
635 \
f97b9cb8
L
636 /* entsize, comdat, kept_section, moving_line_filepos, */ \
637 0, NULL, NULL, 0, \
52b219b5 638 \
767e4b0d
JJ
639 /* target_index, used_by_bfd, constructor_chain, owner, */ \
640 0, NULL, NULL, NULL, \
52b219b5
AM
641 \
642 /* symbol, */ \
fc0a2244 643 (struct bfd_symbol *) &global_syms[IDX], \
52b219b5
AM
644 \
645 /* symbol_ptr_ptr, */ \
fc0a2244 646 (struct bfd_symbol **) &SYM, \
52b219b5
AM
647 \
648 /* link_order_head, link_order_tail */ \
649 NULL, NULL \
022a5af4 650 }
252b5132
RH
651
652STD_SECTION (bfd_com_section, SEC_IS_COMMON, bfd_com_symbol,
653 BFD_COM_SECTION_NAME, 0);
654STD_SECTION (bfd_und_section, 0, bfd_und_symbol, BFD_UND_SECTION_NAME, 1);
655STD_SECTION (bfd_abs_section, 0, bfd_abs_symbol, BFD_ABS_SECTION_NAME, 2);
656STD_SECTION (bfd_ind_section, 0, bfd_ind_symbol, BFD_IND_SECTION_NAME, 3);
657#undef STD_SECTION
658
73e87d70
AM
659struct section_hash_entry
660{
661 struct bfd_hash_entry root;
662 asection section;
663};
664
665/* Initialize an entry in the section hash table. */
666
667struct bfd_hash_entry *
c58b9523
AM
668bfd_section_hash_newfunc (struct bfd_hash_entry *entry,
669 struct bfd_hash_table *table,
670 const char *string)
73e87d70
AM
671{
672 /* Allocate the structure if it has not already been allocated by a
673 subclass. */
674 if (entry == NULL)
675 {
d45913a0
DA
676 entry = (struct bfd_hash_entry *)
677 bfd_hash_allocate (table, sizeof (struct section_hash_entry));
73e87d70
AM
678 if (entry == NULL)
679 return entry;
680 }
681
682 /* Call the allocation method of the superclass. */
683 entry = bfd_hash_newfunc (entry, table, string);
684 if (entry != NULL)
c58b9523
AM
685 memset (&((struct section_hash_entry *) entry)->section, 0,
686 sizeof (asection));
73e87d70
AM
687
688 return entry;
689}
690
691#define section_hash_lookup(table, string, create, copy) \
692 ((struct section_hash_entry *) \
693 bfd_hash_lookup ((table), (string), (create), (copy)))
694
695/* Initializes a new section. NEWSECT->NAME is already set. */
696
73e87d70 697static asection *
c58b9523 698bfd_section_init (bfd *abfd, asection *newsect)
73e87d70
AM
699{
700 static int section_id = 0x10; /* id 0 to 3 used by STD_SECTION. */
701
702 newsect->id = section_id;
703 newsect->index = abfd->section_count;
73e87d70 704 newsect->owner = abfd;
73e87d70
AM
705
706 /* Create a symbol whose only job is to point to this section. This
707 is useful for things like relocs which are relative to the base
708 of a section. */
709 newsect->symbol = bfd_make_empty_symbol (abfd);
710 if (newsect->symbol == NULL)
711 return NULL;
712
713 newsect->symbol->name = newsect->name;
714 newsect->symbol->value = 0;
715 newsect->symbol->section = newsect;
716 newsect->symbol->flags = BSF_SECTION_SYM;
717
718 newsect->symbol_ptr_ptr = &newsect->symbol;
719
720 if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect)))
721 return NULL;
722
723 section_id++;
724 abfd->section_count++;
725 *abfd->section_tail = newsect;
726 abfd->section_tail = &newsect->next;
727 return newsect;
728}
729
252b5132
RH
730/*
731DOCDD
732INODE
733section prototypes, , typedef asection, Sections
734SUBSECTION
735 Section prototypes
736
737These are the functions exported by the section handling part of BFD.
738*/
739
9e7b37b3
AM
740/*
741FUNCTION
742 bfd_section_list_clear
743
744SYNOPSIS
745 void bfd_section_list_clear (bfd *);
746
747DESCRIPTION
748 Clears the section list, and also resets the section count and
749 hash table entries.
750*/
751
752void
c58b9523 753bfd_section_list_clear (bfd *abfd)
9e7b37b3
AM
754{
755 abfd->sections = NULL;
756 abfd->section_tail = &abfd->sections;
757 abfd->section_count = 0;
c58b9523 758 memset (abfd->section_htab.table, 0,
9e7b37b3
AM
759 abfd->section_htab.size * sizeof (struct bfd_hash_entry *));
760}
761
252b5132
RH
762/*
763FUNCTION
764 bfd_get_section_by_name
765
766SYNOPSIS
c58b9523 767 asection *bfd_get_section_by_name (bfd *abfd, const char *name);
252b5132
RH
768
769DESCRIPTION
770 Run through @var{abfd} and return the one of the
771 <<asection>>s whose name matches @var{name}, otherwise <<NULL>>.
772 @xref{Sections}, for more information.
773
774 This should only be used in special cases; the normal way to process
775 all sections of a given name is to use <<bfd_map_over_sections>> and
776 <<strcmp>> on the name (or better yet, base it on the section flags
777 or something else) for each section.
778*/
779
780asection *
c58b9523 781bfd_get_section_by_name (bfd *abfd, const char *name)
252b5132 782{
73e87d70
AM
783 struct section_hash_entry *sh;
784
b34976b6 785 sh = section_hash_lookup (&abfd->section_htab, name, FALSE, FALSE);
73e87d70
AM
786 if (sh != NULL)
787 return &sh->section;
252b5132 788
252b5132
RH
789 return NULL;
790}
791
fafe6678
L
792/*
793FUNCTION
794 bfd_get_section_by_name_if
795
796SYNOPSIS
797 asection *bfd_get_section_by_name_if
798 (bfd *abfd,
799 const char *name,
800 bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
801 void *obj);
802
803DESCRIPTION
804 Call the provided function @var{func} for each section
805 attached to the BFD @var{abfd} whose name matches @var{name},
806 passing @var{obj} as an argument. The function will be called
807 as if by
808
809| func (abfd, the_section, obj);
810
811 It returns the first section for which @var{func} returns true,
812 otherwise <<NULL>>.
813
814*/
815
816asection *
817bfd_get_section_by_name_if (bfd *abfd, const char *name,
818 bfd_boolean (*operation) (bfd *,
819 asection *,
820 void *),
821 void *user_storage)
822{
823 struct section_hash_entry *sh;
824 unsigned long hash;
825
826 sh = section_hash_lookup (&abfd->section_htab, name, FALSE, FALSE);
827 if (sh == NULL)
828 return NULL;
829
830 hash = sh->root.hash;
831 do
832 {
833 if ((*operation) (abfd, &sh->section, user_storage))
834 return &sh->section;
835 sh = (struct section_hash_entry *) sh->root.next;
836 }
837 while (sh != NULL && sh->root.hash == hash
838 && strcmp (sh->root.string, name) == 0);
839
840 return NULL;
841}
842
1bd91689
AM
843/*
844FUNCTION
845 bfd_get_unique_section_name
846
847SYNOPSIS
c58b9523
AM
848 char *bfd_get_unique_section_name
849 (bfd *abfd, const char *templat, int *count);
1bd91689
AM
850
851DESCRIPTION
852 Invent a section name that is unique in @var{abfd} by tacking
77cb06e9
AM
853 a dot and a digit suffix onto the original @var{templat}. If
854 @var{count} is non-NULL, then it specifies the first number
855 tried as a suffix to generate a unique name. The value
856 pointed to by @var{count} will be incremented in this case.
1bd91689
AM
857*/
858
859char *
c58b9523 860bfd_get_unique_section_name (bfd *abfd, const char *templat, int *count)
1bd91689
AM
861{
862 int num;
863 unsigned int len;
864 char *sname;
865
a966dba9 866 len = strlen (templat);
c58b9523 867 sname = bfd_malloc (len + 8);
b3ea3584
AM
868 if (sname == NULL)
869 return NULL;
d4c88bbb 870 memcpy (sname, templat, len);
1bd91689
AM
871 num = 1;
872 if (count != NULL)
873 num = *count;
874
875 do
876 {
877 /* If we have a million sections, something is badly wrong. */
878 if (num > 999999)
879 abort ();
77cb06e9 880 sprintf (sname + len, ".%d", num++);
1bd91689 881 }
b34976b6 882 while (section_hash_lookup (&abfd->section_htab, sname, FALSE, FALSE));
1bd91689
AM
883
884 if (count != NULL)
885 *count = num;
886 return sname;
887}
888
252b5132
RH
889/*
890FUNCTION
891 bfd_make_section_old_way
892
893SYNOPSIS
c58b9523 894 asection *bfd_make_section_old_way (bfd *abfd, const char *name);
252b5132
RH
895
896DESCRIPTION
897 Create a new empty section called @var{name}
898 and attach it to the end of the chain of sections for the
899 BFD @var{abfd}. An attempt to create a section with a name which
900 is already in use returns its pointer without changing the
901 section chain.
902
903 It has the funny name since this is the way it used to be
904 before it was rewritten....
905
906 Possible errors are:
907 o <<bfd_error_invalid_operation>> -
908 If output has already started for this BFD.
909 o <<bfd_error_no_memory>> -
910 If memory allocation fails.
911
912*/
913
252b5132 914asection *
c58b9523 915bfd_make_section_old_way (bfd *abfd, const char *name)
252b5132 916{
73e87d70
AM
917 struct section_hash_entry *sh;
918 asection *newsect;
919
920 if (abfd->output_has_begun)
921 {
922 bfd_set_error (bfd_error_invalid_operation);
923 return NULL;
924 }
925
926 if (strcmp (name, BFD_ABS_SECTION_NAME) == 0)
927 return bfd_abs_section_ptr;
928
929 if (strcmp (name, BFD_COM_SECTION_NAME) == 0)
930 return bfd_com_section_ptr;
931
932 if (strcmp (name, BFD_UND_SECTION_NAME) == 0)
933 return bfd_und_section_ptr;
934
935 if (strcmp (name, BFD_IND_SECTION_NAME) == 0)
936 return bfd_ind_section_ptr;
937
b34976b6 938 sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
73e87d70
AM
939 if (sh == NULL)
940 return NULL;
941
942 newsect = &sh->section;
943 if (newsect->name != NULL)
252b5132 944 {
73e87d70
AM
945 /* Section already exists. */
946 return newsect;
252b5132 947 }
73e87d70
AM
948
949 newsect->name = name;
950 return bfd_section_init (abfd, newsect);
252b5132
RH
951}
952
953/*
954FUNCTION
955 bfd_make_section_anyway
956
957SYNOPSIS
c58b9523 958 asection *bfd_make_section_anyway (bfd *abfd, const char *name);
252b5132
RH
959
960DESCRIPTION
961 Create a new empty section called @var{name} and attach it to the end of
962 the chain of sections for @var{abfd}. Create a new section even if there
963 is already a section with that name.
964
965 Return <<NULL>> and set <<bfd_error>> on error; possible errors are:
966 o <<bfd_error_invalid_operation>> - If output has already started for @var{abfd}.
967 o <<bfd_error_no_memory>> - If memory allocation fails.
968*/
969
970sec_ptr
c58b9523 971bfd_make_section_anyway (bfd *abfd, const char *name)
252b5132 972{
73e87d70 973 struct section_hash_entry *sh;
252b5132 974 asection *newsect;
252b5132
RH
975
976 if (abfd->output_has_begun)
977 {
978 bfd_set_error (bfd_error_invalid_operation);
979 return NULL;
980 }
981
b34976b6 982 sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
73e87d70 983 if (sh == NULL)
252b5132
RH
984 return NULL;
985
73e87d70
AM
986 newsect = &sh->section;
987 if (newsect->name != NULL)
4d7ce4dd 988 {
72adc230
AM
989 /* We are making a section of the same name. Put it in the
990 section hash table. Even though we can't find it directly by a
991 hash lookup, we'll be able to find the section by traversing
992 sh->root.next quicker than looking at all the bfd sections. */
993 struct section_hash_entry *new_sh;
994 new_sh = (struct section_hash_entry *)
995 bfd_section_hash_newfunc (NULL, &abfd->section_htab, name);
996 if (new_sh == NULL)
73e87d70 997 return NULL;
72adc230 998
73499ab8 999 new_sh->root = sh->root;
72adc230
AM
1000 sh->root.next = &new_sh->root;
1001 newsect = &new_sh->section;
252b5132
RH
1002 }
1003
73e87d70
AM
1004 newsect->name = name;
1005 return bfd_section_init (abfd, newsect);
252b5132
RH
1006}
1007
1008/*
1009FUNCTION
1010 bfd_make_section
1011
1012SYNOPSIS
c58b9523 1013 asection *bfd_make_section (bfd *, const char *name);
252b5132
RH
1014
1015DESCRIPTION
1016 Like <<bfd_make_section_anyway>>, but return <<NULL>> (without calling
1017 bfd_set_error ()) without changing the section chain if there is already a
1018 section named @var{name}. If there is an error, return <<NULL>> and set
1019 <<bfd_error>>.
1020*/
1021
1022asection *
c58b9523 1023bfd_make_section (bfd *abfd, const char *name)
252b5132 1024{
73e87d70
AM
1025 struct section_hash_entry *sh;
1026 asection *newsect;
252b5132 1027
73e87d70 1028 if (abfd->output_has_begun)
252b5132 1029 {
73e87d70
AM
1030 bfd_set_error (bfd_error_invalid_operation);
1031 return NULL;
252b5132
RH
1032 }
1033
73e87d70
AM
1034 if (strcmp (name, BFD_ABS_SECTION_NAME) == 0
1035 || strcmp (name, BFD_COM_SECTION_NAME) == 0
1036 || strcmp (name, BFD_UND_SECTION_NAME) == 0
1037 || strcmp (name, BFD_IND_SECTION_NAME) == 0)
1038 return NULL;
252b5132 1039
b34976b6 1040 sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
73e87d70
AM
1041 if (sh == NULL)
1042 return NULL;
1043
1044 newsect = &sh->section;
1045 if (newsect->name != NULL)
252b5132 1046 {
73e87d70 1047 /* Section already exists. */
003d627e 1048 return NULL;
252b5132
RH
1049 }
1050
73e87d70
AM
1051 newsect->name = name;
1052 return bfd_section_init (abfd, newsect);
252b5132
RH
1053}
1054
252b5132
RH
1055/*
1056FUNCTION
1057 bfd_set_section_flags
1058
1059SYNOPSIS
c58b9523
AM
1060 bfd_boolean bfd_set_section_flags
1061 (bfd *abfd, asection *sec, flagword flags);
252b5132
RH
1062
1063DESCRIPTION
1064 Set the attributes of the section @var{sec} in the BFD
b34976b6
AM
1065 @var{abfd} to the value @var{flags}. Return <<TRUE>> on success,
1066 <<FALSE>> on error. Possible error returns are:
252b5132
RH
1067
1068 o <<bfd_error_invalid_operation>> -
1069 The section cannot have one or more of the attributes
1070 requested. For example, a .bss section in <<a.out>> may not
1071 have the <<SEC_HAS_CONTENTS>> field set.
1072
1073*/
1074
b34976b6 1075bfd_boolean
c58b9523
AM
1076bfd_set_section_flags (bfd *abfd ATTRIBUTE_UNUSED,
1077 sec_ptr section,
1078 flagword flags)
252b5132
RH
1079{
1080#if 0
1081 /* If you try to copy a text section from an input file (where it
1082 has the SEC_CODE flag set) to an output file, this loses big if
1083 the bfd_applicable_section_flags (abfd) doesn't have the SEC_CODE
1084 set - which it doesn't, at least not for a.out. FIXME */
1085
1086 if ((flags & bfd_applicable_section_flags (abfd)) != flags)
1087 {
1088 bfd_set_error (bfd_error_invalid_operation);
b34976b6 1089 return FALSE;
252b5132
RH
1090 }
1091#endif
1092
1093 section->flags = flags;
b34976b6 1094 return TRUE;
252b5132
RH
1095}
1096
252b5132
RH
1097/*
1098FUNCTION
1099 bfd_map_over_sections
1100
1101SYNOPSIS
c58b9523
AM
1102 void bfd_map_over_sections
1103 (bfd *abfd,
1104 void (*func) (bfd *abfd, asection *sect, void *obj),
1105 void *obj);
252b5132
RH
1106
1107DESCRIPTION
1108 Call the provided function @var{func} for each section
1109 attached to the BFD @var{abfd}, passing @var{obj} as an
1110 argument. The function will be called as if by
1111
c58b9523 1112| func (abfd, the_section, obj);
252b5132 1113
7dee875e 1114 This is the preferred method for iterating over sections; an
252b5132
RH
1115 alternative would be to use a loop:
1116
1117| section *p;
1118| for (p = abfd->sections; p != NULL; p = p->next)
c58b9523 1119| func (abfd, p, ...)
252b5132 1120
252b5132
RH
1121*/
1122
252b5132 1123void
c58b9523
AM
1124bfd_map_over_sections (bfd *abfd,
1125 void (*operation) (bfd *, asection *, void *),
1126 void *user_storage)
252b5132
RH
1127{
1128 asection *sect;
1129 unsigned int i = 0;
1130
1131 for (sect = abfd->sections; sect != NULL; i++, sect = sect->next)
1132 (*operation) (abfd, sect, user_storage);
1133
1134 if (i != abfd->section_count) /* Debugging */
1135 abort ();
1136}
1137
bc87dd2e
L
1138/*
1139FUNCTION
1140 bfd_sections_find_if
1141
1142SYNOPSIS
1143 asection *bfd_sections_find_if
1144 (bfd *abfd,
1145 bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
1146 void *obj);
1147
1148DESCRIPTION
1149 Call the provided function @var{func} for each section
1150 attached to the BFD @var{abfd}, passing @var{obj} as an
1151 argument. The function will be called as if by
1152
1153| func (abfd, the_section, obj);
1154
1155 It returns the first section for which @var{func} returns true.
1156
1157*/
1158
1159asection *
1160bfd_sections_find_if (bfd *abfd,
1161 bfd_boolean (*operation) (bfd *, asection *, void *),
1162 void *user_storage)
1163{
1164 asection *sect;
1165
1166 for (sect = abfd->sections; sect != NULL; sect = sect->next)
1167 if ((*operation) (abfd, sect, user_storage))
1168 break;
1169
1170 return sect;
1171}
1172
252b5132
RH
1173/*
1174FUNCTION
1175 bfd_set_section_size
1176
1177SYNOPSIS
c58b9523
AM
1178 bfd_boolean bfd_set_section_size
1179 (bfd *abfd, asection *sec, bfd_size_type val);
252b5132
RH
1180
1181DESCRIPTION
1182 Set @var{sec} to the size @var{val}. If the operation is
b34976b6 1183 ok, then <<TRUE>> is returned, else <<FALSE>>.
252b5132
RH
1184
1185 Possible error returns:
1186 o <<bfd_error_invalid_operation>> -
1187 Writing has started to the BFD, so setting the size is invalid.
1188
1189*/
1190
b34976b6 1191bfd_boolean
c58b9523 1192bfd_set_section_size (bfd *abfd, sec_ptr ptr, bfd_size_type val)
252b5132
RH
1193{
1194 /* Once you've started writing to any section you cannot create or change
7b82c249 1195 the size of any others. */
252b5132
RH
1196
1197 if (abfd->output_has_begun)
1198 {
1199 bfd_set_error (bfd_error_invalid_operation);
b34976b6 1200 return FALSE;
252b5132
RH
1201 }
1202
eea6121a 1203 ptr->size = val;
b34976b6 1204 return TRUE;
252b5132
RH
1205}
1206
1207/*
1208FUNCTION
1209 bfd_set_section_contents
1210
1211SYNOPSIS
c58b9523 1212 bfd_boolean bfd_set_section_contents
85302095
AC
1213 (bfd *abfd, asection *section, const void *data,
1214 file_ptr offset, bfd_size_type count);
252b5132 1215
252b5132
RH
1216DESCRIPTION
1217 Sets the contents of the section @var{section} in BFD
1218 @var{abfd} to the data starting in memory at @var{data}. The
1219 data is written to the output section starting at offset
9a968f43 1220 @var{offset} for @var{count} octets.
252b5132 1221
b34976b6 1222 Normally <<TRUE>> is returned, else <<FALSE>>. Possible error
252b5132
RH
1223 returns are:
1224 o <<bfd_error_no_contents>> -
1225 The output section does not have the <<SEC_HAS_CONTENTS>>
1226 attribute, so nothing can be written to it.
1227 o and some more too
1228
1229 This routine is front end to the back end function
1230 <<_bfd_set_section_contents>>.
1231
252b5132
RH
1232*/
1233
b34976b6 1234bfd_boolean
c58b9523
AM
1235bfd_set_section_contents (bfd *abfd,
1236 sec_ptr section,
85302095 1237 const void *location,
c58b9523
AM
1238 file_ptr offset,
1239 bfd_size_type count)
252b5132
RH
1240{
1241 bfd_size_type sz;
1242
1243 if (!(bfd_get_section_flags (abfd, section) & SEC_HAS_CONTENTS))
1244 {
1245 bfd_set_error (bfd_error_no_contents);
b34976b6 1246 return FALSE;
252b5132
RH
1247 }
1248
eea6121a 1249 sz = section->size;
dc810e39
AM
1250 if ((bfd_size_type) offset > sz
1251 || count > sz
1252 || offset + count > sz
1253 || count != (size_t) count)
252b5132 1254 {
252b5132 1255 bfd_set_error (bfd_error_bad_value);
b34976b6 1256 return FALSE;
252b5132 1257 }
252b5132
RH
1258
1259 switch (abfd->direction)
1260 {
1261 case read_direction:
1262 case no_direction:
1263 bfd_set_error (bfd_error_invalid_operation);
b34976b6 1264 return FALSE;
252b5132
RH
1265
1266 case write_direction:
1267 break;
1268
1269 case both_direction:
1270 /* File is opened for update. `output_has_begun' some time ago when
1271 the file was created. Do not recompute sections sizes or alignments
1272 in _bfd_set_section_content. */
b34976b6 1273 abfd->output_has_begun = TRUE;
252b5132
RH
1274 break;
1275 }
1276
9a951beb
RH
1277 /* Record a copy of the data in memory if desired. */
1278 if (section->contents
c58b9523 1279 && location != section->contents + offset)
dc810e39 1280 memcpy (section->contents + offset, location, (size_t) count);
9a951beb 1281
252b5132
RH
1282 if (BFD_SEND (abfd, _bfd_set_section_contents,
1283 (abfd, section, location, offset, count)))
1284 {
b34976b6
AM
1285 abfd->output_has_begun = TRUE;
1286 return TRUE;
252b5132
RH
1287 }
1288
b34976b6 1289 return FALSE;
252b5132
RH
1290}
1291
1292/*
1293FUNCTION
1294 bfd_get_section_contents
1295
1296SYNOPSIS
c58b9523
AM
1297 bfd_boolean bfd_get_section_contents
1298 (bfd *abfd, asection *section, void *location, file_ptr offset,
1299 bfd_size_type count);
252b5132
RH
1300
1301DESCRIPTION
1302 Read data from @var{section} in BFD @var{abfd}
1303 into memory starting at @var{location}. The data is read at an
1304 offset of @var{offset} from the start of the input section,
1305 and is read for @var{count} bytes.
1306
1307 If the contents of a constructor with the <<SEC_CONSTRUCTOR>>
1308 flag set are requested or if the section does not have the
1309 <<SEC_HAS_CONTENTS>> flag set, then the @var{location} is filled
b34976b6
AM
1310 with zeroes. If no errors occur, <<TRUE>> is returned, else
1311 <<FALSE>>.
252b5132 1312
252b5132 1313*/
b34976b6 1314bfd_boolean
c58b9523
AM
1315bfd_get_section_contents (bfd *abfd,
1316 sec_ptr section,
1317 void *location,
1318 file_ptr offset,
1319 bfd_size_type count)
252b5132
RH
1320{
1321 bfd_size_type sz;
1322
1323 if (section->flags & SEC_CONSTRUCTOR)
1324 {
dc810e39 1325 memset (location, 0, (size_t) count);
b34976b6 1326 return TRUE;
252b5132
RH
1327 }
1328
eea6121a 1329 sz = section->rawsize ? section->rawsize : section->size;
dc810e39
AM
1330 if ((bfd_size_type) offset > sz
1331 || count > sz
1332 || offset + count > sz
1333 || count != (size_t) count)
252b5132 1334 {
252b5132 1335 bfd_set_error (bfd_error_bad_value);
b34976b6 1336 return FALSE;
252b5132 1337 }
252b5132
RH
1338
1339 if (count == 0)
1340 /* Don't bother. */
b34976b6 1341 return TRUE;
252b5132
RH
1342
1343 if ((section->flags & SEC_HAS_CONTENTS) == 0)
1344 {
dc810e39 1345 memset (location, 0, (size_t) count);
b34976b6 1346 return TRUE;
252b5132
RH
1347 }
1348
1349 if ((section->flags & SEC_IN_MEMORY) != 0)
1350 {
1351 memcpy (location, section->contents + offset, (size_t) count);
b34976b6 1352 return TRUE;
252b5132
RH
1353 }
1354
1355 return BFD_SEND (abfd, _bfd_get_section_contents,
1356 (abfd, section, location, offset, count));
1357}
1358
eea6121a
AM
1359/*
1360FUNCTION
1361 bfd_malloc_and_get_section
1362
1363SYNOPSIS
1364 bfd_boolean bfd_malloc_and_get_section
1365 (bfd *abfd, asection *section, bfd_byte **buf);
1366
1367DESCRIPTION
1368 Read all data from @var{section} in BFD @var{abfd}
1369 into a buffer, *@var{buf}, malloc'd by this function.
1370*/
1371
1372bfd_boolean
1373bfd_malloc_and_get_section (bfd *abfd, sec_ptr sec, bfd_byte **buf)
1374{
1375 bfd_size_type sz = sec->rawsize ? sec->rawsize : sec->size;
1376 bfd_byte *p = NULL;
1377
1378 *buf = p;
1379 if (sz == 0)
1380 return TRUE;
1381
1382 p = bfd_malloc (sz);
1383 if (p == NULL)
1384 return FALSE;
1385 *buf = p;
1386
1387 return bfd_get_section_contents (abfd, sec, p, 0, sz);
1388}
252b5132
RH
1389/*
1390FUNCTION
1391 bfd_copy_private_section_data
1392
1393SYNOPSIS
c58b9523
AM
1394 bfd_boolean bfd_copy_private_section_data
1395 (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
252b5132
RH
1396
1397DESCRIPTION
1398 Copy private section information from @var{isec} in the BFD
1399 @var{ibfd} to the section @var{osec} in the BFD @var{obfd}.
b34976b6 1400 Return <<TRUE>> on success, <<FALSE>> on error. Possible error
252b5132
RH
1401 returns are:
1402
1403 o <<bfd_error_no_memory>> -
1404 Not enough memory exists to create private data for @var{osec}.
1405
1406.#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
1407. BFD_SEND (obfd, _bfd_copy_private_section_data, \
1408. (ibfd, isection, obfd, osection))
1409*/
1410
1411/*
1412FUNCTION
1413 _bfd_strip_section_from_output
1414
1415SYNOPSIS
1416 void _bfd_strip_section_from_output
c58b9523 1417 (struct bfd_link_info *info, asection *section);
252b5132
RH
1418
1419DESCRIPTION
7f8d5fc9 1420 Remove @var{section} from the output. If the output section
bc0ba537
AM
1421 becomes empty, remove it from the output bfd.
1422
1423 This function won't actually do anything except twiddle flags
1424 if called too late in the linking process, when it's not safe
1425 to remove sections.
252b5132
RH
1426*/
1427void
c58b9523 1428_bfd_strip_section_from_output (struct bfd_link_info *info, asection *s)
252b5132 1429{
bc0ba537
AM
1430 asection *os;
1431 asection *is;
1432 bfd *abfd;
252b5132 1433
bc0ba537 1434 s->flags |= SEC_EXCLUDE;
7f8d5fc9 1435
bc0ba537
AM
1436 /* If the section wasn't assigned to an output section, or the
1437 section has been discarded by the linker script, there's nothing
1438 more to do. */
252b5132 1439 os = s->output_section;
bc0ba537 1440 if (os == NULL || os->owner == NULL)
2f484710
HPN
1441 return;
1442
bc0ba537
AM
1443 /* If the output section has other (non-excluded) input sections, we
1444 can't remove it. */
1445 for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
1446 for (is = abfd->sections; is != NULL; is = is->next)
1447 if (is->output_section == os && (is->flags & SEC_EXCLUDE) == 0)
1448 return;
7f8d5fc9 1449
bc0ba537
AM
1450 /* If the output section is empty, flag it for removal too.
1451 See ldlang.c:strip_excluded_output_sections for the action. */
1452 os->flags |= SEC_EXCLUDE;
252b5132 1453}
b885599b 1454
72adc230
AM
1455/*
1456FUNCTION
1457 bfd_generic_is_group_section
1458
1459SYNOPSIS
1460 bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
1461
1462DESCRIPTION
1463 Returns TRUE if @var{sec} is a member of a group.
1464*/
1465
1466bfd_boolean
1467bfd_generic_is_group_section (bfd *abfd ATTRIBUTE_UNUSED,
1468 const asection *sec ATTRIBUTE_UNUSED)
1469{
1470 return FALSE;
1471}
1472
b885599b
AM
1473/*
1474FUNCTION
e61463e1 1475 bfd_generic_discard_group
b885599b
AM
1476
1477SYNOPSIS
b34976b6 1478 bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
b885599b
AM
1479
1480DESCRIPTION
1481 Remove all members of @var{group} from the output.
1482*/
1483
b34976b6 1484bfd_boolean
c58b9523
AM
1485bfd_generic_discard_group (bfd *abfd ATTRIBUTE_UNUSED,
1486 asection *group ATTRIBUTE_UNUSED)
b885599b 1487{
b34976b6 1488 return TRUE;
b885599b 1489}
This page took 0.346416 seconds and 4 git commands to generate.