* section.c (struct sec): Remove usused flags. Reorganize a little.
[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
424. size of <<.bss>>). This will be filled in after relocation. *}
52b219b5 425. bfd_size_type _cooked_size;
252b5132 426.
52b219b5
AM
427. {* The original size on disk of the section, in octets. Normally this
428. value is the same as the size, but if some relaxing has
429. been done, then this value will be bigger. *}
52b219b5 430. bfd_size_type _raw_size;
252b5132 431.
52b219b5
AM
432. {* If this section is going to be output, then this value is the
433. offset in *bytes* into the output section of the first byte in the
434. input section (byte ==> smallest addressable unit on the
435. target). In most cases, if this was going to start at the
436. 100th octet (8-bit quantity) in the output section, this value
437. would be 100. However, if the target byte size is 16 bits
438. (bfd_octets_per_byte is "2"), this value would be 50. *}
52b219b5 439. bfd_vma output_offset;
252b5132 440.
52b219b5 441. {* The output section through which to map on output. *}
198beae2 442. struct bfd_section *output_section;
252b5132 443.
52b219b5
AM
444. {* The alignment requirement of the section, as an exponent of 2 -
445. e.g., 3 aligns to 2^3 (or 8). *}
52b219b5 446. unsigned int alignment_power;
252b5132 447.
52b219b5
AM
448. {* If an input section, a pointer to a vector of relocation
449. records for the data in this section. *}
52b219b5 450. struct reloc_cache_entry *relocation;
252b5132 451.
52b219b5
AM
452. {* If an output section, a pointer to a vector of pointers to
453. relocation records for the data in this section. *}
52b219b5 454. struct reloc_cache_entry **orelocation;
252b5132 455.
b5f79c76 456. {* The number of relocation records in one of the above. *}
52b219b5 457. unsigned reloc_count;
252b5132 458.
52b219b5
AM
459. {* Information below is back end specific - and not always used
460. or updated. *}
252b5132 461.
52b219b5 462. {* File position of section data. *}
52b219b5 463. file_ptr filepos;
252b5132 464.
52b219b5 465. {* File position of relocation info. *}
52b219b5 466. file_ptr rel_filepos;
252b5132 467.
52b219b5 468. {* File position of line data. *}
52b219b5 469. file_ptr line_filepos;
252b5132 470.
52b219b5 471. {* Pointer to data for applications. *}
c58b9523 472. void *userdata;
252b5132 473.
52b219b5
AM
474. {* If the SEC_IN_MEMORY flag is set, this points to the actual
475. contents. *}
476. unsigned char *contents;
252b5132 477.
52b219b5 478. {* Attached line number information. *}
52b219b5 479. alent *lineno;
252b5132 480.
52b219b5 481. {* Number of line number records. *}
52b219b5 482. unsigned int lineno_count;
252b5132 483.
2dd439c5 484. {* Entity size for merging purposes. *}
2dd439c5
L
485. unsigned int entsize;
486.
52b219b5 487. {* Optional information about a COMDAT entry; NULL if not COMDAT. *}
52b219b5 488. struct bfd_comdat_info *comdat;
022a5af4 489.
f97b9cb8
L
490. {* Points to the kept section if this section is a link-once section,
491. and is discarded. *}
198beae2 492. struct bfd_section *kept_section;
f97b9cb8 493.
52b219b5
AM
494. {* When a section is being output, this value changes as more
495. linenumbers are written out. *}
52b219b5 496. file_ptr moving_line_filepos;
252b5132 497.
52b219b5 498. {* What the section number is in the target world. *}
52b219b5 499. int target_index;
252b5132 500.
c58b9523 501. void *used_by_bfd;
252b5132 502.
52b219b5
AM
503. {* If this is a constructor section then here is a list of the
504. relocations created to relocate items within it. *}
52b219b5 505. struct relent_chain *constructor_chain;
252b5132 506.
52b219b5 507. {* The BFD which owns the section. *}
52b219b5 508. bfd *owner;
252b5132 509.
b5f79c76 510. {* A symbol which points at this section only. *}
fc0a2244
AC
511. struct bfd_symbol *symbol;
512. struct bfd_symbol **symbol_ptr_ptr;
252b5132 513.
52b219b5
AM
514. struct bfd_link_order *link_order_head;
515. struct bfd_link_order *link_order_tail;
b5f79c76 516.} asection;
252b5132 517.
52b219b5
AM
518.{* These sections are global, and are managed by BFD. The application
519. and target back end are not permitted to change the values in
520. these sections. New code should use the section_ptr macros rather
521. than referring directly to the const sections. The const sections
522. may eventually vanish. *}
252b5132
RH
523.#define BFD_ABS_SECTION_NAME "*ABS*"
524.#define BFD_UND_SECTION_NAME "*UND*"
525.#define BFD_COM_SECTION_NAME "*COM*"
526.#define BFD_IND_SECTION_NAME "*IND*"
527.
b5f79c76 528.{* The absolute section. *}
2f89ff8d 529.extern asection bfd_abs_section;
252b5132
RH
530.#define bfd_abs_section_ptr ((asection *) &bfd_abs_section)
531.#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
b5f79c76 532.{* Pointer to the undefined section. *}
2f89ff8d 533.extern asection bfd_und_section;
252b5132
RH
534.#define bfd_und_section_ptr ((asection *) &bfd_und_section)
535.#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
b5f79c76 536.{* Pointer to the common section. *}
2f89ff8d 537.extern asection bfd_com_section;
252b5132 538.#define bfd_com_section_ptr ((asection *) &bfd_com_section)
b5f79c76 539.{* Pointer to the indirect section. *}
2f89ff8d 540.extern asection bfd_ind_section;
252b5132
RH
541.#define bfd_ind_section_ptr ((asection *) &bfd_ind_section)
542.#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
543.
84c254c6
NC
544.#define bfd_is_const_section(SEC) \
545. ( ((SEC) == bfd_abs_section_ptr) \
546. || ((SEC) == bfd_und_section_ptr) \
547. || ((SEC) == bfd_com_section_ptr) \
548. || ((SEC) == bfd_ind_section_ptr))
549.
fc0a2244
AC
550.extern const struct bfd_symbol * const bfd_abs_symbol;
551.extern const struct bfd_symbol * const bfd_com_symbol;
552.extern const struct bfd_symbol * const bfd_und_symbol;
553.extern const struct bfd_symbol * const bfd_ind_symbol;
9e7b37b3
AM
554.
555.{* Macros to handle insertion and deletion of a bfd's sections. These
556. only handle the list pointers, ie. do not adjust section_count,
557. target_index etc. *}
558.#define bfd_section_list_remove(ABFD, PS) \
559. do \
560. { \
561. asection **_ps = PS; \
562. asection *_s = *_ps; \
563. *_ps = _s->next; \
564. if (_s->next == NULL) \
565. (ABFD)->section_tail = _ps; \
566. } \
567. while (0)
568.#define bfd_section_list_insert(ABFD, PS, S) \
569. do \
570. { \
571. asection **_ps = PS; \
572. asection *_s = S; \
573. _s->next = *_ps; \
574. *_ps = _s; \
575. if (_s->next == NULL) \
576. (ABFD)->section_tail = &_s->next; \
577. } \
578. while (0)
579.
252b5132
RH
580*/
581
22bc497d
ILT
582/* We use a macro to initialize the static asymbol structures because
583 traditional C does not permit us to initialize a union member while
584 gcc warns if we don't initialize it. */
585 /* the_bfd, name, value, attr, section [, udata] */
586#ifdef __STDC__
587#define GLOBAL_SYM_INIT(NAME, SECTION) \
588 { 0, NAME, 0, BSF_SECTION_SYM, (asection *) SECTION, { 0 }}
589#else
590#define GLOBAL_SYM_INIT(NAME, SECTION) \
591 { 0, NAME, 0, BSF_SECTION_SYM, (asection *) SECTION }
592#endif
593
252b5132
RH
594/* These symbols are global, not specific to any BFD. Therefore, anything
595 that tries to change them is broken, and should be repaired. */
22bc497d 596
252b5132
RH
597static const asymbol global_syms[] =
598{
22bc497d
ILT
599 GLOBAL_SYM_INIT (BFD_COM_SECTION_NAME, &bfd_com_section),
600 GLOBAL_SYM_INIT (BFD_UND_SECTION_NAME, &bfd_und_section),
601 GLOBAL_SYM_INIT (BFD_ABS_SECTION_NAME, &bfd_abs_section),
602 GLOBAL_SYM_INIT (BFD_IND_SECTION_NAME, &bfd_ind_section)
252b5132
RH
603};
604
bc67d8a6
NC
605#define STD_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
606 const asymbol * const SYM = (asymbol *) &global_syms[IDX]; \
2f89ff8d 607 asection SEC = \
911d08a7
AM
608 /* name, id, index, next, flags, user_set_vma, */ \
609 { NAME, IDX, 0, NULL, FLAGS, 0, \
52b219b5 610 \
d1778b88
AM
611 /* linker_mark, linker_has_input, gc_mark, segment_mark, */ \
612 0, 0, 1, 0, \
613 \
911d08a7
AM
614 /* sec_info_type, use_rela_p, has_tls_reloc, has_gp_reloc, */ \
615 0, 0, 0, 0, \
ad8e1ba5 616 \
911d08a7 617 /* need_finalize_relax, reloc_done, */ \
ad8e1ba5 618 0, 0, \
68bfbfcc 619 \
d1778b88
AM
620 /* vma, lma, _cooked_size, _raw_size, */ \
621 0, 0, 0, 0, \
52b219b5 622 \
d1778b88 623 /* output_offset, output_section, alignment_power, */ \
198beae2 624 0, (struct bfd_section *) &SEC, 0, \
52b219b5
AM
625 \
626 /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \
627 NULL, NULL, 0, 0, 0, \
628 \
629 /* line_filepos, userdata, contents, lineno, lineno_count, */ \
630 0, NULL, NULL, NULL, 0, \
631 \
f97b9cb8
L
632 /* entsize, comdat, kept_section, moving_line_filepos, */ \
633 0, NULL, NULL, 0, \
52b219b5 634 \
767e4b0d
JJ
635 /* target_index, used_by_bfd, constructor_chain, owner, */ \
636 0, NULL, NULL, NULL, \
52b219b5
AM
637 \
638 /* symbol, */ \
fc0a2244 639 (struct bfd_symbol *) &global_syms[IDX], \
52b219b5
AM
640 \
641 /* symbol_ptr_ptr, */ \
fc0a2244 642 (struct bfd_symbol **) &SYM, \
52b219b5
AM
643 \
644 /* link_order_head, link_order_tail */ \
645 NULL, NULL \
022a5af4 646 }
252b5132
RH
647
648STD_SECTION (bfd_com_section, SEC_IS_COMMON, bfd_com_symbol,
649 BFD_COM_SECTION_NAME, 0);
650STD_SECTION (bfd_und_section, 0, bfd_und_symbol, BFD_UND_SECTION_NAME, 1);
651STD_SECTION (bfd_abs_section, 0, bfd_abs_symbol, BFD_ABS_SECTION_NAME, 2);
652STD_SECTION (bfd_ind_section, 0, bfd_ind_symbol, BFD_IND_SECTION_NAME, 3);
653#undef STD_SECTION
654
73e87d70
AM
655struct section_hash_entry
656{
657 struct bfd_hash_entry root;
658 asection section;
659};
660
661/* Initialize an entry in the section hash table. */
662
663struct bfd_hash_entry *
c58b9523
AM
664bfd_section_hash_newfunc (struct bfd_hash_entry *entry,
665 struct bfd_hash_table *table,
666 const char *string)
73e87d70
AM
667{
668 /* Allocate the structure if it has not already been allocated by a
669 subclass. */
670 if (entry == NULL)
671 {
d45913a0
DA
672 entry = (struct bfd_hash_entry *)
673 bfd_hash_allocate (table, sizeof (struct section_hash_entry));
73e87d70
AM
674 if (entry == NULL)
675 return entry;
676 }
677
678 /* Call the allocation method of the superclass. */
679 entry = bfd_hash_newfunc (entry, table, string);
680 if (entry != NULL)
c58b9523
AM
681 memset (&((struct section_hash_entry *) entry)->section, 0,
682 sizeof (asection));
73e87d70
AM
683
684 return entry;
685}
686
687#define section_hash_lookup(table, string, create, copy) \
688 ((struct section_hash_entry *) \
689 bfd_hash_lookup ((table), (string), (create), (copy)))
690
691/* Initializes a new section. NEWSECT->NAME is already set. */
692
73e87d70 693static asection *
c58b9523 694bfd_section_init (bfd *abfd, asection *newsect)
73e87d70
AM
695{
696 static int section_id = 0x10; /* id 0 to 3 used by STD_SECTION. */
697
698 newsect->id = section_id;
699 newsect->index = abfd->section_count;
73e87d70 700 newsect->owner = abfd;
73e87d70
AM
701
702 /* Create a symbol whose only job is to point to this section. This
703 is useful for things like relocs which are relative to the base
704 of a section. */
705 newsect->symbol = bfd_make_empty_symbol (abfd);
706 if (newsect->symbol == NULL)
707 return NULL;
708
709 newsect->symbol->name = newsect->name;
710 newsect->symbol->value = 0;
711 newsect->symbol->section = newsect;
712 newsect->symbol->flags = BSF_SECTION_SYM;
713
714 newsect->symbol_ptr_ptr = &newsect->symbol;
715
716 if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect)))
717 return NULL;
718
719 section_id++;
720 abfd->section_count++;
721 *abfd->section_tail = newsect;
722 abfd->section_tail = &newsect->next;
723 return newsect;
724}
725
252b5132
RH
726/*
727DOCDD
728INODE
729section prototypes, , typedef asection, Sections
730SUBSECTION
731 Section prototypes
732
733These are the functions exported by the section handling part of BFD.
734*/
735
9e7b37b3
AM
736/*
737FUNCTION
738 bfd_section_list_clear
739
740SYNOPSIS
741 void bfd_section_list_clear (bfd *);
742
743DESCRIPTION
744 Clears the section list, and also resets the section count and
745 hash table entries.
746*/
747
748void
c58b9523 749bfd_section_list_clear (bfd *abfd)
9e7b37b3
AM
750{
751 abfd->sections = NULL;
752 abfd->section_tail = &abfd->sections;
753 abfd->section_count = 0;
c58b9523 754 memset (abfd->section_htab.table, 0,
9e7b37b3
AM
755 abfd->section_htab.size * sizeof (struct bfd_hash_entry *));
756}
757
252b5132
RH
758/*
759FUNCTION
760 bfd_get_section_by_name
761
762SYNOPSIS
c58b9523 763 asection *bfd_get_section_by_name (bfd *abfd, const char *name);
252b5132
RH
764
765DESCRIPTION
766 Run through @var{abfd} and return the one of the
767 <<asection>>s whose name matches @var{name}, otherwise <<NULL>>.
768 @xref{Sections}, for more information.
769
770 This should only be used in special cases; the normal way to process
771 all sections of a given name is to use <<bfd_map_over_sections>> and
772 <<strcmp>> on the name (or better yet, base it on the section flags
773 or something else) for each section.
774*/
775
776asection *
c58b9523 777bfd_get_section_by_name (bfd *abfd, const char *name)
252b5132 778{
73e87d70
AM
779 struct section_hash_entry *sh;
780
b34976b6 781 sh = section_hash_lookup (&abfd->section_htab, name, FALSE, FALSE);
73e87d70
AM
782 if (sh != NULL)
783 return &sh->section;
252b5132 784
252b5132
RH
785 return NULL;
786}
787
fafe6678
L
788/*
789FUNCTION
790 bfd_get_section_by_name_if
791
792SYNOPSIS
793 asection *bfd_get_section_by_name_if
794 (bfd *abfd,
795 const char *name,
796 bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
797 void *obj);
798
799DESCRIPTION
800 Call the provided function @var{func} for each section
801 attached to the BFD @var{abfd} whose name matches @var{name},
802 passing @var{obj} as an argument. The function will be called
803 as if by
804
805| func (abfd, the_section, obj);
806
807 It returns the first section for which @var{func} returns true,
808 otherwise <<NULL>>.
809
810*/
811
812asection *
813bfd_get_section_by_name_if (bfd *abfd, const char *name,
814 bfd_boolean (*operation) (bfd *,
815 asection *,
816 void *),
817 void *user_storage)
818{
819 struct section_hash_entry *sh;
820 unsigned long hash;
821
822 sh = section_hash_lookup (&abfd->section_htab, name, FALSE, FALSE);
823 if (sh == NULL)
824 return NULL;
825
826 hash = sh->root.hash;
827 do
828 {
829 if ((*operation) (abfd, &sh->section, user_storage))
830 return &sh->section;
831 sh = (struct section_hash_entry *) sh->root.next;
832 }
833 while (sh != NULL && sh->root.hash == hash
834 && strcmp (sh->root.string, name) == 0);
835
836 return NULL;
837}
838
1bd91689
AM
839/*
840FUNCTION
841 bfd_get_unique_section_name
842
843SYNOPSIS
c58b9523
AM
844 char *bfd_get_unique_section_name
845 (bfd *abfd, const char *templat, int *count);
1bd91689
AM
846
847DESCRIPTION
848 Invent a section name that is unique in @var{abfd} by tacking
77cb06e9
AM
849 a dot and a digit suffix onto the original @var{templat}. If
850 @var{count} is non-NULL, then it specifies the first number
851 tried as a suffix to generate a unique name. The value
852 pointed to by @var{count} will be incremented in this case.
1bd91689
AM
853*/
854
855char *
c58b9523 856bfd_get_unique_section_name (bfd *abfd, const char *templat, int *count)
1bd91689
AM
857{
858 int num;
859 unsigned int len;
860 char *sname;
861
a966dba9 862 len = strlen (templat);
c58b9523 863 sname = bfd_malloc (len + 8);
b3ea3584
AM
864 if (sname == NULL)
865 return NULL;
d4c88bbb 866 memcpy (sname, templat, len);
1bd91689
AM
867 num = 1;
868 if (count != NULL)
869 num = *count;
870
871 do
872 {
873 /* If we have a million sections, something is badly wrong. */
874 if (num > 999999)
875 abort ();
77cb06e9 876 sprintf (sname + len, ".%d", num++);
1bd91689 877 }
b34976b6 878 while (section_hash_lookup (&abfd->section_htab, sname, FALSE, FALSE));
1bd91689
AM
879
880 if (count != NULL)
881 *count = num;
882 return sname;
883}
884
252b5132
RH
885/*
886FUNCTION
887 bfd_make_section_old_way
888
889SYNOPSIS
c58b9523 890 asection *bfd_make_section_old_way (bfd *abfd, const char *name);
252b5132
RH
891
892DESCRIPTION
893 Create a new empty section called @var{name}
894 and attach it to the end of the chain of sections for the
895 BFD @var{abfd}. An attempt to create a section with a name which
896 is already in use returns its pointer without changing the
897 section chain.
898
899 It has the funny name since this is the way it used to be
900 before it was rewritten....
901
902 Possible errors are:
903 o <<bfd_error_invalid_operation>> -
904 If output has already started for this BFD.
905 o <<bfd_error_no_memory>> -
906 If memory allocation fails.
907
908*/
909
252b5132 910asection *
c58b9523 911bfd_make_section_old_way (bfd *abfd, const char *name)
252b5132 912{
73e87d70
AM
913 struct section_hash_entry *sh;
914 asection *newsect;
915
916 if (abfd->output_has_begun)
917 {
918 bfd_set_error (bfd_error_invalid_operation);
919 return NULL;
920 }
921
922 if (strcmp (name, BFD_ABS_SECTION_NAME) == 0)
923 return bfd_abs_section_ptr;
924
925 if (strcmp (name, BFD_COM_SECTION_NAME) == 0)
926 return bfd_com_section_ptr;
927
928 if (strcmp (name, BFD_UND_SECTION_NAME) == 0)
929 return bfd_und_section_ptr;
930
931 if (strcmp (name, BFD_IND_SECTION_NAME) == 0)
932 return bfd_ind_section_ptr;
933
b34976b6 934 sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
73e87d70
AM
935 if (sh == NULL)
936 return NULL;
937
938 newsect = &sh->section;
939 if (newsect->name != NULL)
252b5132 940 {
73e87d70
AM
941 /* Section already exists. */
942 return newsect;
252b5132 943 }
73e87d70
AM
944
945 newsect->name = name;
946 return bfd_section_init (abfd, newsect);
252b5132
RH
947}
948
949/*
950FUNCTION
951 bfd_make_section_anyway
952
953SYNOPSIS
c58b9523 954 asection *bfd_make_section_anyway (bfd *abfd, const char *name);
252b5132
RH
955
956DESCRIPTION
957 Create a new empty section called @var{name} and attach it to the end of
958 the chain of sections for @var{abfd}. Create a new section even if there
959 is already a section with that name.
960
961 Return <<NULL>> and set <<bfd_error>> on error; possible errors are:
962 o <<bfd_error_invalid_operation>> - If output has already started for @var{abfd}.
963 o <<bfd_error_no_memory>> - If memory allocation fails.
964*/
965
966sec_ptr
c58b9523 967bfd_make_section_anyway (bfd *abfd, const char *name)
252b5132 968{
73e87d70 969 struct section_hash_entry *sh;
252b5132 970 asection *newsect;
252b5132
RH
971
972 if (abfd->output_has_begun)
973 {
974 bfd_set_error (bfd_error_invalid_operation);
975 return NULL;
976 }
977
b34976b6 978 sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
73e87d70 979 if (sh == NULL)
252b5132
RH
980 return NULL;
981
73e87d70
AM
982 newsect = &sh->section;
983 if (newsect->name != NULL)
4d7ce4dd 984 {
72adc230
AM
985 /* We are making a section of the same name. Put it in the
986 section hash table. Even though we can't find it directly by a
987 hash lookup, we'll be able to find the section by traversing
988 sh->root.next quicker than looking at all the bfd sections. */
989 struct section_hash_entry *new_sh;
990 new_sh = (struct section_hash_entry *)
991 bfd_section_hash_newfunc (NULL, &abfd->section_htab, name);
992 if (new_sh == NULL)
73e87d70 993 return NULL;
72adc230 994
73499ab8 995 new_sh->root = sh->root;
72adc230
AM
996 sh->root.next = &new_sh->root;
997 newsect = &new_sh->section;
252b5132
RH
998 }
999
73e87d70
AM
1000 newsect->name = name;
1001 return bfd_section_init (abfd, newsect);
252b5132
RH
1002}
1003
1004/*
1005FUNCTION
1006 bfd_make_section
1007
1008SYNOPSIS
c58b9523 1009 asection *bfd_make_section (bfd *, const char *name);
252b5132
RH
1010
1011DESCRIPTION
1012 Like <<bfd_make_section_anyway>>, but return <<NULL>> (without calling
1013 bfd_set_error ()) without changing the section chain if there is already a
1014 section named @var{name}. If there is an error, return <<NULL>> and set
1015 <<bfd_error>>.
1016*/
1017
1018asection *
c58b9523 1019bfd_make_section (bfd *abfd, const char *name)
252b5132 1020{
73e87d70
AM
1021 struct section_hash_entry *sh;
1022 asection *newsect;
252b5132 1023
73e87d70 1024 if (abfd->output_has_begun)
252b5132 1025 {
73e87d70
AM
1026 bfd_set_error (bfd_error_invalid_operation);
1027 return NULL;
252b5132
RH
1028 }
1029
73e87d70
AM
1030 if (strcmp (name, BFD_ABS_SECTION_NAME) == 0
1031 || strcmp (name, BFD_COM_SECTION_NAME) == 0
1032 || strcmp (name, BFD_UND_SECTION_NAME) == 0
1033 || strcmp (name, BFD_IND_SECTION_NAME) == 0)
1034 return NULL;
252b5132 1035
b34976b6 1036 sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
73e87d70
AM
1037 if (sh == NULL)
1038 return NULL;
1039
1040 newsect = &sh->section;
1041 if (newsect->name != NULL)
252b5132 1042 {
73e87d70 1043 /* Section already exists. */
003d627e 1044 return NULL;
252b5132
RH
1045 }
1046
73e87d70
AM
1047 newsect->name = name;
1048 return bfd_section_init (abfd, newsect);
252b5132
RH
1049}
1050
252b5132
RH
1051/*
1052FUNCTION
1053 bfd_set_section_flags
1054
1055SYNOPSIS
c58b9523
AM
1056 bfd_boolean bfd_set_section_flags
1057 (bfd *abfd, asection *sec, flagword flags);
252b5132
RH
1058
1059DESCRIPTION
1060 Set the attributes of the section @var{sec} in the BFD
b34976b6
AM
1061 @var{abfd} to the value @var{flags}. Return <<TRUE>> on success,
1062 <<FALSE>> on error. Possible error returns are:
252b5132
RH
1063
1064 o <<bfd_error_invalid_operation>> -
1065 The section cannot have one or more of the attributes
1066 requested. For example, a .bss section in <<a.out>> may not
1067 have the <<SEC_HAS_CONTENTS>> field set.
1068
1069*/
1070
b34976b6 1071bfd_boolean
c58b9523
AM
1072bfd_set_section_flags (bfd *abfd ATTRIBUTE_UNUSED,
1073 sec_ptr section,
1074 flagword flags)
252b5132
RH
1075{
1076#if 0
1077 /* If you try to copy a text section from an input file (where it
1078 has the SEC_CODE flag set) to an output file, this loses big if
1079 the bfd_applicable_section_flags (abfd) doesn't have the SEC_CODE
1080 set - which it doesn't, at least not for a.out. FIXME */
1081
1082 if ((flags & bfd_applicable_section_flags (abfd)) != flags)
1083 {
1084 bfd_set_error (bfd_error_invalid_operation);
b34976b6 1085 return FALSE;
252b5132
RH
1086 }
1087#endif
1088
1089 section->flags = flags;
b34976b6 1090 return TRUE;
252b5132
RH
1091}
1092
252b5132
RH
1093/*
1094FUNCTION
1095 bfd_map_over_sections
1096
1097SYNOPSIS
c58b9523
AM
1098 void bfd_map_over_sections
1099 (bfd *abfd,
1100 void (*func) (bfd *abfd, asection *sect, void *obj),
1101 void *obj);
252b5132
RH
1102
1103DESCRIPTION
1104 Call the provided function @var{func} for each section
1105 attached to the BFD @var{abfd}, passing @var{obj} as an
1106 argument. The function will be called as if by
1107
c58b9523 1108| func (abfd, the_section, obj);
252b5132 1109
7dee875e 1110 This is the preferred method for iterating over sections; an
252b5132
RH
1111 alternative would be to use a loop:
1112
1113| section *p;
1114| for (p = abfd->sections; p != NULL; p = p->next)
c58b9523 1115| func (abfd, p, ...)
252b5132 1116
252b5132
RH
1117*/
1118
252b5132 1119void
c58b9523
AM
1120bfd_map_over_sections (bfd *abfd,
1121 void (*operation) (bfd *, asection *, void *),
1122 void *user_storage)
252b5132
RH
1123{
1124 asection *sect;
1125 unsigned int i = 0;
1126
1127 for (sect = abfd->sections; sect != NULL; i++, sect = sect->next)
1128 (*operation) (abfd, sect, user_storage);
1129
1130 if (i != abfd->section_count) /* Debugging */
1131 abort ();
1132}
1133
bc87dd2e
L
1134/*
1135FUNCTION
1136 bfd_sections_find_if
1137
1138SYNOPSIS
1139 asection *bfd_sections_find_if
1140 (bfd *abfd,
1141 bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
1142 void *obj);
1143
1144DESCRIPTION
1145 Call the provided function @var{func} for each section
1146 attached to the BFD @var{abfd}, passing @var{obj} as an
1147 argument. The function will be called as if by
1148
1149| func (abfd, the_section, obj);
1150
1151 It returns the first section for which @var{func} returns true.
1152
1153*/
1154
1155asection *
1156bfd_sections_find_if (bfd *abfd,
1157 bfd_boolean (*operation) (bfd *, asection *, void *),
1158 void *user_storage)
1159{
1160 asection *sect;
1161
1162 for (sect = abfd->sections; sect != NULL; sect = sect->next)
1163 if ((*operation) (abfd, sect, user_storage))
1164 break;
1165
1166 return sect;
1167}
1168
252b5132
RH
1169/*
1170FUNCTION
1171 bfd_set_section_size
1172
1173SYNOPSIS
c58b9523
AM
1174 bfd_boolean bfd_set_section_size
1175 (bfd *abfd, asection *sec, bfd_size_type val);
252b5132
RH
1176
1177DESCRIPTION
1178 Set @var{sec} to the size @var{val}. If the operation is
b34976b6 1179 ok, then <<TRUE>> is returned, else <<FALSE>>.
252b5132
RH
1180
1181 Possible error returns:
1182 o <<bfd_error_invalid_operation>> -
1183 Writing has started to the BFD, so setting the size is invalid.
1184
1185*/
1186
b34976b6 1187bfd_boolean
c58b9523 1188bfd_set_section_size (bfd *abfd, sec_ptr ptr, bfd_size_type val)
252b5132
RH
1189{
1190 /* Once you've started writing to any section you cannot create or change
7b82c249 1191 the size of any others. */
252b5132
RH
1192
1193 if (abfd->output_has_begun)
1194 {
1195 bfd_set_error (bfd_error_invalid_operation);
b34976b6 1196 return FALSE;
252b5132
RH
1197 }
1198
1199 ptr->_cooked_size = val;
1200 ptr->_raw_size = val;
1201
b34976b6 1202 return TRUE;
252b5132
RH
1203}
1204
1205/*
1206FUNCTION
1207 bfd_set_section_contents
1208
1209SYNOPSIS
c58b9523 1210 bfd_boolean bfd_set_section_contents
85302095
AC
1211 (bfd *abfd, asection *section, const void *data,
1212 file_ptr offset, bfd_size_type count);
252b5132 1213
252b5132
RH
1214DESCRIPTION
1215 Sets the contents of the section @var{section} in BFD
1216 @var{abfd} to the data starting in memory at @var{data}. The
1217 data is written to the output section starting at offset
9a968f43 1218 @var{offset} for @var{count} octets.
252b5132 1219
b34976b6 1220 Normally <<TRUE>> is returned, else <<FALSE>>. Possible error
252b5132
RH
1221 returns are:
1222 o <<bfd_error_no_contents>> -
1223 The output section does not have the <<SEC_HAS_CONTENTS>>
1224 attribute, so nothing can be written to it.
1225 o and some more too
1226
1227 This routine is front end to the back end function
1228 <<_bfd_set_section_contents>>.
1229
252b5132
RH
1230*/
1231
b34976b6 1232bfd_boolean
c58b9523
AM
1233bfd_set_section_contents (bfd *abfd,
1234 sec_ptr section,
85302095 1235 const void *location,
c58b9523
AM
1236 file_ptr offset,
1237 bfd_size_type count)
252b5132
RH
1238{
1239 bfd_size_type sz;
1240
1241 if (!(bfd_get_section_flags (abfd, section) & SEC_HAS_CONTENTS))
1242 {
1243 bfd_set_error (bfd_error_no_contents);
b34976b6 1244 return FALSE;
252b5132
RH
1245 }
1246
911d08a7 1247 sz = section->_cooked_size != 0 ? section->_cooked_size : section->_raw_size;
dc810e39
AM
1248 if ((bfd_size_type) offset > sz
1249 || count > sz
1250 || offset + count > sz
1251 || count != (size_t) count)
252b5132 1252 {
252b5132 1253 bfd_set_error (bfd_error_bad_value);
b34976b6 1254 return FALSE;
252b5132 1255 }
252b5132
RH
1256
1257 switch (abfd->direction)
1258 {
1259 case read_direction:
1260 case no_direction:
1261 bfd_set_error (bfd_error_invalid_operation);
b34976b6 1262 return FALSE;
252b5132
RH
1263
1264 case write_direction:
1265 break;
1266
1267 case both_direction:
1268 /* File is opened for update. `output_has_begun' some time ago when
1269 the file was created. Do not recompute sections sizes or alignments
1270 in _bfd_set_section_content. */
b34976b6 1271 abfd->output_has_begun = TRUE;
252b5132
RH
1272 break;
1273 }
1274
9a951beb
RH
1275 /* Record a copy of the data in memory if desired. */
1276 if (section->contents
c58b9523 1277 && location != section->contents + offset)
dc810e39 1278 memcpy (section->contents + offset, location, (size_t) count);
9a951beb 1279
252b5132
RH
1280 if (BFD_SEND (abfd, _bfd_set_section_contents,
1281 (abfd, section, location, offset, count)))
1282 {
b34976b6
AM
1283 abfd->output_has_begun = TRUE;
1284 return TRUE;
252b5132
RH
1285 }
1286
b34976b6 1287 return FALSE;
252b5132
RH
1288}
1289
1290/*
1291FUNCTION
1292 bfd_get_section_contents
1293
1294SYNOPSIS
c58b9523
AM
1295 bfd_boolean bfd_get_section_contents
1296 (bfd *abfd, asection *section, void *location, file_ptr offset,
1297 bfd_size_type count);
252b5132
RH
1298
1299DESCRIPTION
1300 Read data from @var{section} in BFD @var{abfd}
1301 into memory starting at @var{location}. The data is read at an
1302 offset of @var{offset} from the start of the input section,
1303 and is read for @var{count} bytes.
1304
1305 If the contents of a constructor with the <<SEC_CONSTRUCTOR>>
1306 flag set are requested or if the section does not have the
1307 <<SEC_HAS_CONTENTS>> flag set, then the @var{location} is filled
b34976b6
AM
1308 with zeroes. If no errors occur, <<TRUE>> is returned, else
1309 <<FALSE>>.
252b5132 1310
252b5132 1311*/
b34976b6 1312bfd_boolean
c58b9523
AM
1313bfd_get_section_contents (bfd *abfd,
1314 sec_ptr section,
1315 void *location,
1316 file_ptr offset,
1317 bfd_size_type count)
252b5132
RH
1318{
1319 bfd_size_type sz;
1320
1321 if (section->flags & SEC_CONSTRUCTOR)
1322 {
dc810e39 1323 memset (location, 0, (size_t) count);
b34976b6 1324 return TRUE;
252b5132
RH
1325 }
1326
dc810e39
AM
1327 sz = section->_raw_size;
1328 if ((bfd_size_type) offset > sz
1329 || count > sz
1330 || offset + count > sz
1331 || count != (size_t) count)
252b5132 1332 {
252b5132 1333 bfd_set_error (bfd_error_bad_value);
b34976b6 1334 return FALSE;
252b5132 1335 }
252b5132
RH
1336
1337 if (count == 0)
1338 /* Don't bother. */
b34976b6 1339 return TRUE;
252b5132
RH
1340
1341 if ((section->flags & SEC_HAS_CONTENTS) == 0)
1342 {
dc810e39 1343 memset (location, 0, (size_t) count);
b34976b6 1344 return TRUE;
252b5132
RH
1345 }
1346
1347 if ((section->flags & SEC_IN_MEMORY) != 0)
1348 {
1349 memcpy (location, section->contents + offset, (size_t) count);
b34976b6 1350 return TRUE;
252b5132
RH
1351 }
1352
1353 return BFD_SEND (abfd, _bfd_get_section_contents,
1354 (abfd, section, location, offset, count));
1355}
1356
1357/*
1358FUNCTION
1359 bfd_copy_private_section_data
1360
1361SYNOPSIS
c58b9523
AM
1362 bfd_boolean bfd_copy_private_section_data
1363 (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
252b5132
RH
1364
1365DESCRIPTION
1366 Copy private section information from @var{isec} in the BFD
1367 @var{ibfd} to the section @var{osec} in the BFD @var{obfd}.
b34976b6 1368 Return <<TRUE>> on success, <<FALSE>> on error. Possible error
252b5132
RH
1369 returns are:
1370
1371 o <<bfd_error_no_memory>> -
1372 Not enough memory exists to create private data for @var{osec}.
1373
1374.#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
1375. BFD_SEND (obfd, _bfd_copy_private_section_data, \
1376. (ibfd, isection, obfd, osection))
1377*/
1378
1379/*
1380FUNCTION
1381 _bfd_strip_section_from_output
1382
1383SYNOPSIS
1384 void _bfd_strip_section_from_output
c58b9523 1385 (struct bfd_link_info *info, asection *section);
252b5132
RH
1386
1387DESCRIPTION
7f8d5fc9 1388 Remove @var{section} from the output. If the output section
bc0ba537
AM
1389 becomes empty, remove it from the output bfd.
1390
1391 This function won't actually do anything except twiddle flags
1392 if called too late in the linking process, when it's not safe
1393 to remove sections.
252b5132
RH
1394*/
1395void
c58b9523 1396_bfd_strip_section_from_output (struct bfd_link_info *info, asection *s)
252b5132 1397{
bc0ba537
AM
1398 asection *os;
1399 asection *is;
1400 bfd *abfd;
252b5132 1401
bc0ba537 1402 s->flags |= SEC_EXCLUDE;
7f8d5fc9 1403
bc0ba537
AM
1404 /* If the section wasn't assigned to an output section, or the
1405 section has been discarded by the linker script, there's nothing
1406 more to do. */
252b5132 1407 os = s->output_section;
bc0ba537 1408 if (os == NULL || os->owner == NULL)
2f484710
HPN
1409 return;
1410
bc0ba537
AM
1411 /* If the output section has other (non-excluded) input sections, we
1412 can't remove it. */
1413 for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
1414 for (is = abfd->sections; is != NULL; is = is->next)
1415 if (is->output_section == os && (is->flags & SEC_EXCLUDE) == 0)
1416 return;
7f8d5fc9 1417
bc0ba537
AM
1418 /* If the output section is empty, flag it for removal too.
1419 See ldlang.c:strip_excluded_output_sections for the action. */
1420 os->flags |= SEC_EXCLUDE;
252b5132 1421}
b885599b 1422
72adc230
AM
1423/*
1424FUNCTION
1425 bfd_generic_is_group_section
1426
1427SYNOPSIS
1428 bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
1429
1430DESCRIPTION
1431 Returns TRUE if @var{sec} is a member of a group.
1432*/
1433
1434bfd_boolean
1435bfd_generic_is_group_section (bfd *abfd ATTRIBUTE_UNUSED,
1436 const asection *sec ATTRIBUTE_UNUSED)
1437{
1438 return FALSE;
1439}
1440
b885599b
AM
1441/*
1442FUNCTION
e61463e1 1443 bfd_generic_discard_group
b885599b
AM
1444
1445SYNOPSIS
b34976b6 1446 bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
b885599b
AM
1447
1448DESCRIPTION
1449 Remove all members of @var{group} from the output.
1450*/
1451
b34976b6 1452bfd_boolean
c58b9523
AM
1453bfd_generic_discard_group (bfd *abfd ATTRIBUTE_UNUSED,
1454 asection *group ATTRIBUTE_UNUSED)
b885599b 1455{
b34976b6 1456 return TRUE;
b885599b 1457}
This page took 0.360596 seconds and 4 git commands to generate.