* hosts/h-*.h: Configure fopen using ../include/fopen-*.h
[deliverable/binutils-gdb.git] / bfd / section.c
1 /* Object file "section" support for the BFD library.
2 Copyright (C) 1990-1991 Free Software Foundation, Inc.
3 Written by Cygnus Support.
4
5 This file is part of BFD, the Binary File Descriptor library.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21 /*doc*
22 @section Sections
23 Sections are supported in BFD in @code{section.c}.
24
25 The raw data contained within a BFD is maintained through the section
26 abstraction. A single BFD may have any number of sections, and keeps
27 hold of them by pointing to the first, each one points to the next in
28 the list.
29
30 @menu
31 * Section Input::
32 * Section Output::
33 * typedef asection::
34 * section prototypes::
35 @end menu
36
37 @node Section Input, Section Output, Sections, Sections
38 @subsection Section Input
39 When a BFD is opened for reading, the section structures are created
40 and attached to the BFD.
41
42 Each section has a name which describes the section in the outside
43 world - for example, @code{a.out} would contain at least three
44 sections, called @code{.text}, @code{.data} and @code{.bss}.
45
46 Sometimes a BFD will contain more than the 'natural' number of
47 sections. A back end may attach other sections containing constructor
48 data, or an application may add a section (using bfd_make_section) to
49 the sections attached to an already open BFD. For example, the linker
50 creates a supernumary section @code{COMMON} for each input file's BFD
51 to hold information about common storage.
52
53 The raw data is not necessarily read in at the same time as the
54 section descriptor is created. Some targets may leave the data in
55 place until a @code{bfd_get_section_contents} call is made. Other back
56 ends may read in all the data at once - For example; an S-record file
57 has to be read once to determine the size of the data. An IEEE-695
58 file doesn't contain raw data in sections, but data and relocation
59 expressions intermixed, so the data area has to be parsed to get out
60 the data and relocations.
61
62 @node Section Output, typedef asection, Section Input, Sections
63 @subsection Section Output
64 To write a new object style BFD, the various sections to be written
65 have to be created. They are attached to the BFD in the same way as
66 input sections, data is written to the sections using
67 @code{bfd_set_section_contents}.
68
69 The linker uses the fields @code{output_section} and
70 @code{output_offset} to create an output file.
71
72 The data to be written comes from input sections attached to the
73 output sections. The output section structure can be considered a
74 filter for the input section, the output section determines the vma of
75 the output data and the name, but the input section determines the
76 offset into the output section of the data to be written.
77
78 Eg to create a section "O", starting at 0x100, 0x123 long, containing two
79 subsections, "A" at offset 0x0 (ie at vma 0x100) and "B" at offset
80 0x20 (ie at vma 0x120) the structures would look like:
81
82 *+
83
84 section name "A"
85 output_offset 0x00
86 size 0x20
87 output_section -----------> section name "O"
88 | vma 0x100
89 section name "B" | size 0x123
90 output_offset 0x20 |
91 size 0x103 |
92 output_section --------|
93
94 *-
95
96 */
97
98
99 #include "bfd.h"
100 #include "sysdep.h"
101 #include "libbfd.h"
102
103
104 /*doc*
105 @node typedef asection, section prototypes, Section Output, Sections
106 @subsection typedef asection
107 */
108
109 /*proto*
110 The shape of a section struct:
111
112 *+++
113
114 $typedef struct sec {
115
116 The name of the section, the name isn't a copy, the pointer is
117 the same as that passed to bfd_make_section.
118
119 $ CONST char *name;
120
121 The next section in the list belonging to the BFD, or NULL.
122
123 $ struct sec *next;
124
125 The field flags contains attributes of the section. Some of these
126 flags are read in from the object file, and some are synthesized from
127 other information.
128
129 $flagword flags;
130
131
132 $#define SEC_NO_FLAGS 0x000
133
134 Tells the OS to allocate space for this section when loaded.
135 This would clear for a section containing debug information only.
136
137 $#define SEC_ALLOC 0x001
138
139 Tells the OS to load the section from the file when loading.
140 This would be clear for a .bss section
141
142 $#define SEC_LOAD 0x002
143
144 The section contains data still to be relocated, so there will be some
145 relocation information too.
146
147 $#define SEC_RELOC 0x004
148
149 Obsolete ?
150
151 $#define SEC_BALIGN 0x008
152
153 A signal to the OS that the section contains read only data.
154
155 $#define SEC_READONLY 0x010
156
157 The section contains code only.
158
159 $#define SEC_CODE 0x020
160
161 The section contains data only.
162
163 $#define SEC_DATA 0x040
164
165 The section will reside in ROM.
166
167 $#define SEC_ROM 0x080
168
169 The section contains constructor information. This section type is
170 used by the linker to create lists of constructors and destructors
171 used by @code{g++}. When a back end sees a symbol which should be used
172 in a constructor list, it creates a new section for the type of name
173 (eg @code{__CTOR_LIST__}), attaches the symbol to it and builds a
174 relocation. To build the lists of constructors, all the linker has to
175 to is catenate all the sections called @code{__CTOR_LIST__} and
176 relocte the data contained within - exactly the operations it would
177 peform on standard data.
178
179 $#define SEC_CONSTRUCTOR 0x100
180
181 The section is a constuctor, and should be placed at the end of the ..
182
183 $#define SEC_CONSTRUCTOR_TEXT 0x1100
184
185 $#define SEC_CONSTRUCTOR_DATA 0x2100
186
187 $#define SEC_CONSTRUCTOR_BSS 0x3100
188
189
190 The section has contents - a bss section could be
191 @code{SEC_ALLOC} | @code{SEC_HAS_CONTENTS}, a debug section could be
192 @code{SEC_HAS_CONTENTS}
193
194 $#define SEC_HAS_CONTENTS 0x200
195
196 An instruction to the linker not to output sections containing
197 this flag even if they have information which would normally be written.
198
199 $#define SEC_NEVER_LOAD 0x400
200
201
202 The base address of the section in the address space of the target.
203
204 $ bfd_vma vma;
205
206 The size of the section in bytes of the loaded section. This contains
207 a value even if the section has no contents (eg, the size of @code{.bss}).
208
209 $ bfd_size_type size;
210
211 If this section is going to be output, then this value is the
212 offset into the output section of the first byte in the input
213 section. Eg, if this was going to start at the 100th byte in the
214 output section, this value would be 100.
215
216 $ bfd_vma output_offset;
217
218 The output section through which to map on output.
219
220 $ struct sec *output_section;
221
222 The alignment requirement of the section, as an exponent - eg 3
223 aligns to 2^3 (or 8)
224
225 $ unsigned int alignment_power;
226
227 If an input section, a pointer to a vector of relocation records for
228 the data in this section.
229
230 $ struct reloc_cache_entry *relocation;
231
232 If an output section, a pointer to a vector of pointers to
233 relocation records for the data in this section.
234
235 $ struct reloc_cache_entry **orelocation;
236
237 The number of relocation records in one of the above
238
239 $ unsigned reloc_count;
240
241 Which section is it 0..nth
242
243 $ int index;
244
245 Information below is back end specific - and not always used or
246 updated
247
248 File position of section data
249
250 $ file_ptr filepos;
251 File position of relocation info
252
253 $ file_ptr rel_filepos;
254
255 File position of line data
256
257 $ file_ptr line_filepos;
258
259 Pointer to data for applications
260
261 $ PTR userdata;
262
263 $ struct lang_output_section *otheruserdata;
264
265 Attached line number information
266
267 $ alent *lineno;
268 Number of line number records
269
270 $ unsigned int lineno_count;
271
272 When a section is being output, this value changes as more
273 linenumbers are written out
274
275 $ file_ptr moving_line_filepos;
276
277 what the section number is in the target world
278
279 $ unsigned int target_index;
280
281 $ PTR used_by_bfd;
282
283 If this is a constructor section then here is a list of the
284 relocations created to relocate items within it.
285
286 $ struct relent_chain *constructor_chain;
287
288 The BFD which owns the section.
289
290 $ bfd *owner;
291
292 $} asection ;
293
294 *---
295
296 */
297
298 /*doc*
299 @node section prototypes, , typedef asection, Sections
300 @subsection section prototypes
301
302 */
303 /*proto* bfd_get_section_by_name
304 Runs through the provided @var{abfd} and returns the @code{asection}
305 who's name matches that provided, otherwise NULL. @xref{Sections}, for more information.
306
307 *; PROTO(asection *, bfd_get_section_by_name,
308 (bfd *abfd, CONST char *name));
309 */
310 asection *
311 DEFUN(bfd_get_section_by_name,(abfd, name),
312 bfd *abfd AND
313 CONST char *name)
314 {
315 asection *sect;
316
317 for (sect = abfd->sections; sect != NULL; sect = sect->next)
318 if (!strcmp (sect->name, name)) return sect;
319 return NULL;
320 }
321
322
323 /*proto* bfd_make_section
324 This function creates a new empty section called @var{name} and attaches it
325 to the end of the chain of sections for the BFD supplied. An attempt to
326 create a section with a name which is already in use, returns NULL without
327 changing the section chain.
328
329 Possible errors are:
330 @table @code
331 @item invalid_operation
332 If output has already started for this BFD.
333 @item no_memory
334 If obstack alloc fails.
335 @end table
336
337 *; PROTO(asection *, bfd_make_section, (bfd *, CONST char *name));
338 */
339
340
341
342 sec_ptr
343 DEFUN(bfd_make_section,(abfd, name),
344 bfd *abfd AND
345 CONST char * name)
346 {
347 asection *newsect;
348 asection ** prev = &abfd->sections;
349 asection * sect = abfd->sections;
350
351 if (abfd->output_has_begun) {
352 bfd_error = invalid_operation;
353 return NULL;
354 }
355
356 while (sect) {
357 if (!strcmp(sect->name, name)) return NULL;
358 prev = &sect->next;
359 sect = sect->next;
360 }
361
362 newsect = (asection *) bfd_zalloc(abfd, sizeof (asection));
363 if (newsect == NULL) {
364 bfd_error = no_memory;
365 return NULL;
366 }
367
368 newsect->name = name;
369 newsect->index = abfd->section_count++;
370 newsect->flags = SEC_NO_FLAGS;
371
372 newsect->userdata = 0;
373 newsect->next = (asection *)NULL;
374 newsect->relocation = (arelent *)NULL;
375 newsect->reloc_count = 0;
376 newsect->line_filepos =0;
377 newsect->owner = abfd;
378 if (BFD_SEND (abfd, _new_section_hook, (abfd, newsect)) != true) {
379 free (newsect);
380 return NULL;
381 }
382
383 *prev = newsect;
384 return newsect;
385 }
386
387
388 /*proto* bfd_set_section_flags
389 Attempts to set the attributes of the section named in the BFD
390 supplied to the value. Returns true on success, false on error.
391 Possible error returns are:
392 @table @code
393 @item invalid operation
394 The section cannot have one or more of the attributes requested. For
395 example, a .bss section in @code{a.out} may not have the
396 @code{SEC_HAS_CONTENTS} field set.
397 @end table
398
399 *; PROTO(boolean, bfd_set_section_flags,
400 (bfd *, asection *, flagword));
401 */
402
403 boolean
404 DEFUN(bfd_set_section_flags,(abfd, section, flags),
405 bfd *abfd AND
406 sec_ptr section AND
407 flagword flags)
408 {
409 if ((flags & bfd_applicable_section_flags (abfd)) != flags) {
410 bfd_error = invalid_operation;
411 return false;
412 }
413
414 section->flags = flags;
415 return true;
416 }
417
418
419 /*proto* bfd_map_over_sections
420 Calls the provided function @var{func} for each section attached to
421 the BFD @var{abfd}, passing @var{obj} as an argument. The function
422 will be called as if by
423
424 @example
425 func(abfd, the_section, obj);
426 @end example
427
428
429 *; PROTO(void, bfd_map_over_sections,
430 (bfd *abfd, void (*func)(), PTR obj));
431
432 This is the prefered method for iterating over sections, an
433 alternative would be to use a loop:
434
435 @example
436 section *p;
437 for (p = abfd->sections; p != NULL; p = p->next)
438 func(abfd, p, ...)
439 @end example
440 */
441
442 /*VARARGS2*/
443 void
444 DEFUN(bfd_map_over_sections,(abfd, operation, user_storage),
445 bfd *abfd AND
446 void (*operation)() AND
447 PTR user_storage)
448 {
449 asection *sect;
450 int i = 0;
451
452 for (sect = abfd->sections; sect != NULL; i++, sect = sect->next)
453 (*operation) (abfd, sect, user_storage);
454
455 if (i != abfd->section_count) /* Debugging */
456 abort();
457 }
458
459
460 /*proto* bfd_set_section_size
461 Sets @var{section} to the size @var{val}. If the operation is ok, then
462 @code{true} is returned, else @code{false}.
463
464 Possible error returns:
465 @table @code
466 @item invalid_operation
467 Writing has started to the BFD, so setting the size is invalid
468 @end table
469
470 *; PROTO(boolean, bfd_set_section_size,
471 (bfd *, asection *, bfd_size_type val));
472 */
473
474 boolean
475 DEFUN(bfd_set_section_size,(abfd, ptr, val),
476 bfd *abfd AND
477 sec_ptr ptr AND
478 bfd_size_type val)
479 {
480 /* Once you've started writing to any section you cannot create or change
481 the size of any others. */
482
483 if (abfd->output_has_begun) {
484 bfd_error = invalid_operation;
485 return false;
486 }
487
488 ptr->size = val;
489
490 return true;
491 }
492
493 /*proto* bfd_set_section_contents
494 Sets the contents of the section @var{section} in BFD @var{abfd} to
495 the data starting in memory at @var{data}. The data is written to the
496 output section starting at offset @var{offset} for @var{count} bytes.
497
498 Normally @code{true} is returned, else @code{false}. Possible error
499 returns are:
500 @table @code
501 @item no_contents
502 The output section does not have the @code{SEC_HAS_CONTENTS}
503 attribute, so nothing can be written to it.
504 @item and some more too
505 @end table
506 This routine is front end to the back end function @code{_bfd_set_section_contents}.
507
508 *; PROTO(boolean, bfd_set_section_contents,
509 (bfd *abfd,
510 asection *section,
511 PTR data,
512 file_ptr offset,
513 bfd_size_type count));
514
515 */
516
517 boolean
518 DEFUN(bfd_set_section_contents,(abfd, section, location, offset, count),
519 bfd *abfd AND
520 sec_ptr section AND
521 PTR location AND
522 file_ptr offset AND
523 bfd_size_type count)
524 {
525 if (!(bfd_get_section_flags(abfd, section) & SEC_HAS_CONTENTS))
526 {
527 bfd_error = no_contents;
528 return(false);
529 }
530
531 if (BFD_SEND (abfd, _bfd_set_section_contents,
532 (abfd, section, location, offset, count)))
533 {
534 abfd->output_has_begun = true;
535 return true;
536 }
537
538 return false;
539 }
540
541 /*proto* bfd_get_section_contents
542 This function reads data from @var{section} in BFD @var{abfd} into
543 memory starting at @var{location}. The data is read at an offset of
544 @var{offset} from the start of the input section, and is read for
545 @var{count} bytes.
546
547 If the contents of a constuctor with the @code{SEC_CONSTUCTOR} flag
548 set are requested, then the @var{location} is filled with zeroes.
549
550 If no errors occur, @code{true} is returned, else @code{false}.
551 Possible errors are:
552
553 @table @code
554 @item unknown yet
555 @end table
556
557 *; PROTO(boolean, bfd_get_section_contents,
558 (bfd *abfd, asection *section, PTR location,
559 file_ptr offset, bfd_size_type count));
560
561
562 */
563 boolean
564 DEFUN(bfd_get_section_contents,(abfd, section, location, offset, count),
565 bfd *abfd AND
566 sec_ptr section AND
567 PTR location AND
568 file_ptr offset AND
569 bfd_size_type count)
570 {
571 if (section->flags & SEC_CONSTRUCTOR)
572 {
573 memset(location, 0, (unsigned)count);
574 return true;
575 }
576 else
577 {
578 return (BFD_SEND (abfd, _bfd_get_section_contents,
579 (abfd, section, location, offset, count)));
580 }
581 }
582
This page took 0.061292 seconds and 4 git commands to generate.