gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / bfd / section.c
index db7e239cad629d02aae16c45041c979783f65a38..17f5b4c3d83f10f548c6366d05df3722f3c8a369 100644 (file)
@@ -1,8 +1,5 @@
 /* Object file "section" support for the BFD library.
 /* Object file "section" support for the BFD library.
-   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-   2012
-   Free Software Foundation, Inc.
+   Copyright (C) 1990-2020 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -68,10 +65,7 @@ SUBSECTION
        data in place until a <<bfd_get_section_contents>> call is
        made. Other back ends may read in all the data at once.  For
        example, an S-record file has to be read once to determine the
        data in place until a <<bfd_get_section_contents>> call is
        made. Other back ends may read in all the data at once.  For
        example, an S-record file has to be read once to determine the
-       size of the data. An IEEE-695 file doesn't contain raw data in
-       sections, but data and relocation expressions intermixed, so
-       the data area has to be parsed to get out the data and
-       relocations.
+       size of the data.
 
 INODE
 Section Output, typedef asection, Section Input, Sections
 
 INODE
 Section Output, typedef asection, Section Input, Sections
@@ -158,10 +152,14 @@ CODE_FRAGMENT
 .  const char *name;
 .
 .  {* A unique sequence number.  *}
 .  const char *name;
 .
 .  {* A unique sequence number.  *}
-.  int id;
+.  unsigned int id;
+.
+.  {* A unique section number which can be used by assembler to
+.     distinguish different sections with the same section name.  *}
+.  unsigned int section_id;
 .
 .  {* Which section in the bfd; 0..n-1 as sections are created in a bfd.  *}
 .
 .  {* Which section in the bfd; 0..n-1 as sections are created in a bfd.  *}
-.  int index;
+.  unsigned int index;
 .
 .  {* The next section in the list belonging to the BFD, or NULL.  *}
 .  struct bfd_section *next;
 .
 .  {* The next section in the list belonging to the BFD, or NULL.  *}
 .  struct bfd_section *next;
@@ -174,31 +172,31 @@ CODE_FRAGMENT
 .     synthesized from other information.  *}
 .  flagword flags;
 .
 .     synthesized from other information.  *}
 .  flagword flags;
 .
-.#define SEC_NO_FLAGS   0x000
+.#define SEC_NO_FLAGS                      0x0
 .
 .  {* Tells the OS to allocate space for this section when loading.
 .     This is clear for a section containing debug information only.  *}
 .
 .  {* Tells the OS to allocate space for this section when loading.
 .     This is clear for a section containing debug information only.  *}
-.#define SEC_ALLOC      0x001
+.#define SEC_ALLOC                         0x1
 .
 .  {* Tells the OS to load the section from the file when loading.
 .     This is clear for a .bss section.  *}
 .
 .  {* Tells the OS to load the section from the file when loading.
 .     This is clear for a .bss section.  *}
-.#define SEC_LOAD       0x002
+.#define SEC_LOAD                          0x2
 .
 .  {* The section contains data still to be relocated, so there is
 .     some relocation information too.  *}
 .
 .  {* The section contains data still to be relocated, so there is
 .     some relocation information too.  *}
-.#define SEC_RELOC      0x004
+.#define SEC_RELOC                         0x4
 .
 .  {* A signal to the OS that the section contains read only data.  *}
 .
 .  {* A signal to the OS that the section contains read only data.  *}
-.#define SEC_READONLY   0x008
+.#define SEC_READONLY                      0x8
 .
 .  {* The section contains code only.  *}
 .
 .  {* The section contains code only.  *}
-.#define SEC_CODE       0x010
+.#define SEC_CODE                         0x10
 .
 .  {* The section contains data only.  *}
 .
 .  {* The section contains data only.  *}
-.#define SEC_DATA       0x020
+.#define SEC_DATA                         0x20
 .
 .  {* The section will reside in ROM.  *}
 .
 .  {* The section will reside in ROM.  *}
-.#define SEC_ROM        0x040
+.#define SEC_ROM                          0x40
 .
 .  {* The section contains constructor information. This section
 .     type is used by the linker to create lists of constructors and
 .
 .  {* The section contains constructor information. This section
 .     type is used by the linker to create lists of constructors and
@@ -210,75 +208,72 @@ CODE_FRAGMENT
 .     sections called <<__CTOR_LIST__>> and relocate the data
 .     contained within - exactly the operations it would peform on
 .     standard data.  *}
 .     sections called <<__CTOR_LIST__>> and relocate the data
 .     contained within - exactly the operations it would peform on
 .     standard data.  *}
-.#define SEC_CONSTRUCTOR 0x080
+.#define SEC_CONSTRUCTOR                  0x80
 .
 .  {* The section has contents - a data section could be
 .     <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>; a debug section could be
 .     <<SEC_HAS_CONTENTS>>  *}
 .
 .  {* The section has contents - a data section could be
 .     <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>; a debug section could be
 .     <<SEC_HAS_CONTENTS>>  *}
-.#define SEC_HAS_CONTENTS 0x100
+.#define SEC_HAS_CONTENTS                0x100
 .
 .  {* An instruction to the linker to not output the section
 .     even if it has information which would normally be written.  *}
 .
 .  {* An instruction to the linker to not output the section
 .     even if it has information which would normally be written.  *}
-.#define SEC_NEVER_LOAD 0x200
+.#define SEC_NEVER_LOAD                  0x200
 .
 .  {* The section contains thread local data.  *}
 .
 .  {* The section contains thread local data.  *}
-.#define SEC_THREAD_LOCAL 0x400
+.#define SEC_THREAD_LOCAL                0x400
 .
 .
-.  {* The section has GOT references.  This flag is only for the
-.     linker, and is currently only used by the elf32-hppa back end.
-.     It will be set if global offset table references were detected
-.     in this section, which indicate to the linker that the section
-.     contains PIC code, and must be handled specially when doing a
-.     static link.  *}
-.#define SEC_HAS_GOT_REF 0x800
+.  {* The section's size is fixed.  Generic linker code will not
+.     recalculate it and it is up to whoever has set this flag to
+.     get the size right.  *}
+.#define SEC_FIXED_SIZE                  0x800
 .
 .  {* The section contains common symbols (symbols may be defined
 .     multiple times, the value of a symbol is the amount of
 .     space it requires, and the largest symbol value is the one
 .     used).  Most targets have exactly one of these (which we
 .     translate to bfd_com_section_ptr), but ECOFF has two.  *}
 .
 .  {* The section contains common symbols (symbols may be defined
 .     multiple times, the value of a symbol is the amount of
 .     space it requires, and the largest symbol value is the one
 .     used).  Most targets have exactly one of these (which we
 .     translate to bfd_com_section_ptr), but ECOFF has two.  *}
-.#define SEC_IS_COMMON 0x1000
+.#define SEC_IS_COMMON                  0x1000
 .
 .  {* The section contains only debugging information.  For
 .     example, this is set for ELF .debug and .stab sections.
 .     strip tests this flag to see if a section can be
 .     discarded.  *}
 .
 .  {* The section contains only debugging information.  For
 .     example, this is set for ELF .debug and .stab sections.
 .     strip tests this flag to see if a section can be
 .     discarded.  *}
-.#define SEC_DEBUGGING 0x2000
+.#define SEC_DEBUGGING                  0x2000
 .
 .  {* The contents of this section are held in memory pointed to
 .     by the contents field.  This is checked by bfd_get_section_contents,
 .     and the data is retrieved from memory if appropriate.  *}
 .
 .  {* The contents of this section are held in memory pointed to
 .     by the contents field.  This is checked by bfd_get_section_contents,
 .     and the data is retrieved from memory if appropriate.  *}
-.#define SEC_IN_MEMORY 0x4000
+.#define SEC_IN_MEMORY                  0x4000
 .
 .  {* The contents of this section are to be excluded by the
 .     linker for executable and shared objects unless those
 .     objects are to be further relocated.  *}
 .
 .  {* The contents of this section are to be excluded by the
 .     linker for executable and shared objects unless those
 .     objects are to be further relocated.  *}
-.#define SEC_EXCLUDE 0x8000
+.#define SEC_EXCLUDE                    0x8000
 .
 .  {* The contents of this section are to be sorted based on the sum of
 .     the symbol and addend values specified by the associated relocation
 .     entries.  Entries without associated relocation entries will be
 .     appended to the end of the section in an unspecified order.  *}
 .
 .  {* The contents of this section are to be sorted based on the sum of
 .     the symbol and addend values specified by the associated relocation
 .     entries.  Entries without associated relocation entries will be
 .     appended to the end of the section in an unspecified order.  *}
-.#define SEC_SORT_ENTRIES 0x10000
+.#define SEC_SORT_ENTRIES              0x10000
 .
 .  {* When linking, duplicate sections of the same name should be
 .     discarded, rather than being combined into a single section as
 .     is usually done.  This is similar to how common symbols are
 .     handled.  See SEC_LINK_DUPLICATES below.  *}
 .
 .  {* When linking, duplicate sections of the same name should be
 .     discarded, rather than being combined into a single section as
 .     is usually done.  This is similar to how common symbols are
 .     handled.  See SEC_LINK_DUPLICATES below.  *}
-.#define SEC_LINK_ONCE 0x20000
+.#define SEC_LINK_ONCE                 0x20000
 .
 .  {* If SEC_LINK_ONCE is set, this bitfield describes how the linker
 .     should handle duplicate sections.  *}
 .
 .  {* If SEC_LINK_ONCE is set, this bitfield describes how the linker
 .     should handle duplicate sections.  *}
-.#define SEC_LINK_DUPLICATES 0xc0000
+.#define SEC_LINK_DUPLICATES           0xc0000
 .
 .  {* This value for SEC_LINK_DUPLICATES means that duplicate
 .     sections with the same name should simply be discarded.  *}
 .
 .  {* This value for SEC_LINK_DUPLICATES means that duplicate
 .     sections with the same name should simply be discarded.  *}
-.#define SEC_LINK_DUPLICATES_DISCARD 0x0
+.#define SEC_LINK_DUPLICATES_DISCARD       0x0
 .
 .  {* This value for SEC_LINK_DUPLICATES means that the linker
 .     should warn if there are any duplicate sections, although
 .     it should still only link one copy.  *}
 .
 .  {* This value for SEC_LINK_DUPLICATES means that the linker
 .     should warn if there are any duplicate sections, although
 .     it should still only link one copy.  *}
-.#define SEC_LINK_DUPLICATES_ONE_ONLY 0x40000
+.#define SEC_LINK_DUPLICATES_ONE_ONLY  0x40000
 .
 .  {* This value for SEC_LINK_DUPLICATES means that the linker
 .     should warn if any duplicate sections are a different size.  *}
 .
 .  {* This value for SEC_LINK_DUPLICATES means that the linker
 .     should warn if any duplicate sections are a different size.  *}
@@ -294,28 +289,32 @@ CODE_FRAGMENT
 .     relocation or other arcane processing.  It is skipped when
 .     going through the first-pass output, trusting that someone
 .     else up the line will take care of it later.  *}
 .     relocation or other arcane processing.  It is skipped when
 .     going through the first-pass output, trusting that someone
 .     else up the line will take care of it later.  *}
-.#define SEC_LINKER_CREATED 0x100000
+.#define SEC_LINKER_CREATED           0x100000
+.
+.  {* This section contains a section ID to distinguish different
+.     sections with the same section name.  *}
+.#define SEC_ASSEMBLER_SECTION_ID     0x100000
 .
 .  {* This section should not be subject to garbage collection.
 .     Also set to inform the linker that this section should not be
 .     listed in the link map as discarded.  *}
 .
 .  {* This section should not be subject to garbage collection.
 .     Also set to inform the linker that this section should not be
 .     listed in the link map as discarded.  *}
-.#define SEC_KEEP 0x200000
+.#define SEC_KEEP                     0x200000
 .
 .  {* This section contains "short" data, and should be placed
 .     "near" the GP.  *}
 .
 .  {* This section contains "short" data, and should be placed
 .     "near" the GP.  *}
-.#define SEC_SMALL_DATA 0x400000
+.#define SEC_SMALL_DATA               0x400000
 .
 .  {* Attempt to merge identical entities in the section.
 .     Entity size is given in the entsize field.  *}
 .
 .  {* Attempt to merge identical entities in the section.
 .     Entity size is given in the entsize field.  *}
-.#define SEC_MERGE 0x800000
+.#define SEC_MERGE                    0x800000
 .
 .  {* If given with SEC_MERGE, entities to merge are zero terminated
 .     strings where entsize specifies character size instead of fixed
 .     size entries.  *}
 .
 .  {* If given with SEC_MERGE, entities to merge are zero terminated
 .     strings where entsize specifies character size instead of fixed
 .     size entries.  *}
-.#define SEC_STRINGS 0x1000000
+.#define SEC_STRINGS                 0x1000000
 .
 .  {* This section contains data about section groups.  *}
 .
 .  {* This section contains data about section groups.  *}
-.#define SEC_GROUP 0x2000000
+.#define SEC_GROUP                   0x2000000
 .
 .  {* The section is a COFF shared library section.  This flag is
 .     only for the linker.  If this type of section appears in
 .
 .  {* The section is a COFF shared library section.  This flag is
 .     only for the linker.  If this type of section appears in
@@ -326,32 +325,51 @@ CODE_FRAGMENT
 .     might be cleaner to have some more general mechanism to
 .     allow the back end to control what the linker does with
 .     sections.  *}
 .     might be cleaner to have some more general mechanism to
 .     allow the back end to control what the linker does with
 .     sections.  *}
-.#define SEC_COFF_SHARED_LIBRARY 0x4000000
+.#define SEC_COFF_SHARED_LIBRARY     0x4000000
 .
 .  {* This input section should be copied to output in reverse order
 .     as an array of pointers.  This is for ELF linker internal use
 .     only.  *}
 .
 .  {* This input section should be copied to output in reverse order
 .     as an array of pointers.  This is for ELF linker internal use
 .     only.  *}
-.#define SEC_ELF_REVERSE_COPY 0x4000000
+.#define SEC_ELF_REVERSE_COPY        0x4000000
 .
 .  {* This section contains data which may be shared with other
 .     executables or shared objects. This is for COFF only.  *}
 .
 .  {* This section contains data which may be shared with other
 .     executables or shared objects. This is for COFF only.  *}
-.#define SEC_COFF_SHARED 0x8000000
+.#define SEC_COFF_SHARED             0x8000000
+.
+.  {* This section should be compressed.  This is for ELF linker
+.     internal use only.  *}
+.#define SEC_ELF_COMPRESS            0x8000000
 .
 .  {* When a section with this flag is being linked, then if the size of
 .     the input section is less than a page, it should not cross a page
 .     boundary.  If the size of the input section is one page or more,
 .     it should be aligned on a page boundary.  This is for TI
 .     TMS320C54X only.  *}
 .
 .  {* When a section with this flag is being linked, then if the size of
 .     the input section is less than a page, it should not cross a page
 .     boundary.  If the size of the input section is one page or more,
 .     it should be aligned on a page boundary.  This is for TI
 .     TMS320C54X only.  *}
-.#define SEC_TIC54X_BLOCK 0x10000000
+.#define SEC_TIC54X_BLOCK           0x10000000
+.
+.  {* This section should be renamed.  This is for ELF linker
+.     internal use only.  *}
+.#define SEC_ELF_RENAME             0x10000000
 .
 .  {* Conditionally link this section; do not link if there are no
 .     references found to any symbol in the section.  This is for TI
 .     TMS320C54X only.  *}
 .
 .  {* Conditionally link this section; do not link if there are no
 .     references found to any symbol in the section.  This is for TI
 .     TMS320C54X only.  *}
-.#define SEC_TIC54X_CLINK 0x20000000
+.#define SEC_TIC54X_CLINK           0x20000000
+.
+.  {* This section contains vliw code.  This is for Toshiba MeP only.  *}
+.#define SEC_MEP_VLIW               0x20000000
+.
+.  {* All symbols, sizes and relocations in this section are octets
+.     instead of bytes.  Required for DWARF debug sections as DWARF
+.     information is organized in octets, not bytes.  *}
+.#define SEC_ELF_OCTETS             0x40000000
 .
 .  {* Indicate that section has the no read flag set. This happens
 .     when memory read flag isn't set. *}
 .
 .  {* Indicate that section has the no read flag set. This happens
 .     when memory read flag isn't set. *}
-.#define SEC_COFF_NOREAD 0x40000000
+.#define SEC_COFF_NOREAD            0x40000000
+.
+.  {* Indicate that section has the purecode flag set.  *}
+.#define SEC_ELF_PURECODE           0x80000000
 .
 .  {*  End of section flags.  *}
 .
 .
 .  {*  End of section flags.  *}
 .
@@ -388,6 +406,8 @@ CODE_FRAGMENT
 .#define SEC_INFO_TYPE_MERGE     2
 .#define SEC_INFO_TYPE_EH_FRAME  3
 .#define SEC_INFO_TYPE_JUST_SYMS 4
 .#define SEC_INFO_TYPE_MERGE     2
 .#define SEC_INFO_TYPE_EH_FRAME  3
 .#define SEC_INFO_TYPE_JUST_SYMS 4
+.#define SEC_INFO_TYPE_TARGET    5
+.#define SEC_INFO_TYPE_EH_FRAME_ENTRY 6
 .
 .  {* Nonzero if this section uses RELA relocations, rather than REL.  *}
 .  unsigned int use_rela_p:1;
 .
 .  {* Nonzero if this section uses RELA relocations, rather than REL.  *}
 .  unsigned int use_rela_p:1;
@@ -417,7 +437,7 @@ CODE_FRAGMENT
 .      information.  *}
 .  bfd_vma lma;
 .
 .      information.  *}
 .  bfd_vma lma;
 .
-.  {* The size of the section in octets, as it will be output.
+.  {* The size of the section in *octets*, as it will be output.
 .     Contains a value even if the section has no contents (e.g., the
 .     size of <<.bss>>).  *}
 .  bfd_size_type size;
 .     Contains a value even if the section has no contents (e.g., the
 .     size of <<.bss>>).  *}
 .  bfd_size_type size;
@@ -517,9 +537,6 @@ CODE_FRAGMENT
 .  {* The BFD which owns the section.  *}
 .  bfd *owner;
 .
 .  {* The BFD which owns the section.  *}
 .  bfd *owner;
 .
-.  {* INPUT_SECTION_FLAGS if specified in the linker script.  *}
-.  struct flag_info *section_flag_info;
-.
 .  {* A symbol which points at this section only.  *}
 .  struct bfd_symbol *symbol;
 .  struct bfd_symbol **symbol_ptr_ptr;
 .  {* A symbol which points at this section only.  *}
 .  struct bfd_symbol *symbol;
 .  struct bfd_symbol **symbol_ptr_ptr;
@@ -527,28 +544,114 @@ CODE_FRAGMENT
 .  {* Early in the link process, map_head and map_tail are used to build
 .     a list of input sections attached to an output section.  Later,
 .     output sections use these fields for a list of bfd_link_order
 .  {* Early in the link process, map_head and map_tail are used to build
 .     a list of input sections attached to an output section.  Later,
 .     output sections use these fields for a list of bfd_link_order
-.     structs.  *}
+.     structs.  The linked_to_symbol_name field is for ELF assembler
+.     internal use.  *}
 .  union {
 .    struct bfd_link_order *link_order;
 .    struct bfd_section *s;
 .  union {
 .    struct bfd_link_order *link_order;
 .    struct bfd_section *s;
+.    const char *linked_to_symbol_name;
 .  } map_head, map_tail;
 .  } map_head, map_tail;
+. {* Points to the output section this section is already assigned to, if any.
+.    This is used when support for non-contiguous memory regions is enabled.  *}
+. struct bfd_section *already_assigned;
+.
 .} asection;
 .
 .{* Relax table contains information about instructions which can
 .} asection;
 .
 .{* Relax table contains information about instructions which can
-.   be removed by relaxation -- replacing a long address with a 
+.   be removed by relaxation -- replacing a long address with a
 .   short address.  *}
 .struct relax_table {
 .  {* Address where bytes may be deleted. *}
 .  bfd_vma addr;
 .   short address.  *}
 .struct relax_table {
 .  {* Address where bytes may be deleted. *}
 .  bfd_vma addr;
-.  
+.
 .  {* Number of bytes to be deleted.  *}
 .  int size;
 .};
 .
 .  {* Number of bytes to be deleted.  *}
 .  int size;
 .};
 .
+.static inline const char *
+.bfd_section_name (const asection *sec)
+.{
+.  return sec->name;
+.}
+.
+.static inline bfd_size_type
+.bfd_section_size (const asection *sec)
+.{
+.  return sec->size;
+.}
+.
+.static inline bfd_vma
+.bfd_section_vma (const asection *sec)
+.{
+.  return sec->vma;
+.}
+.
+.static inline bfd_vma
+.bfd_section_lma (const asection *sec)
+.{
+.  return sec->lma;
+.}
+.
+.static inline unsigned int
+.bfd_section_alignment (const asection *sec)
+.{
+.  return sec->alignment_power;
+.}
+.
+.static inline flagword
+.bfd_section_flags (const asection *sec)
+.{
+.  return sec->flags;
+.}
+.
+.static inline void *
+.bfd_section_userdata (const asection *sec)
+.{
+.  return sec->userdata;
+.}
+.static inline bfd_boolean
+.bfd_is_com_section (const asection *sec)
+.{
+.  return (sec->flags & SEC_IS_COMMON) != 0;
+.}
+.
+.{* Note: the following are provided as inline functions rather than macros
+.   because not all callers use the return value.  A macro implementation
+.   would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
+.   compilers will complain about comma expressions that have no effect.  *}
+.static inline bfd_boolean
+.bfd_set_section_userdata (asection *sec, void *val)
+.{
+.  sec->userdata = val;
+.  return TRUE;
+.}
+.
+.static inline bfd_boolean
+.bfd_set_section_vma (asection *sec, bfd_vma val)
+.{
+.  sec->vma = sec->lma = val;
+.  sec->user_set_vma = TRUE;
+.  return TRUE;
+.}
+.
+.static inline bfd_boolean
+.bfd_set_section_lma (asection *sec, bfd_vma val)
+.{
+.  sec->lma = val;
+.  return TRUE;
+.}
+.
+.static inline bfd_boolean
+.bfd_set_section_alignment (asection *sec, unsigned int val)
+.{
+.  sec->alignment_power = val;
+.  return TRUE;
+.}
+.
 .{* These sections are global, and are managed by BFD.  The application
 .   and target back end are not permitted to change the values in
 .   these sections.  *}
 .{* These sections are global, and are managed by BFD.  The application
 .   and target back end are not permitted to change the values in
 .   these sections.  *}
-.extern asection std_section[4];
+.extern asection _bfd_std_section[4];
 .
 .#define BFD_ABS_SECTION_NAME "*ABS*"
 .#define BFD_UND_SECTION_NAME "*UND*"
 .
 .#define BFD_ABS_SECTION_NAME "*ABS*"
 .#define BFD_UND_SECTION_NAME "*UND*"
@@ -556,169 +659,103 @@ CODE_FRAGMENT
 .#define BFD_IND_SECTION_NAME "*IND*"
 .
 .{* Pointer to the common section.  *}
 .#define BFD_IND_SECTION_NAME "*IND*"
 .
 .{* Pointer to the common section.  *}
-.#define bfd_com_section_ptr (&std_section[0])
+.#define bfd_com_section_ptr (&_bfd_std_section[0])
 .{* Pointer to the undefined section.  *}
 .{* Pointer to the undefined section.  *}
-.#define bfd_und_section_ptr (&std_section[1])
+.#define bfd_und_section_ptr (&_bfd_std_section[1])
 .{* Pointer to the absolute section.  *}
 .{* Pointer to the absolute section.  *}
-.#define bfd_abs_section_ptr (&std_section[2])
+.#define bfd_abs_section_ptr (&_bfd_std_section[2])
 .{* Pointer to the indirect section.  *}
 .{* Pointer to the indirect section.  *}
-.#define bfd_ind_section_ptr (&std_section[3])
-.
-.#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
-.#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
-.#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
-.
-.#define bfd_is_const_section(SEC)             \
-. (   ((SEC) == bfd_abs_section_ptr)           \
-.  || ((SEC) == bfd_und_section_ptr)           \
-.  || ((SEC) == bfd_com_section_ptr)           \
-.  || ((SEC) == bfd_ind_section_ptr))
-.
-.{* Macros to handle insertion and deletion of a bfd's sections.  These
-.   only handle the list pointers, ie. do not adjust section_count,
-.   target_index etc.  *}
-.#define bfd_section_list_remove(ABFD, S) \
-.  do                                                  \
-.    {                                                 \
-.      asection *_s = S;                               \
-.      asection *_next = _s->next;                     \
-.      asection *_prev = _s->prev;                     \
-.      if (_prev)                                      \
-.        _prev->next = _next;                          \
-.      else                                            \
-.        (ABFD)->sections = _next;                     \
-.      if (_next)                                      \
-.        _next->prev = _prev;                          \
-.      else                                            \
-.        (ABFD)->section_last = _prev;                 \
-.    }                                                 \
-.  while (0)
-.#define bfd_section_list_append(ABFD, S) \
-.  do                                                  \
-.    {                                                 \
-.      asection *_s = S;                               \
-.      bfd *_abfd = ABFD;                              \
-.      _s->next = NULL;                                        \
-.      if (_abfd->section_last)                                \
-.        {                                             \
-.          _s->prev = _abfd->section_last;             \
-.          _abfd->section_last->next = _s;             \
-.        }                                             \
-.      else                                            \
-.        {                                             \
-.          _s->prev = NULL;                            \
-.          _abfd->sections = _s;                       \
-.        }                                             \
-.      _abfd->section_last = _s;                       \
-.    }                                                 \
-.  while (0)
-.#define bfd_section_list_prepend(ABFD, S) \
-.  do                                                  \
-.    {                                                 \
-.      asection *_s = S;                               \
-.      bfd *_abfd = ABFD;                              \
-.      _s->prev = NULL;                                        \
-.      if (_abfd->sections)                            \
-.        {                                             \
-.          _s->next = _abfd->sections;                 \
-.          _abfd->sections->prev = _s;                 \
-.        }                                             \
-.      else                                            \
-.        {                                             \
-.          _s->next = NULL;                            \
-.          _abfd->section_last = _s;                   \
-.        }                                             \
-.      _abfd->sections = _s;                           \
-.    }                                                 \
-.  while (0)
-.#define bfd_section_list_insert_after(ABFD, A, S) \
-.  do                                                  \
-.    {                                                 \
-.      asection *_a = A;                               \
-.      asection *_s = S;                               \
-.      asection *_next = _a->next;                     \
-.      _s->next = _next;                               \
-.      _s->prev = _a;                                  \
-.      _a->next = _s;                                  \
-.      if (_next)                                      \
-.        _next->prev = _s;                             \
-.      else                                            \
-.        (ABFD)->section_last = _s;                    \
-.    }                                                 \
-.  while (0)
-.#define bfd_section_list_insert_before(ABFD, B, S) \
-.  do                                                  \
-.    {                                                 \
-.      asection *_b = B;                               \
-.      asection *_s = S;                               \
-.      asection *_prev = _b->prev;                     \
-.      _s->prev = _prev;                               \
-.      _s->next = _b;                                  \
-.      _b->prev = _s;                                  \
-.      if (_prev)                                      \
-.        _prev->next = _s;                             \
-.      else                                            \
-.        (ABFD)->sections = _s;                                \
-.    }                                                 \
-.  while (0)
-.#define bfd_section_removed_from_list(ABFD, S) \
-.  ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
-.
-.#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX)                  \
-.  {* name, id,  index, next, prev, flags, user_set_vma,            *} \
-.  { NAME,  IDX, 0,     NULL, NULL, FLAGS, 0,                          \
+.#define bfd_ind_section_ptr (&_bfd_std_section[3])
+.
+.static inline bfd_boolean
+.bfd_is_und_section (const asection *sec)
+.{
+.  return sec == bfd_und_section_ptr;
+.}
+.
+.static inline bfd_boolean
+.bfd_is_abs_section (const asection *sec)
+.{
+.  return sec == bfd_abs_section_ptr;
+.}
+.
+.static inline bfd_boolean
+.bfd_is_ind_section (const asection *sec)
+.{
+.  return sec == bfd_ind_section_ptr;
+.}
+.
+.static inline bfd_boolean
+.bfd_is_const_section (const asection *sec)
+.{
+.  return (sec >= _bfd_std_section
+.          && sec < _bfd_std_section + (sizeof (_bfd_std_section)
+.                                       / sizeof (_bfd_std_section[0])));
+.}
+.
+.{* Return TRUE if input section SEC has been discarded.  *}
+.static inline bfd_boolean
+.discarded_section (const asection *sec)
+.{
+.  return (!bfd_is_abs_section (sec)
+.          && bfd_is_abs_section (sec->output_section)
+.          && sec->sec_info_type != SEC_INFO_TYPE_MERGE
+.          && sec->sec_info_type != SEC_INFO_TYPE_JUST_SYMS);
+.}
+.
+.#define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS)                  \
+.  {* name, id,  section_id, index, next, prev, flags, user_set_vma, *}        \
+.  {  NAME, IDX, 0,          0,     NULL, NULL, FLAGS, 0,              \
 .                                                                      \
 .                                                                      \
-.  {* linker_mark, linker_has_input, gc_mark, decompress_status,    *} \
+.  {* linker_mark, linker_has_input, gc_mark, decompress_status,     *}        \
 .     0,           0,                1,       0,                       \
 .                                                                      \
 .     0,           0,                1,       0,                       \
 .                                                                      \
-.  {* segment_mark, sec_info_type, use_rela_p,                      *} \
+.  {* segment_mark, sec_info_type, use_rela_p,                       *}        \
 .     0,            0,             0,                                  \
 .                                                                      \
 .     0,            0,             0,                                  \
 .                                                                      \
-.  {* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,   *} \
+.  {* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,    *}        \
 .     0,        0,        0,        0,        0,        0,             \
 .                                                                      \
 .     0,        0,        0,        0,        0,        0,             \
 .                                                                      \
-.  {* vma, lma, size, rawsize, compressed_size, relax, relax_count, *} \
+.  {* vma, lma, size, rawsize, compressed_size, relax, relax_count,  *}        \
 .     0,   0,   0,    0,       0,               0,     0,              \
 .                                                                      \
 .     0,   0,   0,    0,       0,               0,     0,              \
 .                                                                      \
-.  {* output_offset, output_section, alignment_power,               *} \
+.  {* output_offset, output_section, alignment_power,                *}        \
 .     0,             &SEC,           0,                                        \
 .                                                                      \
 .     0,             &SEC,           0,                                        \
 .                                                                      \
-.  {* relocation, orelocation, reloc_count, filepos, rel_filepos,   *} \
+.  {* relocation, orelocation, reloc_count, filepos, rel_filepos,    *}        \
 .     NULL,       NULL,        0,           0,       0,                        \
 .                                                                      \
 .     NULL,       NULL,        0,           0,       0,                        \
 .                                                                      \
-.  {* line_filepos, userdata, contents, lineno, lineno_count,       *} \
+.  {* line_filepos, userdata, contents, lineno, lineno_count,        *}        \
 .     0,            NULL,     NULL,     NULL,   0,                     \
 .                                                                      \
 .     0,            NULL,     NULL,     NULL,   0,                     \
 .                                                                      \
-.  {* entsize, kept_section, moving_line_filepos,                   *} \
-.     0,       NULL,         0,                                        \
+.  {* entsize, kept_section, moving_line_filepos,                    *}        \
+.     0,       NULL,         0,                                                \
 .                                                                      \
 .                                                                      \
-.  {* target_index, used_by_bfd, constructor_chain, owner,          *} \
+.  {* target_index, used_by_bfd, constructor_chain, owner,           *}        \
 .     0,            NULL,        NULL,              NULL,              \
 .                                                                      \
 .     0,            NULL,        NULL,              NULL,              \
 .                                                                      \
-.  {* flag_info,                                                   *}  \
-.     NULL,                                                            \
-.                                                                      \
-.  {* symbol,                    symbol_ptr_ptr,                    *} \
+.  {* symbol,                    symbol_ptr_ptr,                     *}        \
 .     (struct bfd_symbol *) SYM, &SEC.symbol,                          \
 .                                                                      \
 .     (struct bfd_symbol *) SYM, &SEC.symbol,                          \
 .                                                                      \
-.  {* map_head, map_tail                                            *} \
-.     { NULL }, { NULL }                                               \
+.  {* map_head, map_tail, already_assigned                           *}        \
+.     { NULL }, { NULL }, NULL                                         \
+.                                                                      \
 .    }
 .
 .    }
 .
+.{* We use a macro to initialize the static asymbol structures because
+.   traditional C does not permit us to initialize a union member while
+.   gcc warns if we don't initialize it.
+.   the_bfd, name, value, attr, section [, udata]  *}
+.#ifdef __STDC__
+.#define GLOBAL_SYM_INIT(NAME, SECTION) \
+.  { 0, NAME, 0, BSF_SECTION_SYM, SECTION, { 0 }}
+.#else
+.#define GLOBAL_SYM_INIT(NAME, SECTION) \
+.  { 0, NAME, 0, BSF_SECTION_SYM, SECTION }
+.#endif
+.
 */
 
 */
 
