* section.c (struct sec): Remove usused flags. Reorganize a little.
[external/binutils.git] / bfd / section.c
1 /* Object file "section" support for the BFD library.
2    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3    2000, 2001, 2002, 2003, 2004
4    Free Software Foundation, Inc.
5    Written by Cygnus Support.
6
7 This file is part of BFD, the Binary File Descriptor library.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
22
23 /*
24 SECTION
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
41 INODE
42 Section Input, Section Output, Sections, Sections
43 SUBSECTION
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
74 INODE
75 Section Output, typedef asection, Section Input, Sections
76
77 SUBSECTION
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
115 SUBSECTION
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
136 #include "bfd.h"
137 #include "sysdep.h"
138 #include "libbfd.h"
139 #include "bfdlink.h"
140
141 /*
142 DOCDD
143 INODE
144 typedef asection, section prototypes, Section Output, Sections
145 SUBSECTION
146         typedef asection
147
148         Here is the section structure:
149
150 CODE_FRAGMENT
151 .
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.  *}
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;
167 .};
168 .
169 .typedef struct bfd_section
170 .{
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.  *}
173 .  const char *name;
174 .
175 .  {* A unique sequence number.  *}
176 .  int id;
177 .
178 .  {* Which section in the bfd; 0..n-1 as sections are created in a bfd.  *}
179 .  int index;
180 .
181 .  {* The next section in the list belonging to the BFD, or NULL.  *}
182 .  struct bfd_section *next;
183 .
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.  *}
187 .  flagword flags;
188 .
189 .#define SEC_NO_FLAGS   0x000
190 .
191 .  {* Tells the OS to allocate space for this section when loading.
192 .     This is clear for a section containing debug information only.  *}
193 .#define SEC_ALLOC      0x001
194 .
195 .  {* Tells the OS to load the section from the file when loading.
196 .     This is clear for a .bss section.  *}
197 .#define SEC_LOAD       0x002
198 .
199 .  {* The section contains data still to be relocated, so there is
200 .     some relocation information too.  *}
201 .#define SEC_RELOC      0x004
202 .
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
208 .
209 .  {* A signal to the OS that the section contains read only data.  *}
210 .#define SEC_READONLY   0x010
211 .
212 .  {* The section contains code only.  *}
213 .#define SEC_CODE       0x020
214 .
215 .  {* The section contains data only.  *}
216 .#define SEC_DATA       0x040
217 .
218 .  {* The section will reside in ROM.  *}
219 .#define SEC_ROM        0x080
220 .
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.  *}
231 .#define SEC_CONSTRUCTOR 0x100
232 .
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>>  *}
236 .#define SEC_HAS_CONTENTS 0x200
237 .
238 .  {* An instruction to the linker to not output the section
239 .     even if it has information which would normally be written.  *}
240 .#define SEC_NEVER_LOAD 0x400
241 .
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.  *}
251 .#define SEC_COFF_SHARED_LIBRARY 0x800
252 .
253 .  {* The section contains thread local data.  *}
254 .#define SEC_THREAD_LOCAL 0x1000
255 .
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 .
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.  *}
269 .#define SEC_IS_COMMON 0x8000
270 .
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.  *}
275 .#define SEC_DEBUGGING 0x10000
276 .
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.  *}
280 .#define SEC_IN_MEMORY 0x20000
281 .
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.  *}
285 .#define SEC_EXCLUDE 0x40000
286 .
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.  *}
291 .#define SEC_SORT_ENTRIES 0x80000
292 .
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.  *}
297 .#define SEC_LINK_ONCE 0x100000
298 .
299 .  {* If SEC_LINK_ONCE is set, this bitfield describes how the linker
300 .     should handle duplicate sections.  *}
301 .#define SEC_LINK_DUPLICATES 0x600000
302 .
303 .  {* This value for SEC_LINK_DUPLICATES means that duplicate
304 .     sections with the same name should simply be discarded.  *}
305 .#define SEC_LINK_DUPLICATES_DISCARD 0x0
306 .
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.  *}
310 .#define SEC_LINK_DUPLICATES_ONE_ONLY 0x200000
311 .
312 .  {* This value for SEC_LINK_DUPLICATES means that the linker
313 .     should warn if any duplicate sections are a different size.  *}
314 .#define SEC_LINK_DUPLICATES_SAME_SIZE 0x400000
315 .
316 .  {* This value for SEC_LINK_DUPLICATES means that the linker
317 .     should warn if any duplicate sections contain different
318 .     contents.  *}
319 .#define SEC_LINK_DUPLICATES_SAME_CONTENTS 0x600000
320 .
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.  *}
325 .#define SEC_LINKER_CREATED 0x800000
326 .
327 .  {* This section should not be subject to garbage collection.  *}
328 .#define SEC_KEEP 0x1000000
329 .
330 .  {* This section contains "short" data, and should be placed
331 .     "near" the GP.  *}
332 .#define SEC_SMALL_DATA 0x2000000
333 .
334 .  {* This section contains data which may be shared with other
335 .     executables or shared objects.  *}
336 .#define SEC_SHARED 0x4000000
337 .
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.  *}
342 .#define SEC_BLOCK 0x8000000
343 .
344 .  {* Conditionally link this section; do not link if there are no
345 .     references found to any symbol in the section.  *}
346 .#define SEC_CLINK 0x10000000
347 .
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 .
357 .  {* This section contains data about section groups.  *}
358 .#define SEC_GROUP 0x80000000
359 .
360 .  {*  End of section flags.  *}
361 .
362 .  {* Some internal packed boolean fields.  *}
363 .
364 .  {* See the vma field.  *}
365 .  unsigned int user_set_vma : 1;
366 .
367 .  {* A mark flag used by some of the linker backends.  *}
368 .  unsigned int linker_mark : 1;
369 .
370 .  {* Another mark flag used by some of the linker backends.  Set for
371 .     output sections that have an input section.  *}
372 .  unsigned int linker_has_input : 1;
373 .
374 .  {* A mark flag used by some linker backends for garbage collection.  *}
375 .  unsigned int gc_mark : 1;
376 .
377 .  {* The following flags are used by the ELF linker. *}
378 .
379 .  {* Mark sections which have been allocated to segments.  *}
380 .  unsigned int segment_mark : 1;
381 .
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.  *}
394 .
395 .  {* Nonzero if this section has TLS related relocations.  *}
396 .  unsigned int has_tls_reloc:1;
397 .
398 .  {* Nonzero if this section has a gp reloc.  *}
399 .  unsigned int has_gp_reloc:1;
400 .
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;
406 .
407 .  {* End of internal packed boolean fields.  *}
408 .
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).  *}
415 .  bfd_vma vma;
416 .
417 .  {*  The load address of the section - where it would be in a
418 .      rom image; really only used for writing section header
419 .      information.  *}
420 .  bfd_vma lma;
421 .
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.  *}
425 .  bfd_size_type _cooked_size;
426 .
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.  *}
430 .  bfd_size_type _raw_size;
431 .
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.  *}
439 .  bfd_vma output_offset;
440 .
441 .  {* The output section through which to map on output.  *}
442 .  struct bfd_section *output_section;
443 .
444 .  {* The alignment requirement of the section, as an exponent of 2 -
445 .     e.g., 3 aligns to 2^3 (or 8).  *}
446 .  unsigned int alignment_power;
447 .
448 .  {* If an input section, a pointer to a vector of relocation
449 .     records for the data in this section.  *}
450 .  struct reloc_cache_entry *relocation;
451 .
452 .  {* If an output section, a pointer to a vector of pointers to
453 .     relocation records for the data in this section.  *}
454 .  struct reloc_cache_entry **orelocation;
455 .
456 .  {* The number of relocation records in one of the above.  *}
457 .  unsigned reloc_count;
458 .
459 .  {* Information below is back end specific - and not always used
460 .     or updated.  *}
461 .
462 .  {* File position of section data.  *}
463 .  file_ptr filepos;
464 .
465 .  {* File position of relocation info.  *}
466 .  file_ptr rel_filepos;
467 .
468 .  {* File position of line data.  *}
469 .  file_ptr line_filepos;
470 .
471 .  {* Pointer to data for applications.  *}
472 .  void *userdata;
473 .
474 .  {* If the SEC_IN_MEMORY flag is set, this points to the actual
475 .     contents.  *}
476 .  unsigned char *contents;
477 .
478 .  {* Attached line number information.  *}
479 .  alent *lineno;
480 .
481 .  {* Number of line number records.  *}
482 .  unsigned int lineno_count;
483 .
484 .  {* Entity size for merging purposes.  *}
485 .  unsigned int entsize;
486 .
487 .  {* Optional information about a COMDAT entry; NULL if not COMDAT.  *}
488 .  struct bfd_comdat_info *comdat;
489 .
490 .  {* Points to the kept section if this section is a link-once section,
491 .     and is discarded.  *}
492 .  struct bfd_section *kept_section;
493 .
494 .  {* When a section is being output, this value changes as more
495 .     linenumbers are written out.  *}
496 .  file_ptr moving_line_filepos;
497 .
498 .  {* What the section number is in the target world.  *}
499 .  int target_index;
500 .
501 .  void *used_by_bfd;
502 .
503 .  {* If this is a constructor section then here is a list of the
504 .     relocations created to relocate items within it.  *}
505 .  struct relent_chain *constructor_chain;
506 .
507 .  {* The BFD which owns the section.  *}
508 .  bfd *owner;
509 .
510 .  {* A symbol which points at this section only.  *}
511 .  struct bfd_symbol *symbol;
512 .  struct bfd_symbol **symbol_ptr_ptr;
513 .
514 .  struct bfd_link_order *link_order_head;
515 .  struct bfd_link_order *link_order_tail;
516 .} asection;
517 .
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.  *}
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 .
528 .{* The absolute section.  *}
529 .extern asection bfd_abs_section;
530 .#define bfd_abs_section_ptr ((asection *) &bfd_abs_section)
531 .#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
532 .{* Pointer to the undefined section.  *}
533 .extern asection bfd_und_section;
534 .#define bfd_und_section_ptr ((asection *) &bfd_und_section)
535 .#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
536 .{* Pointer to the common section.  *}
537 .extern asection bfd_com_section;
538 .#define bfd_com_section_ptr ((asection *) &bfd_com_section)
539 .{* Pointer to the indirect section.  *}
540 .extern asection bfd_ind_section;
541 .#define bfd_ind_section_ptr ((asection *) &bfd_ind_section)
542 .#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
543 .
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 .
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;
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 .
580 */
581
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
594 /* These symbols are global, not specific to any BFD.  Therefore, anything
595    that tries to change them is broken, and should be repaired.  */
596
597 static const asymbol global_syms[] =
598 {
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)
603 };
604
605 #define STD_SECTION(SEC, FLAGS, SYM, NAME, IDX)                         \
606   const asymbol * const SYM = (asymbol *) &global_syms[IDX];            \
607   asection SEC =                                                        \
608     /* name, id,  index, next, flags, user_set_vma,                  */ \
609     { NAME,  IDX, 0,     NULL, FLAGS, 0,                                \
610                                                                         \
611     /* linker_mark, linker_has_input, gc_mark, segment_mark,         */ \
612        0,           0,                1,       0,                       \
613                                                                         \
614     /* sec_info_type, use_rela_p, has_tls_reloc, has_gp_reloc,       */ \
615        0,             0,          0,             0,                     \
616                                                                         \
617     /* need_finalize_relax, reloc_done,                              */ \
618        0,                   0,                                          \
619                                                                         \
620     /* vma, lma, _cooked_size, _raw_size,                            */ \
621        0,   0,   0,            0,                                       \
622                                                                         \
623     /* output_offset, output_section,      alignment_power,          */ \
624        0,             (struct bfd_section *) &SEC, 0,                   \
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                                                                         \
632     /* entsize, comdat, kept_section, moving_line_filepos,           */ \
633        0,       NULL,   NULL,         0,                                \
634                                                                         \
635     /* target_index, used_by_bfd, constructor_chain, owner,          */ \
636        0,            NULL,        NULL,              NULL,              \
637                                                                         \
638     /* symbol,                                                       */ \
639        (struct bfd_symbol *) &global_syms[IDX],                         \
640                                                                         \
641     /* symbol_ptr_ptr,                                               */ \
642        (struct bfd_symbol **) &SYM,                                     \
643                                                                         \
644     /* link_order_head, link_order_tail                              */ \
645        NULL,            NULL                                            \
646     }
647
648 STD_SECTION (bfd_com_section, SEC_IS_COMMON, bfd_com_symbol,
649              BFD_COM_SECTION_NAME, 0);
650 STD_SECTION (bfd_und_section, 0, bfd_und_symbol, BFD_UND_SECTION_NAME, 1);
651 STD_SECTION (bfd_abs_section, 0, bfd_abs_symbol, BFD_ABS_SECTION_NAME, 2);
652 STD_SECTION (bfd_ind_section, 0, bfd_ind_symbol, BFD_IND_SECTION_NAME, 3);
653 #undef STD_SECTION
654
655 struct 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
663 struct bfd_hash_entry *
664 bfd_section_hash_newfunc (struct bfd_hash_entry *entry,
665                           struct bfd_hash_table *table,
666                           const char *string)
667 {
668   /* Allocate the structure if it has not already been allocated by a
669      subclass.  */
670   if (entry == NULL)
671     {
672       entry = (struct bfd_hash_entry *)
673         bfd_hash_allocate (table, sizeof (struct section_hash_entry));
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)
681     memset (&((struct section_hash_entry *) entry)->section, 0,
682             sizeof (asection));
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
693 static asection *
694 bfd_section_init (bfd *abfd, asection *newsect)
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;
700   newsect->owner = abfd;
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
726 /*
727 DOCDD
728 INODE
729 section prototypes,  , typedef asection, Sections
730 SUBSECTION
731         Section prototypes
732
733 These are the functions exported by the section handling part of BFD.
734 */
735
736 /*
737 FUNCTION
738         bfd_section_list_clear
739
740 SYNOPSIS
741         void bfd_section_list_clear (bfd *);
742
743 DESCRIPTION
744         Clears the section list, and also resets the section count and
745         hash table entries.
746 */
747
748 void
749 bfd_section_list_clear (bfd *abfd)
750 {
751   abfd->sections = NULL;
752   abfd->section_tail = &abfd->sections;
753   abfd->section_count = 0;
754   memset (abfd->section_htab.table, 0,
755           abfd->section_htab.size * sizeof (struct bfd_hash_entry *));
756 }
757
758 /*
759 FUNCTION
760         bfd_get_section_by_name
761
762 SYNOPSIS
763         asection *bfd_get_section_by_name (bfd *abfd, const char *name);
764
765 DESCRIPTION
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
776 asection *
777 bfd_get_section_by_name (bfd *abfd, const char *name)
778 {
779   struct section_hash_entry *sh;
780
781   sh = section_hash_lookup (&abfd->section_htab, name, FALSE, FALSE);
782   if (sh != NULL)
783     return &sh->section;
784
785   return NULL;
786 }
787
788 /*
789 FUNCTION
790         bfd_get_section_by_name_if
791
792 SYNOPSIS
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
799 DESCRIPTION
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
812 asection *
813 bfd_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
839 /*
840 FUNCTION
841         bfd_get_unique_section_name
842
843 SYNOPSIS
844         char *bfd_get_unique_section_name
845           (bfd *abfd, const char *templat, int *count);
846
847 DESCRIPTION
848         Invent a section name that is unique in @var{abfd} by tacking
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.
853 */
854
855 char *
856 bfd_get_unique_section_name (bfd *abfd, const char *templat, int *count)
857 {
858   int num;
859   unsigned int len;
860   char *sname;
861
862   len = strlen (templat);
863   sname = bfd_malloc (len + 8);
864   if (sname == NULL)
865     return NULL;
866   memcpy (sname, templat, len);
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 ();
876       sprintf (sname + len, ".%d", num++);
877     }
878   while (section_hash_lookup (&abfd->section_htab, sname, FALSE, FALSE));
879
880   if (count != NULL)
881     *count = num;
882   return sname;
883 }
884
885 /*
886 FUNCTION
887         bfd_make_section_old_way
888
889 SYNOPSIS
890         asection *bfd_make_section_old_way (bfd *abfd, const char *name);
891
892 DESCRIPTION
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
910 asection *
911 bfd_make_section_old_way (bfd *abfd, const char *name)
912 {
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
934   sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
935   if (sh == NULL)
936     return NULL;
937
938   newsect = &sh->section;
939   if (newsect->name != NULL)
940     {
941       /* Section already exists.  */
942       return newsect;
943     }
944
945   newsect->name = name;
946   return bfd_section_init (abfd, newsect);
947 }
948
949 /*
950 FUNCTION
951         bfd_make_section_anyway
952
953 SYNOPSIS
954         asection *bfd_make_section_anyway (bfd *abfd, const char *name);
955
956 DESCRIPTION
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
966 sec_ptr
967 bfd_make_section_anyway (bfd *abfd, const char *name)
968 {
969   struct section_hash_entry *sh;
970   asection *newsect;
971
972   if (abfd->output_has_begun)
973     {
974       bfd_set_error (bfd_error_invalid_operation);
975       return NULL;
976     }
977
978   sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
979   if (sh == NULL)
980     return NULL;
981
982   newsect = &sh->section;
983   if (newsect->name != NULL)
984     {
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)
993         return NULL;
994
995       new_sh->root = sh->root;
996       sh->root.next = &new_sh->root;
997       newsect = &new_sh->section;
998     }
999
1000   newsect->name = name;
1001   return bfd_section_init (abfd, newsect);
1002 }
1003
1004 /*
1005 FUNCTION
1006         bfd_make_section
1007
1008 SYNOPSIS
1009         asection *bfd_make_section (bfd *, const char *name);
1010
1011 DESCRIPTION
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
1018 asection *
1019 bfd_make_section (bfd *abfd, const char *name)
1020 {
1021   struct section_hash_entry *sh;
1022   asection *newsect;
1023
1024   if (abfd->output_has_begun)
1025     {
1026       bfd_set_error (bfd_error_invalid_operation);
1027       return NULL;
1028     }
1029
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;
1035
1036   sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
1037   if (sh == NULL)
1038     return NULL;
1039
1040   newsect = &sh->section;
1041   if (newsect->name != NULL)
1042     {
1043       /* Section already exists.  */
1044       return NULL;
1045     }
1046
1047   newsect->name = name;
1048   return bfd_section_init (abfd, newsect);
1049 }
1050
1051 /*
1052 FUNCTION
1053         bfd_set_section_flags
1054
1055 SYNOPSIS
1056         bfd_boolean bfd_set_section_flags
1057           (bfd *abfd, asection *sec, flagword flags);
1058
1059 DESCRIPTION
1060         Set the attributes of the section @var{sec} in the BFD
1061         @var{abfd} to the value @var{flags}. Return <<TRUE>> on success,
1062         <<FALSE>> on error. Possible error returns are:
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
1071 bfd_boolean
1072 bfd_set_section_flags (bfd *abfd ATTRIBUTE_UNUSED,
1073                        sec_ptr section,
1074                        flagword flags)
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);
1085       return FALSE;
1086     }
1087 #endif
1088
1089   section->flags = flags;
1090   return TRUE;
1091 }
1092
1093 /*
1094 FUNCTION
1095         bfd_map_over_sections
1096
1097 SYNOPSIS
1098         void bfd_map_over_sections
1099           (bfd *abfd,
1100            void (*func) (bfd *abfd, asection *sect, void *obj),
1101            void *obj);
1102
1103 DESCRIPTION
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
1108 |       func (abfd, the_section, obj);
1109
1110         This is the preferred method for iterating over sections; an
1111         alternative would be to use a loop:
1112
1113 |          section *p;
1114 |          for (p = abfd->sections; p != NULL; p = p->next)
1115 |             func (abfd, p, ...)
1116
1117 */
1118
1119 void
1120 bfd_map_over_sections (bfd *abfd,
1121                        void (*operation) (bfd *, asection *, void *),
1122                        void *user_storage)
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
1134 /*
1135 FUNCTION
1136         bfd_sections_find_if
1137
1138 SYNOPSIS
1139         asection *bfd_sections_find_if
1140           (bfd *abfd,
1141            bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
1142            void *obj);
1143
1144 DESCRIPTION
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
1155 asection *
1156 bfd_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
1169 /*
1170 FUNCTION
1171         bfd_set_section_size
1172
1173 SYNOPSIS
1174         bfd_boolean bfd_set_section_size
1175           (bfd *abfd, asection *sec, bfd_size_type val);
1176
1177 DESCRIPTION
1178         Set @var{sec} to the size @var{val}. If the operation is
1179         ok, then <<TRUE>> is returned, else <<FALSE>>.
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
1187 bfd_boolean
1188 bfd_set_section_size (bfd *abfd, sec_ptr ptr, bfd_size_type val)
1189 {
1190   /* Once you've started writing to any section you cannot create or change
1191      the size of any others.  */
1192
1193   if (abfd->output_has_begun)
1194     {
1195       bfd_set_error (bfd_error_invalid_operation);
1196       return FALSE;
1197     }
1198
1199   ptr->_cooked_size = val;
1200   ptr->_raw_size = val;
1201
1202   return TRUE;
1203 }
1204
1205 /*
1206 FUNCTION
1207         bfd_set_section_contents
1208
1209 SYNOPSIS
1210         bfd_boolean bfd_set_section_contents
1211           (bfd *abfd, asection *section, const void *data,
1212            file_ptr offset, bfd_size_type count);
1213
1214 DESCRIPTION
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
1218         @var{offset} for @var{count} octets.
1219
1220         Normally <<TRUE>> is returned, else <<FALSE>>. Possible error
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
1230 */
1231
1232 bfd_boolean
1233 bfd_set_section_contents (bfd *abfd,
1234                           sec_ptr section,
1235                           const void *location,
1236                           file_ptr offset,
1237                           bfd_size_type count)
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);
1244       return FALSE;
1245     }
1246
1247   sz = section->_cooked_size != 0 ? section->_cooked_size : section->_raw_size;
1248   if ((bfd_size_type) offset > sz
1249       || count > sz
1250       || offset + count > sz
1251       || count != (size_t) count)
1252     {
1253       bfd_set_error (bfd_error_bad_value);
1254       return FALSE;
1255     }
1256
1257   switch (abfd->direction)
1258     {
1259     case read_direction:
1260     case no_direction:
1261       bfd_set_error (bfd_error_invalid_operation);
1262       return FALSE;
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.  */
1271       abfd->output_has_begun = TRUE;
1272       break;
1273     }
1274
1275   /* Record a copy of the data in memory if desired.  */
1276   if (section->contents
1277       && location != section->contents + offset)
1278     memcpy (section->contents + offset, location, (size_t) count);
1279
1280   if (BFD_SEND (abfd, _bfd_set_section_contents,
1281                 (abfd, section, location, offset, count)))
1282     {
1283       abfd->output_has_begun = TRUE;
1284       return TRUE;
1285     }
1286
1287   return FALSE;
1288 }
1289
1290 /*
1291 FUNCTION
1292         bfd_get_section_contents
1293
1294 SYNOPSIS
1295         bfd_boolean bfd_get_section_contents
1296           (bfd *abfd, asection *section, void *location, file_ptr offset,
1297            bfd_size_type count);
1298
1299 DESCRIPTION
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
1308         with zeroes. If no errors occur, <<TRUE>> is returned, else
1309         <<FALSE>>.
1310
1311 */
1312 bfd_boolean
1313 bfd_get_section_contents (bfd *abfd,
1314                           sec_ptr section,
1315                           void *location,
1316                           file_ptr offset,
1317                           bfd_size_type count)
1318 {
1319   bfd_size_type sz;
1320
1321   if (section->flags & SEC_CONSTRUCTOR)
1322     {
1323       memset (location, 0, (size_t) count);
1324       return TRUE;
1325     }
1326
1327   sz = section->_raw_size;
1328   if ((bfd_size_type) offset > sz
1329       || count > sz
1330       || offset + count > sz
1331       || count != (size_t) count)
1332     {
1333       bfd_set_error (bfd_error_bad_value);
1334       return FALSE;
1335     }
1336
1337   if (count == 0)
1338     /* Don't bother.  */
1339     return TRUE;
1340
1341   if ((section->flags & SEC_HAS_CONTENTS) == 0)
1342     {
1343       memset (location, 0, (size_t) count);
1344       return TRUE;
1345     }
1346
1347   if ((section->flags & SEC_IN_MEMORY) != 0)
1348     {
1349       memcpy (location, section->contents + offset, (size_t) count);
1350       return TRUE;
1351     }
1352
1353   return BFD_SEND (abfd, _bfd_get_section_contents,
1354                    (abfd, section, location, offset, count));
1355 }
1356
1357 /*
1358 FUNCTION
1359         bfd_copy_private_section_data
1360
1361 SYNOPSIS
1362         bfd_boolean bfd_copy_private_section_data
1363           (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
1364
1365 DESCRIPTION
1366         Copy private section information from @var{isec} in the BFD
1367         @var{ibfd} to the section @var{osec} in the BFD @var{obfd}.
1368         Return <<TRUE>> on success, <<FALSE>> on error.  Possible error
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 /*
1380 FUNCTION
1381         _bfd_strip_section_from_output
1382
1383 SYNOPSIS
1384         void _bfd_strip_section_from_output
1385           (struct bfd_link_info *info, asection *section);
1386
1387 DESCRIPTION
1388         Remove @var{section} from the output.  If the output section
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.
1394 */
1395 void
1396 _bfd_strip_section_from_output (struct bfd_link_info *info, asection *s)
1397 {
1398   asection *os;
1399   asection *is;
1400   bfd *abfd;
1401
1402   s->flags |= SEC_EXCLUDE;
1403
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.  */
1407   os = s->output_section;
1408   if (os == NULL || os->owner == NULL)
1409     return;
1410
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;
1417
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;
1421 }
1422
1423 /*
1424 FUNCTION
1425         bfd_generic_is_group_section
1426
1427 SYNOPSIS
1428         bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
1429
1430 DESCRIPTION
1431         Returns TRUE if @var{sec} is a member of a group.
1432 */
1433
1434 bfd_boolean
1435 bfd_generic_is_group_section (bfd *abfd ATTRIBUTE_UNUSED,
1436                               const asection *sec ATTRIBUTE_UNUSED)
1437 {
1438   return FALSE;
1439 }
1440
1441 /*
1442 FUNCTION
1443         bfd_generic_discard_group
1444
1445 SYNOPSIS
1446         bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
1447
1448 DESCRIPTION
1449         Remove all members of @var{group} from the output.
1450 */
1451
1452 bfd_boolean
1453 bfd_generic_discard_group (bfd *abfd ATTRIBUTE_UNUSED,
1454                            asection *group ATTRIBUTE_UNUSED)
1455 {
1456   return TRUE;
1457 }