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