-/* We use a macro to initialize the static asymbol structures because
-   traditional C does not permit us to initialize a union member while
-   gcc warns if we don't initialize it.  */
- /* the_bfd, name, value, attr, section [, udata] */
-#ifdef __STDC__
-#define GLOBAL_SYM_INIT(NAME, SECTION) \
-  { 0, NAME, 0, BSF_SECTION_SYM, SECTION, { 0 }}
-#else
-#define GLOBAL_SYM_INIT(NAME, SECTION) \
-  { 0, NAME, 0, BSF_SECTION_SYM, SECTION }
-#endif
-
 /* These symbols are global, not specific to any BFD.  Therefore, anything
    that tries to change them is broken, and should be repaired.  */
 
 /* These symbols are global, not specific to any BFD.  Therefore, anything
    that tries to change them is broken, and should be repaired.  */
 
@@ -731,9 +768,9 @@ static const asymbol global_syms[] =
 };
 
 #define STD_SECTION(NAME, IDX, FLAGS) \
 };
 
 #define STD_SECTION(NAME, IDX, FLAGS) \
-  BFD_FAKE_SECTION(std_section[IDX], FLAGS, &global_syms[IDX], NAME, IDX)
+  BFD_FAKE_SECTION(_bfd_std_section[IDX], &global_syms[IDX], NAME, IDX, FLAGS)
 
 
-asection std_section[] = {
+asection _bfd_std_section[] = {
   STD_SECTION (BFD_COM_SECTION_NAME, 0, SEC_IS_COMMON),
   STD_SECTION (BFD_UND_SECTION_NAME, 1, 0),
   STD_SECTION (BFD_ABS_SECTION_NAME, 2, 0),
   STD_SECTION (BFD_COM_SECTION_NAME, 0, SEC_IS_COMMON),
   STD_SECTION (BFD_UND_SECTION_NAME, 1, 0),
   STD_SECTION (BFD_ABS_SECTION_NAME, 2, 0),
@@ -791,21 +828,21 @@ _bfd_generic_new_section_hook (bfd *abfd, asection *newsect)
   return TRUE;
 }
 
   return TRUE;
 }
 
