* ieee.c (ieee_get_symtab): always null terminate the symbol list,
[deliverable/binutils-gdb.git] / bfd / section.c
CommitLineData
6724ff46
RP
1/* Object file "section" support for the BFD library.
2 Copyright (C) 1990-1991 Free Software Foundation, Inc.
3 Written by Cygnus Support.
4
5This file is part of BFD, the Binary File Descriptor library.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
4a96bc04
SC
21/*
22SECTION
23 Sections
985fca12 24
4a96bc04
SC
25 Sections are supported in BFD in <<section.c>>.
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, and keeps hold of them by pointing to the first,
30 each one points to the next in the list.
985fca12
SC
31
32@menu
151760d0
RP
33@* Section Input::
34@* Section Output::
35@* typedef asection::
36@* section prototypes::
985fca12
SC
37@end menu
38
e98e6ec1 39@node Section Input, Section Output, Sections, Sections
4a96bc04
SC
40SUBSECTION
41 Section Input
42
43 When a BFD is opened for reading, the section structures are
44 created and attached to the BFD.
45
46 Each section has a name which describes the section in the
47 outside world - for example, <<a.out>> would contain at least
48 three sections, called <<.text>>, <<.data>> and <<.bss>>.
49
50 Sometimes a BFD will contain more than the 'natural' number of
51 sections. A back end may attach other sections containing
52 constructor data, or an application may add a section (using
53 bfd_make_section) to the sections attached to an already open
54 BFD. For example, the linker creates a supernumary section
55 <<COMMON>> for each input file's BFD to hold information about
56 common storage.
57
58 The raw data is not necessarily read in at the same time as
59 the section descriptor is created. Some targets may leave the
60 data in place until a <<bfd_get_section_contents>> call is
61 made. Other back ends may read in all the data at once - For
62 example; an S-record file has to be read once to determine the
63 size of the data. An IEEE-695 file doesn't contain raw data in
64 sections, but data and relocation expressions intermixed, so
65 the data area has to be parsed to get out the data and
66 relocations.
67
e98e6ec1 68@node Section Output, typedef asection, Section Input, Sections
4a96bc04
SC
69
70SUBSECTION
71 Section Output
72
73 To write a new object style BFD, the various sections to be
74 written have to be created. They are attached to the BFD in
75 the same way as input sections, data is written to the
76 sections using <<bfd_set_section_contents>>.
77
78 The linker uses the fields <<output_section>> and
79 <<output_offset>> to create an output file.
80
81 The data to be written comes from input sections attached to
82 the output sections. The output section structure can be
83 considered a filter for the input section, the output section
84 determines the vma of the output data and the name, but the
85 input section determines the offset into the output section of
86 the data to be written.
87
88 Eg to create a section "O", starting at 0x100, 0x123 long,
89 containing two subsections, "A" at offset 0x0 (ie at vma
90 0x100) and "B" at offset 0x20 (ie at vma 0x120) the structures
91 would look like:
92
93| section name "A"
94| output_offset 0x00
95| size 0x20
96| output_section -----------> section name "O"
97| | vma 0x100
98| section name "B" | size 0x123
99| output_offset 0x20 |
100| size 0x103 |
101| output_section --------|
102
985fca12 103
e98e6ec1
SC
104SUBSECTION
105 Seglets
106
107 The data within a section is stored in a <<seglet>>. These
108 are much like the fixups in <<gas>>. The seglet abstraction
109 allows the a section to grow and shrink within itself.
110
111 A seglet knows how big it is, and which is the next seglet and
112 where the raw data for it is, and also points to a list of
113 relocations which apply to it.
114
115 The seglet is used by the linker to perform relaxing on final
116 code. The application creates code which is as big as
117 necessary to make it work without relaxing, and the user can
118 select whether to relax. Sometimes relaxing takes a lot of
119 time. The linker runs around the relocations to see if any
120 are attached to data which can be shrunk, if so it does it on
121 a seglet by seglet basis.
122
985fca12
SC
123*/
124
125
985fca12 126#include "bfd.h"
cbdc7909 127#include "sysdep.h"
985fca12
SC
128#include "libbfd.h"
129
4a96bc04 130
e98e6ec1
SC
131/*doc*
132@node typedef asection, section prototypes, Section Output, Sections
4a96bc04
SC
133SUBSECTION
134 typedef asection
135
136 The shape of a section struct:
137
138CODE_FRAGMENT
139.
140.typedef struct sec
141.{
142. {* The name of the section, the name isn't a copy, the pointer is
143. the same as that passed to bfd_make_section. *}
144.
145. CONST char *name;
146.
e98e6ec1
SC
147.
148. {* Which section is it 0.nth *}
149.
150. int index;
151.
4a96bc04
SC
152. {* The next section in the list belonging to the BFD, or NULL. *}
153.
154. struct sec *next;
155.
156. {* The field flags contains attributes of the section. Some of
157. flags are read in from the object file, and some are
158. synthesized from other information. *}
159.
160. flagword flags;
161.
162.#define SEC_NO_FLAGS 0x000
163.
164. {* Tells the OS to allocate space for this section when loaded.
165. This would clear for a section containing debug information
166. only. *}
167.
168.
169.#define SEC_ALLOC 0x001
170. {* Tells the OS to load the section from the file when loading.
171. This would be clear for a .bss section *}
172.
173.#define SEC_LOAD 0x002
174. {* The section contains data still to be relocated, so there will
175. be some relocation information too. *}
176.
177.#define SEC_RELOC 0x004
178.
179. {* Obsolete ? *}
180.
181.#define SEC_BALIGN 0x008
182.
183. {* A signal to the OS that the section contains read only
184. data. *}
185.#define SEC_READONLY 0x010
186.
187. {* The section contains code only. *}
188.
189.#define SEC_CODE 0x020
190.
191. {* The section contains data only. *}
192.
193.#define SEC_DATA 0x040
194.
195. {* The section will reside in ROM. *}
196.
197.#define SEC_ROM 0x080
198.
199. {* The section contains constructor information. This section
200. type is used by the linker to create lists of constructors and
201. destructors used by <<g++>>. When a back end sees a symbol
202. which should be used in a constructor list, it creates a new
203. section for the type of name (eg <<__CTOR_LIST__>>), attaches
204. the symbol to it and builds a relocation. To build the lists
205. of constructors, all the linker has to to is catenate all the
206. sections called <<__CTOR_LIST__>> and relocte the data
207. contained within - exactly the operations it would peform on
208. standard data. *}
209.
210.#define SEC_CONSTRUCTOR 0x100
211.
212. {* The section is a constuctor, and should be placed at the
213. end of the . *}
214.
215.
216.#define SEC_CONSTRUCTOR_TEXT 0x1100
217.
218.#define SEC_CONSTRUCTOR_DATA 0x2100
219.
220.#define SEC_CONSTRUCTOR_BSS 0x3100
221.
222.
223. {* The section has contents - a bss section could be
224. <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>, a debug section could be
225. <<SEC_HAS_CONTENTS>> *}
226.
227.#define SEC_HAS_CONTENTS 0x200
228.
229. {* An instruction to the linker not to output sections
230. containing this flag even if they have information which
231. would normally be written. *}
232.
233.#define SEC_NEVER_LOAD 0x400
234.
e98e6ec1 235.
4a96bc04
SC
236.
237. bfd_vma vma;
238.
e98e6ec1 239. {* The size of the section in bytes, as it will be output.
4a96bc04 240. contains a value even if the section has no contents (eg, the
e98e6ec1
SC
241. size of <<.bss>>). This will be filled in after relocation *}
242.
243. bfd_size_type _cooked_size;
244.
245. {* The size on disk of the section in bytes originally. Normally this
246. value is the same as the size, but if some relaxing has
247. been done, then this value will be bigger. *}
4a96bc04 248.
e98e6ec1 249. bfd_size_type _raw_size;
4a96bc04
SC
250.
251. {* If this section is going to be output, then this value is the
252. offset into the output section of the first byte in the input
253. section. Eg, if this was going to start at the 100th byte in
254. the output section, this value would be 100. *}
255.
256. bfd_vma output_offset;
257.
258. {* The output section through which to map on output. *}
259.
260. struct sec *output_section;
261.
262. {* The alignment requirement of the section, as an exponent - eg
263. 3 aligns to 2^3 (or 8) *}
264.
265. unsigned int alignment_power;
266.
267. {* If an input section, a pointer to a vector of relocation
268. records for the data in this section. *}
269.
270. struct reloc_cache_entry *relocation;
271.
272. {* If an output section, a pointer to a vector of pointers to
273. relocation records for the data in this section. *}
274.
275. struct reloc_cache_entry **orelocation;
276.
277. {* The number of relocation records in one of the above *}
278.
279. unsigned reloc_count;
280.
4a96bc04
SC
281. {* Information below is back end specific - and not always used
282. or updated
283.
284. File position of section data *}
285.
286. file_ptr filepos;
287.
288. {* File position of relocation info *}
289.
290. file_ptr rel_filepos;
291.
292. {* File position of line data *}
293.
294. file_ptr line_filepos;
295.
296. {* Pointer to data for applications *}
297.
298. PTR userdata;
299.
300. struct lang_output_section *otheruserdata;
301.
302. {* Attached line number information *}
303.
304. alent *lineno;
305.
306. {* Number of line number records *}
307.
308. unsigned int lineno_count;
309.
310. {* When a section is being output, this value changes as more
311. linenumbers are written out *}
312.
313. file_ptr moving_line_filepos;
314.
315. {* what the section number is in the target world *}
316.
e98e6ec1 317. int target_index;
4a96bc04
SC
318.
319. PTR used_by_bfd;
320.
321. {* If this is a constructor section then here is a list of the
322. relocations created to relocate items within it. *}
323.
324. struct relent_chain *constructor_chain;
325.
326. {* The BFD which owns the section. *}
327.
328. bfd *owner;
329.
e98e6ec1
SC
330. boolean reloc_done;
331. {* A symbol which points at this section only *}
332. struct symbol_cache_entry *symbol;
333. struct symbol_cache_entry **symbol_ptr_ptr;
334. struct bfd_seclet_struct *seclets_head;
335. struct bfd_seclet_struct *seclets_tail;
4a96bc04 336.} asection ;
e98e6ec1
SC
337.
338.
339.#define BFD_ABS_SECTION_NAME "*ABS*"
340.#define BFD_UND_SECTION_NAME "*UND*"
341.#define BFD_COM_SECTION_NAME "*COM*"
342.
343. {* the absolute section *}
344. extern asection bfd_abs_section;
345. {* Pointer to the undefined section *}
346. extern asection bfd_und_section;
347. {* Pointer to the common section *}
348. extern asection bfd_com_section;
349.
350. extern struct symbol_cache_entry *bfd_abs_symbol;
351. extern struct symbol_cache_entry *bfd_com_symbol;
352. extern struct symbol_cache_entry *bfd_und_symbol;
353.#define bfd_get_section_size_before_reloc(section) \
354. (section->reloc_done ? (abort(),1): (section)->_raw_size)
355.#define bfd_get_section_size_after_reloc(section) \
356. ((section->reloc_done) ? (section)->_cooked_size: (abort(),1))
985fca12
SC
357*/
358
985fca12 359
e98e6ec1
SC
360
361asection bfd_com_section = { BFD_COM_SECTION_NAME ,0 };
362asection bfd_und_section = { BFD_UND_SECTION_NAME ,0 };
363asection bfd_abs_section = { BFD_ABS_SECTION_NAME ,0 };
364
365struct symbol_cache_entry *bfd_abs_symbol;
366struct symbol_cache_entry *bfd_com_symbol;
367struct symbol_cache_entry *bfd_und_symbol;
368
369/*
370@node section prototypes, , typedef asection, Sections
4a96bc04
SC
371SUBSECTION
372 section prototypes
985fca12 373
4a96bc04
SC
374These are the functions exported by the section handling part of
375<<libbfd>.
376*/
985fca12 377
4a96bc04
SC
378/*
379FUNCTION
380 bfd_get_section_by_name
985fca12 381
4a96bc04
SC
382SYNOPSIS
383 asection *bfd_get_section_by_name(bfd *abfd, CONST char *name);
985fca12 384
4a96bc04
SC
385DESCRIPTION
386 Runs through the provided @var{abfd} and returns the
387 <<asection>> who's name matches that provided, otherwise NULL.
388 @xref{Sections}, for more information.
985fca12 389
4a96bc04 390*/
985fca12 391
4a96bc04
SC
392asection *
393DEFUN(bfd_get_section_by_name,(abfd, name),
394 bfd *abfd AND
395 CONST char *name)
396{
397 asection *sect;
985fca12 398
4a96bc04
SC
399 for (sect = abfd->sections; sect != NULL; sect = sect->next)
400 if (!strcmp (sect->name, name)) return sect;
401 return NULL;
402}
985fca12 403
985fca12 404
4a96bc04
SC
405/*
406FUNCTION
407 bfd_make_section_old_way
985fca12 408
4a96bc04
SC
409SYNOPSIS
410 asection *bfd_make_section_old_way(bfd *, CONST char *name);
985fca12 411
4a96bc04
SC
412DESCRIPTION
413 This function creates a new empty section called @var{name}
414 and attaches it to the end of the chain of sections for the
415 BFD supplied. An attempt to create a section with a name which
416 is already in use, returns its pointer without changing the
417 section chain.
985fca12 418
4a96bc04
SC
419 It has the funny name since this is the way it used to be
420 before is was rewritten...
985fca12 421
4a96bc04
SC
422 Possible errors are:
423 o invalid_operation
424 If output has already started for this BFD.
425 o no_memory
426 If obstack alloc fails.
985fca12
SC
427
428*/
429
985fca12 430
985fca12 431asection *
4a96bc04 432DEFUN(bfd_make_section_old_way,(abfd, name),
985fca12 433 bfd *abfd AND
4a96bc04 434 CONST char * name)
985fca12 435{
4a96bc04
SC
436 asection *sec = bfd_get_section_by_name(abfd, name);
437 if (sec == (asection *)NULL)
438 {
439 sec = bfd_make_section(abfd, name);
440 }
441 return sec;
985fca12
SC
442}
443
444
4a96bc04
SC
445/*
446FUNCTION
447 bfd_make_section
985fca12 448
4a96bc04
SC
449SYNOPSIS
450 asection * bfd_make_section(bfd *, CONST char *name);
985fca12 451
4a96bc04
SC
452DESCRIPTION
453 This function creates a new empty section called @var{name}
454 and attaches it to the end of the chain of sections for the
455 BFD supplied. An attempt to create a section with a name which
456 is already in use, returns NULL without changing the section
457 chain.
458
459 Possible errors are:
460 o invalid_operation - If output has already started for this BFD.
461 o no_memory - If obstack alloc fails.
985fca12
SC
462*/
463
464
465
466sec_ptr
467DEFUN(bfd_make_section,(abfd, name),
468 bfd *abfd AND
469 CONST char * name)
470{
471 asection *newsect;
472 asection ** prev = &abfd->sections;
473 asection * sect = abfd->sections;
474
475 if (abfd->output_has_begun) {
476 bfd_error = invalid_operation;
477 return NULL;
478 }
479
e98e6ec1
SC
480 if (strcmp(name, BFD_ABS_SECTION_NAME) == 0)
481 {
482 return &bfd_abs_section;
483 }
484 if (strcmp(name, BFD_COM_SECTION_NAME) == 0)
485 {
486 return &bfd_com_section;
487 }
488 if (strcmp(name, BFD_UND_SECTION_NAME) == 0)
489 {
490 return &bfd_und_section;
491 }
492
985fca12 493 while (sect) {
cbdc7909 494 if (!strcmp(sect->name, name)) return NULL;
985fca12
SC
495 prev = &sect->next;
496 sect = sect->next;
497 }
498
499 newsect = (asection *) bfd_zalloc(abfd, sizeof (asection));
500 if (newsect == NULL) {
501 bfd_error = no_memory;
502 return NULL;
503 }
504
505 newsect->name = name;
506 newsect->index = abfd->section_count++;
507 newsect->flags = SEC_NO_FLAGS;
508
509 newsect->userdata = 0;
510 newsect->next = (asection *)NULL;
511 newsect->relocation = (arelent *)NULL;
512 newsect->reloc_count = 0;
513 newsect->line_filepos =0;
514 newsect->owner = abfd;
e98e6ec1
SC
515
516/* Create a symbol whos only job is to point to this section. This is
517 usfull for things like relocs which are relative to the base of a
518 section
519 */
520 newsect->symbol = bfd_make_empty_symbol(abfd);
521 newsect->symbol->name = name;
522 newsect->symbol->value = 0;
523 newsect->symbol->section = newsect;
524 newsect->symbol->flags = BSF_SECTION_SYM;
525
526
527 newsect->symbol_ptr_ptr = &newsect->symbol;
528
985fca12
SC
529 if (BFD_SEND (abfd, _new_section_hook, (abfd, newsect)) != true) {
530 free (newsect);
531 return NULL;
532 }
533
534 *prev = newsect;
535 return newsect;
536}
537
538
4a96bc04
SC
539/*
540FUNCTION
541 bfd_set_section_flags
542
543SYNOPSIS
544 boolean bfd_set_section_flags(bfd *, asection *, flagword);
545
546DESCRIPTION
547 Attempts to set the attributes of the section named in the BFD
548 supplied to the value. Returns true on success, false on
549 error. Possible error returns are:
550
551 o invalid operation
552 The section cannot have one or more of the attributes
553 requested. For example, a .bss section in <<a.out>> may not
554 have the <<SEC_HAS_CONTENTS>> field set.
985fca12 555
985fca12
SC
556*/
557
558boolean
559DEFUN(bfd_set_section_flags,(abfd, section, flags),
560 bfd *abfd AND
561 sec_ptr section AND
562 flagword flags)
563{
564 if ((flags & bfd_applicable_section_flags (abfd)) != flags) {
565 bfd_error = invalid_operation;
566 return false;
567 }
568
569 section->flags = flags;
570 return true;
571}
572
573
4a96bc04
SC
574/*
575FUNCTION
576 bfd_map_over_sections
577
578SYNOPSIS
579 void bfd_map_over_sections(bfd *abfd, void (*func)(), PTR obj);
985fca12 580
4a96bc04
SC
581DESCRIPTION
582 Calls the provided function @var{func} for each section
583 attached to the BFD @var{abfd}, passing @var{obj} as an
584 argument. The function will be called as if by
985fca12 585
4a96bc04 586| func(abfd, the_section, obj);
985fca12 587
4a96bc04
SC
588 This is the prefered method for iterating over sections, an
589 alternative would be to use a loop:
590
591| section *p;
592| for (p = abfd->sections; p != NULL; p = p->next)
593| func(abfd, p, ...)
985fca12 594
985fca12 595
985fca12
SC
596*/
597
598/*VARARGS2*/
599void
600DEFUN(bfd_map_over_sections,(abfd, operation, user_storage),
601 bfd *abfd AND
602 void (*operation)() AND
603 PTR user_storage)
604{
605 asection *sect;
606 int i = 0;
607
608 for (sect = abfd->sections; sect != NULL; i++, sect = sect->next)
609 (*operation) (abfd, sect, user_storage);
610
611 if (i != abfd->section_count) /* Debugging */
612 abort();
613}
614
615
4a96bc04
SC
616/*
617FUNCTION
618 bfd_set_section_size
619
620SYNOPSIS
621 boolean bfd_set_section_size(bfd *, asection *, bfd_size_type val);
985fca12 622
4a96bc04
SC
623DESCRIPTION
624 Sets @var{section} to the size @var{val}. If the operation is
625 ok, then <<true>> is returned, else <<false>>.
626
627 Possible error returns:
628 o invalid_operation
629 Writing has started to the BFD, so setting the size is invalid
985fca12 630
985fca12
SC
631*/
632
633boolean
634DEFUN(bfd_set_section_size,(abfd, ptr, val),
635 bfd *abfd AND
636 sec_ptr ptr AND
6724ff46 637 bfd_size_type val)
985fca12
SC
638{
639 /* Once you've started writing to any section you cannot create or change
640 the size of any others. */
641
642 if (abfd->output_has_begun) {
643 bfd_error = invalid_operation;
644 return false;
645 }
646
e98e6ec1
SC
647 ptr->_cooked_size = val;
648 ptr->_raw_size = val;
985fca12
SC
649
650 return true;
651}
652
4a96bc04
SC
653/*
654FUNCTION
655 bfd_set_section_contents
656
657SYNOPSIS
658 boolean bfd_set_section_contents
985fca12
SC
659 (bfd *abfd,
660 asection *section,
661 PTR data,
662 file_ptr offset,
4a96bc04
SC
663 bfd_size_type count);
664
665
666DESCRIPTION
667 Sets the contents of the section @var{section} in BFD
668 @var{abfd} to the data starting in memory at @var{data}. The
669 data is written to the output section starting at offset
670 @var{offset} for @var{count} bytes.
671
e98e6ec1
SC
672
673
4a96bc04
SC
674 Normally <<true>> is returned, else <<false>>. Possible error
675 returns are:
676 o no_contents
677 The output section does not have the <<SEC_HAS_CONTENTS>>
678 attribute, so nothing can be written to it.
679 o and some more too
680
681 This routine is front end to the back end function
682 <<_bfd_set_section_contents>>.
683
985fca12
SC
684
685*/
686
687boolean
688DEFUN(bfd_set_section_contents,(abfd, section, location, offset, count),
689 bfd *abfd AND
690 sec_ptr section AND
691 PTR location AND
692 file_ptr offset AND
693 bfd_size_type count)
694{
695 if (!(bfd_get_section_flags(abfd, section) & SEC_HAS_CONTENTS))
696 {
697 bfd_error = no_contents;
698 return(false);
699 }
700
701 if (BFD_SEND (abfd, _bfd_set_section_contents,
702 (abfd, section, location, offset, count)))
703 {
704 abfd->output_has_begun = true;
705 return true;
706 }
707
708 return false;
709}
710
4a96bc04
SC
711/*
712FUNCTION
713 bfd_get_section_contents
985fca12 714
4a96bc04
SC
715SYNOPSIS
716 boolean bfd_get_section_contents
717 (bfd *abfd, asection *section, PTR location,
718 file_ptr offset, bfd_size_type count);
985fca12 719
4a96bc04
SC
720DESCRIPTION
721 This function reads data from @var{section} in BFD @var{abfd}
722 into memory starting at @var{location}. The data is read at an
723 offset of @var{offset} from the start of the input section,
724 and is read for @var{count} bytes.
985fca12 725
4a96bc04
SC
726 If the contents of a constuctor with the <<SEC_CONSTUCTOR>>
727 flag set are requested, then the @var{location} is filled with
728 zeroes. If no errors occur, <<true>> is returned, else
729 <<false>>.
985fca12 730
985fca12
SC
731
732
733*/
734boolean
735DEFUN(bfd_get_section_contents,(abfd, section, location, offset, count),
736 bfd *abfd AND
737 sec_ptr section AND
738 PTR location AND
739 file_ptr offset AND
740 bfd_size_type count)
741{
742 if (section->flags & SEC_CONSTRUCTOR)
743 {
744 memset(location, 0, (unsigned)count);
745 return true;
746 }
747 else
748 {
749 return (BFD_SEND (abfd, _bfd_get_section_contents,
750 (abfd, section, location, offset, count)));
751 }
752}
753
e98e6ec1
SC
754
755/* Initialize the internal data structures */
756DEFUN_VOID(bfd_section_init)
757{
758
759 bfd_com_symbol = (asymbol *)zalloc(sizeof(asymbol));
760 bfd_com_symbol->name = BFD_COM_SECTION_NAME;
761 bfd_com_symbol->flags = BSF_SECTION_SYM;
762 bfd_com_symbol->section = &bfd_com_section;
763 bfd_com_section.symbol = bfd_com_symbol;
764 bfd_com_section.symbol_ptr_ptr = &bfd_com_symbol;
765 bfd_com_section.output_section = &bfd_com_section;
766
767
768
769 bfd_und_symbol = (asymbol *)zalloc(sizeof(asymbol));
770 bfd_und_symbol->name = BFD_UND_SECTION_NAME;
771 bfd_und_symbol->flags = BSF_SECTION_SYM;
772 bfd_und_symbol->section = &bfd_und_section;
773 bfd_und_section.symbol = bfd_und_symbol;
774 bfd_und_section.symbol_ptr_ptr = &bfd_und_symbol;
775 bfd_und_section.output_section = &bfd_und_section;
776
777 bfd_abs_symbol = (asymbol *)zalloc(sizeof(asymbol));
778 bfd_abs_symbol->name = BFD_ABS_SECTION_NAME;
779 bfd_abs_symbol->flags = BSF_SECTION_SYM;
780 bfd_abs_symbol->section = &bfd_abs_section;
781 bfd_abs_section.symbol = bfd_abs_symbol;
782 bfd_abs_section.symbol_ptr_ptr = &bfd_abs_symbol;
783 bfd_abs_section.output_section = &bfd_abs_section;
784
785
786
787
788
789}
This page took 0.108819 seconds and 4 git commands to generate.