mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 11:00:01 +08:00
Changed the @node to use INODE
This commit is contained in:
750
bfd/section.c
750
bfd/section.c
@ -18,14 +18,16 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
/*doc*
|
/*
|
||||||
@section Sections
|
SECTION
|
||||||
Sections are supported in BFD in @code{section.c}.
|
Sections
|
||||||
|
|
||||||
The raw data contained within a BFD is maintained through the section
|
Sections are supported in BFD in <<section.c>>.
|
||||||
abstraction. A single BFD may have any number of sections, and keeps
|
|
||||||
hold of them by pointing to the first, each one points to the next in
|
The raw data contained within a BFD is maintained through the
|
||||||
the list.
|
section abstraction. A single BFD may have any number of
|
||||||
|
sections, and keeps hold of them by pointing to the first,
|
||||||
|
each one points to the next in the list.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Section Input::
|
* Section Input::
|
||||||
@ -34,64 +36,73 @@ the list.
|
|||||||
* section prototypes::
|
* section prototypes::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Section Input, Section Output, Sections, Sections
|
INODE
|
||||||
@subsection Section Input
|
Section Input, Section Output, Sections, Sections
|
||||||
When a BFD is opened for reading, the section structures are created
|
|
||||||
and attached to the BFD.
|
|
||||||
|
|
||||||
Each section has a name which describes the section in the outside
|
SUBSECTION
|
||||||
world - for example, @code{a.out} would contain at least three
|
Section Input
|
||||||
sections, called @code{.text}, @code{.data} and @code{.bss}.
|
|
||||||
|
When a BFD is opened for reading, the section structures are
|
||||||
|
created and attached to the BFD.
|
||||||
|
|
||||||
|
Each section has a name which describes the section in the
|
||||||
|
outside world - for example, <<a.out>> would contain at least
|
||||||
|
three sections, called <<.text>>, <<.data>> and <<.bss>>.
|
||||||
|
|
||||||
Sometimes a BFD will contain more than the 'natural' number of
|
Sometimes a BFD will contain more than the 'natural' number of
|
||||||
sections. A back end may attach other sections containing constructor
|
sections. A back end may attach other sections containing
|
||||||
data, or an application may add a section (using bfd_make_section) to
|
constructor data, or an application may add a section (using
|
||||||
the sections attached to an already open BFD. For example, the linker
|
bfd_make_section) to the sections attached to an already open
|
||||||
creates a supernumary section @code{COMMON} for each input file's BFD
|
BFD. For example, the linker creates a supernumary section
|
||||||
to hold information about common storage.
|
<<COMMON>> for each input file's BFD to hold information about
|
||||||
|
common storage.
|
||||||
|
|
||||||
The raw data is not necessarily read in at the same time as the
|
The raw data is not necessarily read in at the same time as
|
||||||
section descriptor is created. Some targets may leave the data in
|
the section descriptor is created. Some targets may leave the
|
||||||
place until a @code{bfd_get_section_contents} call is made. Other back
|
data in place until a <<bfd_get_section_contents>> call is
|
||||||
ends may read in all the data at once - For example; an S-record file
|
made. Other back ends may read in all the data at once - For
|
||||||
has to be read once to determine the size of the data. An IEEE-695
|
example; an S-record file has to be read once to determine the
|
||||||
file doesn't contain raw data in sections, but data and relocation
|
size of the data. An IEEE-695 file doesn't contain raw data in
|
||||||
expressions intermixed, so the data area has to be parsed to get out
|
sections, but data and relocation expressions intermixed, so
|
||||||
the data and relocations.
|
the data area has to be parsed to get out the data and
|
||||||
|
relocations.
|
||||||
|
|
||||||
@node Section Output, typedef asection, Section Input, Sections
|
INODE
|
||||||
@subsection Section Output
|
Section Output, typedef asection, Section Input, Sections
|
||||||
To write a new object style BFD, the various sections to be written
|
|
||||||
have to be created. They are attached to the BFD in the same way as
|
|
||||||
input sections, data is written to the sections using
|
|
||||||
@code{bfd_set_section_contents}.
|
|
||||||
|
|
||||||
The linker uses the fields @code{output_section} and
|
SUBSECTION
|
||||||
@code{output_offset} to create an output file.
|
Section Output
|
||||||
|
|
||||||
The data to be written comes from input sections attached to the
|
To write a new object style BFD, the various sections to be
|
||||||
output sections. The output section structure can be considered a
|
written have to be created. They are attached to the BFD in
|
||||||
filter for the input section, the output section determines the vma of
|
the same way as input sections, data is written to the
|
||||||
the output data and the name, but the input section determines the
|
sections using <<bfd_set_section_contents>>.
|
||||||
offset into the output section of the data to be written.
|
|
||||||
|
|
||||||
Eg to create a section "O", starting at 0x100, 0x123 long, containing two
|
The linker uses the fields <<output_section>> and
|
||||||
subsections, "A" at offset 0x0 (ie at vma 0x100) and "B" at offset
|
<<output_offset>> to create an output file.
|
||||||
0x20 (ie at vma 0x120) the structures would look like:
|
|
||||||
|
|
||||||
*+
|
The data to be written comes from input sections attached to
|
||||||
|
the output sections. The output section structure can be
|
||||||
|
considered a filter for the input section, the output section
|
||||||
|
determines the vma of the output data and the name, but the
|
||||||
|
input section determines the offset into the output section of
|
||||||
|
the data to be written.
|
||||||
|
|
||||||
section name "A"
|
Eg to create a section "O", starting at 0x100, 0x123 long,
|
||||||
output_offset 0x00
|
containing two subsections, "A" at offset 0x0 (ie at vma
|
||||||
size 0x20
|
0x100) and "B" at offset 0x20 (ie at vma 0x120) the structures
|
||||||
output_section -----------> section name "O"
|
would look like:
|
||||||
| vma 0x100
|
|
||||||
section name "B" | size 0x123
|
| section name "A"
|
||||||
output_offset 0x20 |
|
| output_offset 0x00
|
||||||
size 0x103 |
|
| size 0x20
|
||||||
output_section --------|
|
| output_section -----------> section name "O"
|
||||||
|
| | vma 0x100
|
||||||
|
| section name "B" | size 0x123
|
||||||
|
| output_offset 0x20 |
|
||||||
|
| size 0x103 |
|
||||||
|
| output_section --------|
|
||||||
|
|
||||||
*-
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -100,213 +111,231 @@ subsections, "A" at offset 0x0 (ie at vma 0x100) and "B" at offset
|
|||||||
#include "sysdep.h"
|
#include "sysdep.h"
|
||||||
#include "libbfd.h"
|
#include "libbfd.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
INODE
|
||||||
|
typedef asection, section prototypes, Section Output, Sections
|
||||||
|
SUBSECTION
|
||||||
|
typedef asection
|
||||||
|
|
||||||
/*doc*
|
SUBSECTION
|
||||||
@node typedef asection, section prototypes, Section Output, Sections
|
typedef asection
|
||||||
@subsection typedef asection
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*proto*
|
|
||||||
The shape of a section struct:
|
The shape of a section struct:
|
||||||
|
|
||||||
*+++
|
CODE_FRAGMENT
|
||||||
|
.
|
||||||
$typedef struct sec {
|
.typedef struct sec
|
||||||
|
.{
|
||||||
The name of the section, the name isn't a copy, the pointer is
|
. {* The name of the section, the name isn't a copy, the pointer is
|
||||||
the same as that passed to bfd_make_section.
|
. the same as that passed to bfd_make_section. *}
|
||||||
|
.
|
||||||
$ CONST char *name;
|
. CONST char *name;
|
||||||
|
.
|
||||||
The next section in the list belonging to the BFD, or NULL.
|
. {* The next section in the list belonging to the BFD, or NULL. *}
|
||||||
|
.
|
||||||
$ struct sec *next;
|
. struct sec *next;
|
||||||
|
.
|
||||||
The field flags contains attributes of the section. Some of these
|
. {* The field flags contains attributes of the section. Some of
|
||||||
flags are read in from the object file, and some are synthesized from
|
. flags are read in from the object file, and some are
|
||||||
other information.
|
. synthesized from other information. *}
|
||||||
|
.
|
||||||
$flagword flags;
|
. flagword flags;
|
||||||
|
.
|
||||||
|
.#define SEC_NO_FLAGS 0x000
|
||||||
$#define SEC_NO_FLAGS 0x000
|
.
|
||||||
|
. {* Tells the OS to allocate space for this section when loaded.
|
||||||
Tells the OS to allocate space for this section when loaded.
|
. This would clear for a section containing debug information
|
||||||
This would clear for a section containing debug information only.
|
. only. *}
|
||||||
|
.
|
||||||
$#define SEC_ALLOC 0x001
|
.
|
||||||
|
.#define SEC_ALLOC 0x001
|
||||||
Tells the OS to load the section from the file when loading.
|
. {* Tells the OS to load the section from the file when loading.
|
||||||
This would be clear for a .bss section
|
. This would be clear for a .bss section *}
|
||||||
|
.
|
||||||
$#define SEC_LOAD 0x002
|
.#define SEC_LOAD 0x002
|
||||||
|
. {* The section contains data still to be relocated, so there will
|
||||||
The section contains data still to be relocated, so there will be some
|
. be some relocation information too. *}
|
||||||
relocation information too.
|
.
|
||||||
|
.#define SEC_RELOC 0x004
|
||||||
$#define SEC_RELOC 0x004
|
.
|
||||||
|
. {* Obsolete ? *}
|
||||||
Obsolete ?
|
.
|
||||||
|
.#define SEC_BALIGN 0x008
|
||||||
$#define SEC_BALIGN 0x008
|
.
|
||||||
|
. {* A signal to the OS that the section contains read only
|
||||||
A signal to the OS that the section contains read only data.
|
. data. *}
|
||||||
|
.#define SEC_READONLY 0x010
|
||||||
$#define SEC_READONLY 0x010
|
.
|
||||||
|
. {* The section contains code only. *}
|
||||||
The section contains code only.
|
.
|
||||||
|
.#define SEC_CODE 0x020
|
||||||
$#define SEC_CODE 0x020
|
.
|
||||||
|
. {* The section contains data only. *}
|
||||||
The section contains data only.
|
.
|
||||||
|
.#define SEC_DATA 0x040
|
||||||
$#define SEC_DATA 0x040
|
.
|
||||||
|
. {* The section will reside in ROM. *}
|
||||||
The section will reside in ROM.
|
.
|
||||||
|
.#define SEC_ROM 0x080
|
||||||
$#define SEC_ROM 0x080
|
.
|
||||||
|
. {* The section contains constructor information. This section
|
||||||
The section contains constructor information. This section type is
|
. type is used by the linker to create lists of constructors and
|
||||||
used by the linker to create lists of constructors and destructors
|
. destructors used by <<g++>>. When a back end sees a symbol
|
||||||
used by @code{g++}. When a back end sees a symbol which should be used
|
. which should be used in a constructor list, it creates a new
|
||||||
in a constructor list, it creates a new section for the type of name
|
. section for the type of name (eg <<__CTOR_LIST__>>), attaches
|
||||||
(eg @code{__CTOR_LIST__}), attaches the symbol to it and builds a
|
. the symbol to it and builds a relocation. To build the lists
|
||||||
relocation. To build the lists of constructors, all the linker has to
|
. of constructors, all the linker has to to is catenate all the
|
||||||
to is catenate all the sections called @code{__CTOR_LIST__} and
|
. sections called <<__CTOR_LIST__>> and relocte the data
|
||||||
relocte the data contained within - exactly the operations it would
|
. contained within - exactly the operations it would peform on
|
||||||
peform on standard data.
|
. standard data. *}
|
||||||
|
.
|
||||||
$#define SEC_CONSTRUCTOR 0x100
|
.#define SEC_CONSTRUCTOR 0x100
|
||||||
|
.
|
||||||
The section is a constuctor, and should be placed at the end of the ..
|
. {* The section is a constuctor, and should be placed at the
|
||||||
|
. end of the . *}
|
||||||
$#define SEC_CONSTRUCTOR_TEXT 0x1100
|
.
|
||||||
|
.
|
||||||
$#define SEC_CONSTRUCTOR_DATA 0x2100
|
.#define SEC_CONSTRUCTOR_TEXT 0x1100
|
||||||
|
.
|
||||||
$#define SEC_CONSTRUCTOR_BSS 0x3100
|
.#define SEC_CONSTRUCTOR_DATA 0x2100
|
||||||
|
.
|
||||||
|
.#define SEC_CONSTRUCTOR_BSS 0x3100
|
||||||
The section has contents - a bss section could be
|
.
|
||||||
@code{SEC_ALLOC} | @code{SEC_HAS_CONTENTS}, a debug section could be
|
.
|
||||||
@code{SEC_HAS_CONTENTS}
|
. {* The section has contents - a bss section could be
|
||||||
|
. <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>, a debug section could be
|
||||||
$#define SEC_HAS_CONTENTS 0x200
|
. <<SEC_HAS_CONTENTS>> *}
|
||||||
|
.
|
||||||
An instruction to the linker not to output sections containing
|
.#define SEC_HAS_CONTENTS 0x200
|
||||||
this flag even if they have information which would normally be written.
|
.
|
||||||
|
. {* An instruction to the linker not to output sections
|
||||||
$#define SEC_NEVER_LOAD 0x400
|
. containing this flag even if they have information which
|
||||||
|
. would normally be written. *}
|
||||||
|
.
|
||||||
The base address of the section in the address space of the target.
|
.#define SEC_NEVER_LOAD 0x400
|
||||||
|
.
|
||||||
$ bfd_vma vma;
|
. {* The base address of the section in the address space of the
|
||||||
|
. target. *}
|
||||||
The size of the section in bytes of the loaded section. This contains
|
.
|
||||||
a value even if the section has no contents (eg, the size of @code{.bss}).
|
. bfd_vma vma;
|
||||||
|
.
|
||||||
$ bfd_size_type size;
|
. {* The size of the section in bytes of the loaded section. This
|
||||||
|
. contains a value even if the section has no contents (eg, the
|
||||||
If this section is going to be output, then this value is the
|
. size of <<.bss>>). *}
|
||||||
offset into the output section of the first byte in the input
|
.
|
||||||
section. Eg, if this was going to start at the 100th byte in the
|
. bfd_size_type size;
|
||||||
output section, this value would be 100.
|
.
|
||||||
|
. {* If this section is going to be output, then this value is the
|
||||||
$ bfd_vma output_offset;
|
. offset into the output section of the first byte in the input
|
||||||
|
. section. Eg, if this was going to start at the 100th byte in
|
||||||
The output section through which to map on output.
|
. the output section, this value would be 100. *}
|
||||||
|
.
|
||||||
$ struct sec *output_section;
|
. bfd_vma output_offset;
|
||||||
|
.
|
||||||
The alignment requirement of the section, as an exponent - eg 3
|
. {* The output section through which to map on output. *}
|
||||||
aligns to 2^3 (or 8)
|
.
|
||||||
|
. struct sec *output_section;
|
||||||
$ unsigned int alignment_power;
|
.
|
||||||
|
. {* The alignment requirement of the section, as an exponent - eg
|
||||||
If an input section, a pointer to a vector of relocation records for
|
. 3 aligns to 2^3 (or 8) *}
|
||||||
the data in this section.
|
.
|
||||||
|
. unsigned int alignment_power;
|
||||||
$ struct reloc_cache_entry *relocation;
|
.
|
||||||
|
. {* If an input section, a pointer to a vector of relocation
|
||||||
If an output section, a pointer to a vector of pointers to
|
. records for the data in this section. *}
|
||||||
relocation records for the data in this section.
|
.
|
||||||
|
. struct reloc_cache_entry *relocation;
|
||||||
$ struct reloc_cache_entry **orelocation;
|
.
|
||||||
|
. {* If an output section, a pointer to a vector of pointers to
|
||||||
The number of relocation records in one of the above
|
. relocation records for the data in this section. *}
|
||||||
|
.
|
||||||
$ unsigned reloc_count;
|
. struct reloc_cache_entry **orelocation;
|
||||||
|
.
|
||||||
Which section is it 0..nth
|
. {* The number of relocation records in one of the above *}
|
||||||
|
.
|
||||||
$ int index;
|
. unsigned reloc_count;
|
||||||
|
.
|
||||||
Information below is back end specific - and not always used or
|
. {* Which section is it 0.nth *}
|
||||||
updated
|
.
|
||||||
|
. int index;
|
||||||
File position of section data
|
.
|
||||||
|
. {* Information below is back end specific - and not always used
|
||||||
$ file_ptr filepos;
|
. or updated
|
||||||
File position of relocation info
|
.
|
||||||
|
. File position of section data *}
|
||||||
$ file_ptr rel_filepos;
|
.
|
||||||
|
. file_ptr filepos;
|
||||||
File position of line data
|
.
|
||||||
|
. {* File position of relocation info *}
|
||||||
$ file_ptr line_filepos;
|
.
|
||||||
|
. file_ptr rel_filepos;
|
||||||
Pointer to data for applications
|
.
|
||||||
|
. {* File position of line data *}
|
||||||
$ PTR userdata;
|
.
|
||||||
|
. file_ptr line_filepos;
|
||||||
$ struct lang_output_section *otheruserdata;
|
.
|
||||||
|
. {* Pointer to data for applications *}
|
||||||
Attached line number information
|
.
|
||||||
|
. PTR userdata;
|
||||||
$ alent *lineno;
|
.
|
||||||
Number of line number records
|
. struct lang_output_section *otheruserdata;
|
||||||
|
.
|
||||||
$ unsigned int lineno_count;
|
. {* Attached line number information *}
|
||||||
|
.
|
||||||
When a section is being output, this value changes as more
|
. alent *lineno;
|
||||||
linenumbers are written out
|
.
|
||||||
|
. {* Number of line number records *}
|
||||||
$ file_ptr moving_line_filepos;
|
.
|
||||||
|
. unsigned int lineno_count;
|
||||||
what the section number is in the target world
|
.
|
||||||
|
. {* When a section is being output, this value changes as more
|
||||||
$ unsigned int target_index;
|
. linenumbers are written out *}
|
||||||
|
.
|
||||||
$ PTR used_by_bfd;
|
. file_ptr moving_line_filepos;
|
||||||
|
.
|
||||||
If this is a constructor section then here is a list of the
|
. {* what the section number is in the target world *}
|
||||||
relocations created to relocate items within it.
|
.
|
||||||
|
. unsigned int target_index;
|
||||||
$ struct relent_chain *constructor_chain;
|
.
|
||||||
|
. PTR used_by_bfd;
|
||||||
The BFD which owns the section.
|
.
|
||||||
|
. {* If this is a constructor section then here is a list of the
|
||||||
$ bfd *owner;
|
. relocations created to relocate items within it. *}
|
||||||
|
.
|
||||||
$} asection ;
|
. struct relent_chain *constructor_chain;
|
||||||
|
.
|
||||||
*---
|
. {* The BFD which owns the section. *}
|
||||||
|
.
|
||||||
|
. bfd *owner;
|
||||||
|
.
|
||||||
|
.} asection ;
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
INODE
|
||||||
|
section prototypes, , typedef asection, Sections
|
||||||
|
|
||||||
|
SUBSECTION
|
||||||
|
section prototypes
|
||||||
|
|
||||||
|
These are the functions exported by the section handling part of
|
||||||
|
<<libbfd>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
FUNCTION
|
||||||
|
bfd_get_section_by_name
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
asection *bfd_get_section_by_name(bfd *abfd, CONST char *name);
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Runs through the provided @var{abfd} and returns the
|
||||||
|
<<asection>> who's name matches that provided, otherwise NULL.
|
||||||
|
@xref{Sections}, for more information.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*doc*
|
|
||||||
@node section prototypes, , typedef asection, Sections
|
|
||||||
@subsection section prototypes
|
|
||||||
|
|
||||||
*/
|
|
||||||
/*proto* bfd_get_section_by_name
|
|
||||||
Runs through the provided @var{abfd} and returns the @code{asection}
|
|
||||||
who's name matches that provided, otherwise NULL. @xref{Sections}, for more information.
|
|
||||||
|
|
||||||
*; PROTO(asection *, bfd_get_section_by_name,
|
|
||||||
(bfd *abfd, CONST char *name));
|
|
||||||
*/
|
|
||||||
asection *
|
asection *
|
||||||
DEFUN(bfd_get_section_by_name,(abfd, name),
|
DEFUN(bfd_get_section_by_name,(abfd, name),
|
||||||
bfd *abfd AND
|
bfd *abfd AND
|
||||||
@ -320,21 +349,63 @@ DEFUN(bfd_get_section_by_name,(abfd, name),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*proto* bfd_make_section
|
/*
|
||||||
This function creates a new empty section called @var{name} and attaches it
|
FUNCTION
|
||||||
to the end of the chain of sections for the BFD supplied. An attempt to
|
bfd_make_section_old_way
|
||||||
create a section with a name which is already in use, returns NULL without
|
|
||||||
changing the section chain.
|
SYNOPSIS
|
||||||
|
asection *bfd_make_section_old_way(bfd *, CONST char *name);
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
This function creates a new empty section called @var{name}
|
||||||
|
and attaches it to the end of the chain of sections for the
|
||||||
|
BFD supplied. An attempt to create a section with a name which
|
||||||
|
is already in use, returns its pointer without changing the
|
||||||
|
section chain.
|
||||||
|
|
||||||
|
It has the funny name since this is the way it used to be
|
||||||
|
before is was rewritten...
|
||||||
|
|
||||||
Possible errors are:
|
Possible errors are:
|
||||||
@table @code
|
o invalid_operation
|
||||||
@item invalid_operation
|
|
||||||
If output has already started for this BFD.
|
If output has already started for this BFD.
|
||||||
@item no_memory
|
o no_memory
|
||||||
If obstack alloc fails.
|
If obstack alloc fails.
|
||||||
@end table
|
|
||||||
|
|
||||||
*; PROTO(asection *, bfd_make_section, (bfd *, CONST char *name));
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
asection *
|
||||||
|
DEFUN(bfd_make_section_old_way,(abfd, name),
|
||||||
|
bfd *abfd AND
|
||||||
|
CONST char * name)
|
||||||
|
{
|
||||||
|
asection *sec = bfd_get_section_by_name(abfd, name);
|
||||||
|
if (sec == (asection *)NULL)
|
||||||
|
{
|
||||||
|
sec = bfd_make_section(abfd, name);
|
||||||
|
}
|
||||||
|
return sec;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
FUNCTION
|
||||||
|
bfd_make_section
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
asection * bfd_make_section(bfd *, CONST char *name);
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
This function creates a new empty section called @var{name}
|
||||||
|
and attaches it to the end of the chain of sections for the
|
||||||
|
BFD supplied. An attempt to create a section with a name which
|
||||||
|
is already in use, returns NULL without changing the section
|
||||||
|
chain.
|
||||||
|
|
||||||
|
Possible errors are:
|
||||||
|
o invalid_operation - If output has already started for this BFD.
|
||||||
|
o no_memory - If obstack alloc fails.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -385,19 +456,23 @@ DEFUN(bfd_make_section,(abfd, name),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*proto* bfd_set_section_flags
|
/*
|
||||||
Attempts to set the attributes of the section named in the BFD
|
FUNCTION
|
||||||
supplied to the value. Returns true on success, false on error.
|
bfd_set_section_flags
|
||||||
Possible error returns are:
|
|
||||||
@table @code
|
SYNOPSIS
|
||||||
@item invalid operation
|
boolean bfd_set_section_flags(bfd *, asection *, flagword);
|
||||||
The section cannot have one or more of the attributes requested. For
|
|
||||||
example, a .bss section in @code{a.out} may not have the
|
DESCRIPTION
|
||||||
@code{SEC_HAS_CONTENTS} field set.
|
Attempts to set the attributes of the section named in the BFD
|
||||||
@end table
|
supplied to the value. Returns true on success, false on
|
||||||
|
error. Possible error returns are:
|
||||||
|
|
||||||
|
o invalid operation
|
||||||
|
The section cannot have one or more of the attributes
|
||||||
|
requested. For example, a .bss section in <<a.out>> may not
|
||||||
|
have the <<SEC_HAS_CONTENTS>> field set.
|
||||||
|
|
||||||
*; PROTO(boolean, bfd_set_section_flags,
|
|
||||||
(bfd *, asection *, flagword));
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
@ -416,27 +491,28 @@ DEFUN(bfd_set_section_flags,(abfd, section, flags),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*proto* bfd_map_over_sections
|
/*
|
||||||
Calls the provided function @var{func} for each section attached to
|
FUNCTION
|
||||||
the BFD @var{abfd}, passing @var{obj} as an argument. The function
|
bfd_map_over_sections
|
||||||
will be called as if by
|
|
||||||
|
|
||||||
@example
|
SYNOPSIS
|
||||||
func(abfd, the_section, obj);
|
void bfd_map_over_sections(bfd *abfd, void (*func)(), PTR obj);
|
||||||
@end example
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Calls the provided function @var{func} for each section
|
||||||
|
attached to the BFD @var{abfd}, passing @var{obj} as an
|
||||||
|
argument. The function will be called as if by
|
||||||
|
|
||||||
*; PROTO(void, bfd_map_over_sections,
|
| func(abfd, the_section, obj);
|
||||||
(bfd *abfd, void (*func)(), PTR obj));
|
|
||||||
|
|
||||||
This is the prefered method for iterating over sections, an
|
This is the prefered method for iterating over sections, an
|
||||||
alternative would be to use a loop:
|
alternative would be to use a loop:
|
||||||
|
|
||||||
@example
|
| section *p;
|
||||||
section *p;
|
| for (p = abfd->sections; p != NULL; p = p->next)
|
||||||
for (p = abfd->sections; p != NULL; p = p->next)
|
| func(abfd, p, ...)
|
||||||
func(abfd, p, ...)
|
|
||||||
@end example
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*VARARGS2*/
|
/*VARARGS2*/
|
||||||
@ -457,18 +533,21 @@ DEFUN(bfd_map_over_sections,(abfd, operation, user_storage),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*proto* bfd_set_section_size
|
/*
|
||||||
Sets @var{section} to the size @var{val}. If the operation is ok, then
|
FUNCTION
|
||||||
@code{true} is returned, else @code{false}.
|
bfd_set_section_size
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
boolean bfd_set_section_size(bfd *, asection *, bfd_size_type val);
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Sets @var{section} to the size @var{val}. If the operation is
|
||||||
|
ok, then <<true>> is returned, else <<false>>.
|
||||||
|
|
||||||
Possible error returns:
|
Possible error returns:
|
||||||
@table @code
|
o invalid_operation
|
||||||
@item invalid_operation
|
|
||||||
Writing has started to the BFD, so setting the size is invalid
|
Writing has started to the BFD, so setting the size is invalid
|
||||||
@end table
|
|
||||||
|
|
||||||
*; PROTO(boolean, bfd_set_section_size,
|
|
||||||
(bfd *, asection *, bfd_size_type val));
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
@ -490,27 +569,35 @@ DEFUN(bfd_set_section_size,(abfd, ptr, val),
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*proto* bfd_set_section_contents
|
/*
|
||||||
Sets the contents of the section @var{section} in BFD @var{abfd} to
|
FUNCTION
|
||||||
the data starting in memory at @var{data}. The data is written to the
|
bfd_set_section_contents
|
||||||
output section starting at offset @var{offset} for @var{count} bytes.
|
|
||||||
|
|
||||||
Normally @code{true} is returned, else @code{false}. Possible error
|
SYNOPSIS
|
||||||
returns are:
|
boolean bfd_set_section_contents
|
||||||
@table @code
|
|
||||||
@item no_contents
|
|
||||||
The output section does not have the @code{SEC_HAS_CONTENTS}
|
|
||||||
attribute, so nothing can be written to it.
|
|
||||||
@item and some more too
|
|
||||||
@end table
|
|
||||||
This routine is front end to the back end function @code{_bfd_set_section_contents}.
|
|
||||||
|
|
||||||
*; PROTO(boolean, bfd_set_section_contents,
|
|
||||||
(bfd *abfd,
|
(bfd *abfd,
|
||||||
asection *section,
|
asection *section,
|
||||||
PTR data,
|
PTR data,
|
||||||
file_ptr offset,
|
file_ptr offset,
|
||||||
bfd_size_type count));
|
bfd_size_type count);
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Sets the contents of the section @var{section} in BFD
|
||||||
|
@var{abfd} to the data starting in memory at @var{data}. The
|
||||||
|
data is written to the output section starting at offset
|
||||||
|
@var{offset} for @var{count} bytes.
|
||||||
|
|
||||||
|
Normally <<true>> is returned, else <<false>>. Possible error
|
||||||
|
returns are:
|
||||||
|
o no_contents
|
||||||
|
The output section does not have the <<SEC_HAS_CONTENTS>>
|
||||||
|
attribute, so nothing can be written to it.
|
||||||
|
o and some more too
|
||||||
|
|
||||||
|
This routine is front end to the back end function
|
||||||
|
<<_bfd_set_section_contents>>.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -538,25 +625,26 @@ DEFUN(bfd_set_section_contents,(abfd, section, location, offset, count),
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*proto* bfd_get_section_contents
|
/*
|
||||||
This function reads data from @var{section} in BFD @var{abfd} into
|
FUNCTION
|
||||||
memory starting at @var{location}. The data is read at an offset of
|
bfd_get_section_contents
|
||||||
@var{offset} from the start of the input section, and is read for
|
|
||||||
@var{count} bytes.
|
|
||||||
|
|
||||||
If the contents of a constuctor with the @code{SEC_CONSTUCTOR} flag
|
SYNOPSIS
|
||||||
set are requested, then the @var{location} is filled with zeroes.
|
boolean bfd_get_section_contents
|
||||||
|
|
||||||
If no errors occur, @code{true} is returned, else @code{false}.
|
|
||||||
Possible errors are:
|
|
||||||
|
|
||||||
@table @code
|
|
||||||
@item unknown yet
|
|
||||||
@end table
|
|
||||||
|
|
||||||
*; PROTO(boolean, bfd_get_section_contents,
|
|
||||||
(bfd *abfd, asection *section, PTR location,
|
(bfd *abfd, asection *section, PTR location,
|
||||||
file_ptr offset, bfd_size_type count));
|
file_ptr offset, bfd_size_type count);
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
This function reads data from @var{section} in BFD @var{abfd}
|
||||||
|
into memory starting at @var{location}. The data is read at an
|
||||||
|
offset of @var{offset} from the start of the input section,
|
||||||
|
and is read for @var{count} bytes.
|
||||||
|
|
||||||
|
If the contents of a constuctor with the <<SEC_CONSTUCTOR>>
|
||||||
|
flag set are requested, then the @var{location} is filled with
|
||||||
|
zeroes. If no errors occur, <<true>> is returned, else
|
||||||
|
<<false>>.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user