+unsigned int _bfd_section_id = 0x10;  /* id 0 to 3 used by STD_SECTION.  */
+
 /* Initializes a new section.  NEWSECT->NAME is already set.  */
 
 static asection *
 bfd_section_init (bfd *abfd, asection *newsect)
 {
 /* Initializes a new section.  NEWSECT->NAME is already set.  */
 
 static asection *
 bfd_section_init (bfd *abfd, asection *newsect)
 {
-  static int section_id = 0x10;  /* id 0 to 3 used by STD_SECTION.  */
-
-  newsect->id = section_id;
+  newsect->id = _bfd_section_id;
   newsect->index = abfd->section_count;
   newsect->owner = abfd;
 
   if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect)))
     return NULL;
 
   newsect->index = abfd->section_count;
   newsect->owner = abfd;
 
   if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect)))
     return NULL;
 
-  section_id++;
+  _bfd_section_id++;
   abfd->section_count++;
   bfd_section_list_append (abfd, newsect);
   return newsect;
   abfd->section_count++;
   bfd_section_list_append (abfd, newsect);
   return newsect;
@@ -841,6 +878,7 @@ bfd_section_list_clear (bfd *abfd)
   abfd->section_count = 0;
   memset (abfd->section_htab.table, 0,
          abfd->section_htab.size * sizeof (struct bfd_hash_entry *));
   abfd->section_count = 0;
   memset (abfd->section_htab.table, 0,
          abfd->section_htab.size * sizeof (struct bfd_hash_entry *));
+  abfd->section_htab.count = 0;
 }
 
 /*
 }
 
 /*
@@ -851,14 +889,8 @@ SYNOPSIS
        asection *bfd_get_section_by_name (bfd *abfd, const char *name);
 
 DESCRIPTION
        asection *bfd_get_section_by_name (bfd *abfd, const char *name);
 
 DESCRIPTION
-       Run through @var{abfd} and return the one of the
-       <<asection>>s whose name matches @var{name}, otherwise <<NULL>>.
-       @xref{Sections}, for more information.
-
-       This should only be used in special cases; the normal way to process
-       all sections of a given name is to use <<bfd_map_over_sections>> and
-       <<strcmp>> on the name (or better yet, base it on the section flags
-       or something else) for each section.
+       Return the most recently created section attached to @var{abfd}
+       named @var{name}.  Return NULL if no such section exists.
 */
 
 asection *
 */
 
 asection *
@@ -873,6 +905,75 @@ bfd_get_section_by_name (bfd *abfd, const char *name)
   return NULL;
 }
 
   return NULL;
 }
 
+/*
+FUNCTION
+       bfd_get_next_section_by_name
+
+SYNOPSIS
+       asection *bfd_get_next_section_by_name (bfd *ibfd, asection *sec);
+
+DESCRIPTION
+       Given @var{sec} is a section returned by @code{bfd_get_section_by_name},
+       return the next most recently created section attached to the same
+       BFD with the same name, or if no such section exists in the same BFD and
+       IBFD is non-NULL, the next section with the same name in any input
+       BFD following IBFD.  Return NULL on finding no section.
+*/
+
+asection *
+bfd_get_next_section_by_name (bfd *ibfd, asection *sec)
+{
+  struct section_hash_entry *sh;
+  const char *name;
+  unsigned long hash;
+
+  sh = ((struct section_hash_entry *)
+       ((char *) sec - offsetof (struct section_hash_entry, section)));
+
+  hash = sh->root.hash;
+  name = sec->name;
+  for (sh = (struct section_hash_entry *) sh->root.next;
+       sh != NULL;
+       sh = (struct section_hash_entry *) sh->root.next)
+    if (sh->root.hash == hash
+       && strcmp (sh->root.string, name) == 0)
+      return &sh->section;
+
+  if (ibfd != NULL)
+    {
+      while ((ibfd = ibfd->link.next) != NULL)
+       {
+         asection *s = bfd_get_section_by_name (ibfd, name);
+         if (s != NULL)
+           return s;
+       }
+    }
+
+  return NULL;
+}
+
+/*
+FUNCTION
+       bfd_get_linker_section
+
+SYNOPSIS
+       asection *bfd_get_linker_section (bfd *abfd, const char *name);
+
+DESCRIPTION
+       Return the linker created section attached to @var{abfd}
+       named @var{name}.  Return NULL if no such section exists.
+*/
+
+asection *
+bfd_get_linker_section (bfd *abfd, const char *name)
+{
+  asection *sec = bfd_get_section_by_name (abfd, name);
+
+  while (sec != NULL && (sec->flags & SEC_LINKER_CREATED) == 0)
+    sec = bfd_get_next_section_by_name (NULL, sec);
+  return sec;
+}
+
 /*
 FUNCTION
        bfd_get_section_by_name_if
 /*
 FUNCTION
        bfd_get_section_by_name_if
@@ -912,14 +1013,11 @@ bfd_get_section_by_name_if (bfd *abfd, const char *name,
     return NULL;
 
   hash = sh->root.hash;
     return NULL;
 
   hash = sh->root.hash;
-  do
-    {
-      if ((*operation) (abfd, &sh->section, user_storage))
-       return &sh->section;
-      sh = (struct section_hash_entry *) sh->root.next;
-    }
-  while (sh != NULL && sh->root.hash == hash
-        && strcmp (sh->root.string, name) == 0);
+  for (; sh != NULL; sh = (struct section_hash_entry *) sh->root.next)
+    if (sh->root.hash == hash
+       && strcmp (sh->root.string, name) == 0
+       && (*operation) (abfd, &sh->section, user_storage))
+      return &sh->section;
 
   return NULL;
 }
 
   return NULL;
 }
@@ -1146,7 +1244,7 @@ bfd_make_section_with_flags (bfd *abfd, const char *name,
   struct section_hash_entry *sh;
   asection *newsect;
 
   struct section_hash_entry *sh;
   asection *newsect;
 
-  if (abfd->output_has_begun)
+  if (abfd == NULL || name == NULL || abfd->output_has_begun)
     {
       bfd_set_error (bfd_error_invalid_operation);
       return NULL;
     {
       bfd_set_error (bfd_error_invalid_operation);
       return NULL;
@@ -1199,13 +1297,12 @@ FUNCTION
        bfd_set_section_flags
 
 SYNOPSIS
        bfd_set_section_flags
 
 SYNOPSIS
-       bfd_boolean bfd_set_section_flags
-         (bfd *abfd, asection *sec, flagword flags);
+       bfd_boolean bfd_set_section_flags (asection *sec, flagword flags);
 
 DESCRIPTION
 
 DESCRIPTION
-       Set the attributes of the section @var{sec} in the BFD
-       @var{abfd} to the value @var{flags}. Return <<TRUE>> on success,
-       <<FALSE>> on error. Possible error returns are:
+       Set the attributes of the section @var{sec} to the value @var{flags}.
+       Return <<TRUE>> on success, <<FALSE>> on error.  Possible error
+       returns are:
 
        o <<bfd_error_invalid_operation>> -
        The section cannot have one or more of the attributes
 
        o <<bfd_error_invalid_operation>> -
        The section cannot have one or more of the attributes
@@ -1215,9 +1312,7 @@ DESCRIPTION
 */
 
 bfd_boolean
 */
 
 bfd_boolean
-bfd_set_section_flags (bfd *abfd ATTRIBUTE_UNUSED,
-                      sec_ptr section,
-                      flagword flags)
+bfd_set_section_flags (asection *section, flagword flags)
 {
   section->flags = flags;
   return TRUE;
 {
   section->flags = flags;
   return TRUE;
@@ -1229,21 +1324,21 @@ FUNCTION
 
 SYNOPSIS
        void bfd_rename_section
 
 SYNOPSIS
        void bfd_rename_section
-         (bfd *abfd, asection *sec, const char *newname);
+         (asection *sec, const char *newname);
 
 DESCRIPTION
 
 DESCRIPTION
-       Rename section @var{sec} in @var{abfd} to @var{newname}.
+       Rename section @var{sec} to @var{newname}.
 */
 
 void
 */
 
 void
-bfd_rename_section (bfd *abfd, sec_ptr sec, const char *newname)
+bfd_rename_section (asection *sec, const char *newname)
 {
   struct section_hash_entry *sh;
 
   sh = (struct section_hash_entry *)
     ((char *) sec - offsetof (struct section_hash_entry, section));
   sh->section.name = newname;
 {
   struct section_hash_entry *sh;
 
   sh = (struct section_hash_entry *)
     ((char *) sec - offsetof (struct section_hash_entry, section));
   sh->section.name = newname;
-  bfd_hash_rename (&abfd->section_htab, newname, &sh->root);
+  bfd_hash_rename (&sec->owner->section_htab, newname, &sh->root);
 }
 
 /*
 }
 
 /*
@@ -1266,7 +1361,7 @@ DESCRIPTION
        This is the preferred method for iterating over sections; an
        alternative would be to use a loop:
 
        This is the preferred method for iterating over sections; an
        alternative would be to use a loop:
 
-|         section *p;
+|         asection *p;
 |         for (p = abfd->sections; p != NULL; p = p->next)
 |            func (abfd, p, ...)
 
 |         for (p = abfd->sections; p != NULL; p = p->next)
 |            func (abfd, p, ...)
 
@@ -1327,8 +1422,7 @@ FUNCTION
        bfd_set_section_size
 
 SYNOPSIS
        bfd_set_section_size
 
 SYNOPSIS
-       bfd_boolean bfd_set_section_size
-         (bfd *abfd, asection *sec, bfd_size_type val);
+       bfd_boolean bfd_set_section_size (asection *sec, bfd_size_type val);
 
 DESCRIPTION
        Set @var{sec} to the size @var{val}. If the operation is
 
 DESCRIPTION
        Set @var{sec} to the size @var{val}. If the operation is
@@ -1341,18 +1435,18 @@ DESCRIPTION
 */
 
 bfd_boolean
 */
 
 bfd_boolean
-bfd_set_section_size (bfd *abfd, sec_ptr ptr, bfd_size_type val)
+bfd_set_section_size (asection *sec, bfd_size_type val)
 {
   /* Once you've started writing to any section you cannot create or change
      the size of any others.  */
 
 {
   /* Once you've started writing to any section you cannot create or change
      the size of any others.  */
 
-  if (abfd->output_has_begun)
+  if (sec->owner == NULL || sec->owner->output_has_begun)
     {
       bfd_set_error (bfd_error_invalid_operation);
       return FALSE;
     }
 
     {
       bfd_set_error (bfd_error_invalid_operation);
       return FALSE;
     }
 
-  ptr->size = val;
+  sec->size = val;
   return TRUE;
 }
 
   return TRUE;
 }
 
@@ -1367,16 +1461,20 @@ SYNOPSIS
 
 DESCRIPTION
        Sets the contents of the section @var{section} in BFD
 
 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{abfd} to the data starting in memory at @var{location}.
+       The data is written to the output section starting at offset
        @var{offset} for @var{count} octets.
 
        @var{offset} for @var{count} octets.
 
-       Normally <<TRUE>> is returned, else <<FALSE>>. Possible error
-       returns are:
+       Normally <<TRUE>> is returned, but <<FALSE>> is returned if
+       there was an error.  Possible error returns are:
        o <<bfd_error_no_contents>> -
        The output section does not have the <<SEC_HAS_CONTENTS>>
        attribute, so nothing can be written to it.
        o <<bfd_error_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
+       o <<bfd_error_bad_value>> -
+       The section is unable to contain all of the data.
+       o <<bfd_error_invalid_operation>> -
+       The BFD is not writeable.
+       o and some more too.
 
        This routine is front end to the back end function
        <<_bfd_set_section_contents>>.
 
        This routine is front end to the back end function
        <<_bfd_set_section_contents>>.
@@ -1392,7 +1490,7 @@ bfd_set_section_contents (bfd *abfd,
 {
   bfd_size_type sz;
 
 {
   bfd_size_type sz;
 
-  if (!(bfd_get_section_flags (abfd, section) & SEC_HAS_CONTENTS))
+  if (!(bfd_section_flags (section) & SEC_HAS_CONTENTS))
     {
       bfd_set_error (bfd_error_no_contents);
       return FALSE;
     {
       bfd_set_error (bfd_error_no_contents);
       return FALSE;
@@ -1500,8 +1598,8 @@ bfd_get_section_contents (bfd *abfd,
          bfd_set_error (bfd_error_invalid_operation);
          return FALSE;
        }
          bfd_set_error (bfd_error_invalid_operation);
          return FALSE;
        }
-      
-      memcpy (location, section->contents + offset, (size_t) count);
+
+      memmove (location, section->contents + offset, (size_t) count);
       return TRUE;
     }
 
       return TRUE;
     }
 
@@ -1546,8 +1644,8 @@ DESCRIPTION
        Not enough memory exists to create private data for @var{osec}.
 
 .#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
        Not enough memory exists to create private data for @var{osec}.
 
 .#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
-.     BFD_SEND (obfd, _bfd_copy_private_section_data, \
-.              (ibfd, isection, obfd, osection))
+.      BFD_SEND (obfd, _bfd_copy_private_section_data, \
+.                (ibfd, isection, obfd, osection))
 */
 
 /*
 */
 
 /*
@@ -1568,6 +1666,24 @@ bfd_generic_is_group_section (bfd *abfd ATTRIBUTE_UNUSED,
   return FALSE;
 }
 
   return FALSE;
 }
 
+/*
+FUNCTION
+       bfd_generic_group_name
+
+SYNOPSIS
+       const char *bfd_generic_group_name (bfd *, const asection *sec);
+
+DESCRIPTION
+       Returns group name if @var{sec} is a member of a group.
+*/
+
+const char *
+bfd_generic_group_name (bfd *abfd ATTRIBUTE_UNUSED,
+                       const asection *sec ATTRIBUTE_UNUSED)
+{
+  return NULL;
+}
+
 /*
 FUNCTION
        bfd_generic_discard_group
 /*
 FUNCTION
        bfd_generic_discard_group
@@ -1585,3 +1701,13 @@ bfd_generic_discard_group (bfd *abfd ATTRIBUTE_UNUSED,
 {
   return TRUE;
 }
 {
   return TRUE;
 }
+
+bfd_boolean
+_bfd_nowrite_set_section_contents (bfd *abfd,
+                                  sec_ptr section ATTRIBUTE_UNUSED,
+                                  const void *location ATTRIBUTE_UNUSED,
+                                  file_ptr offset ATTRIBUTE_UNUSED,
+                                  bfd_size_type count ATTRIBUTE_UNUSED)
+{
+  return _bfd_bool_bfd_false_error (abfd);
+}
This page took 0.036003 seconds and 4 git commands to generate.