bfd/
	* elf-bfd.h (struct elf_backend_data): Add get_sec_type_attr.  Delete
	special_sections.
	(_bfd_elf_get_special_section): Declare.
	(bfd_elf_special_section): Update prototype.
	* elf.c (special_sections): Remove unused outer entries.
	(get_special_section): Delete.
	(_bfd_elf_get_special_section): New function.
	(_bfd_elf_get_sec_type_attr): Replace "name" arg with "sec".  Update
	special_sections indexing.
	(_bfd_elf_new_section_hook): Call backend get_sec_type_attr.
	* elf32-arm.c (symbian_special_sections_d): Delete.
	(symbian_special_sections_g, symbian_special_sections_h): Delete.
	(symbian_special_sections_i, symbian_special_sections_f): Delete.
	(symbian_special_sections_p): Delete.
	(elf32_arm_symbian_special_sections): Merge above to here.
	(elf32_arm_symbian_get_sec_type_attr): New function.
	(elf_backend_special_sections): Don't define.
	(elf_backend_get_sec_type_attr): Define.
	* elf32-m32r.c: Similarly to elf32-arm.c.
	* elf32-m68hc11.c: Likewise.
	* elf32-m68hc12.c: Likewise.
	* elf32-mcore.c: Likewise.
	* elf32-sh64.c: Likewise.
	* elf32-v850.c: Likewise.
	* elf32-xtensa.c: Likewise.
	* elf64-alpha.c: Likewise.
	* elf64-hppa.c: Likewise.
	* elf64-ppc.c: Likewise.
	* elf64-sh64.c: Likewise.
	* elfxx-ia64.c: Likewise.
	* elfxx-mips.c: Likewise.
	* elf32-ppc.c: Likewise.
	(bfd_elf_special_section ppc_alt_plt): New.  Use it if .plt loadable.
	* elfxx-mips.h (_bfd_mips_elf_get_sec_type_attr): Declare.
	(_bfd_mips_elf_special_sections, elf_backend_special_sections): Delete.
	(elf_backend_get_sec_type_attr): Define.
	* elfxx-target.h (elf_backend_get_sec_type_attr): Define.
	(elf_backend_special_sections): Don't define.
	(elfNN_bed): Update.

binutils/
	* objcopy.c (copy_object): Use bfd_make_section_with_flags.
	(write_debugging_info): Likewise.
	(setup_section): Use bfd_make_section_anyway_with_flags.
gas/
	* config/obj-elf.c (obj_elf_change_section): Use backend
	get_sec_type_attr.
This commit is contained in:
Alan Modra 2005-07-04 01:53:44 +00:00
parent 90f7da277e
commit 551b43fde1
24 changed files with 435 additions and 799 deletions

View File

@ -1,3 +1,46 @@
2005-07-04 Alan Modra <amodra@bigpond.net.au>
PR 1004
* elf-bfd.h (struct elf_backend_data): Add get_sec_type_attr. Delete
special_sections.
(_bfd_elf_get_special_section): Declare.
(bfd_elf_special_section): Update prototype.
* elf.c (special_sections): Remove unused outer entries.
(get_special_section): Delete.
(_bfd_elf_get_special_section): New function.
(_bfd_elf_get_sec_type_attr): Replace "name" arg with "sec". Update
special_sections indexing.
(_bfd_elf_new_section_hook): Call backend get_sec_type_attr.
* elf32-arm.c (symbian_special_sections_d): Delete.
(symbian_special_sections_g, symbian_special_sections_h): Delete.
(symbian_special_sections_i, symbian_special_sections_f): Delete.
(symbian_special_sections_p): Delete.
(elf32_arm_symbian_special_sections): Merge above to here.
(elf32_arm_symbian_get_sec_type_attr): New function.
(elf_backend_special_sections): Don't define.
(elf_backend_get_sec_type_attr): Define.
* elf32-m32r.c: Similarly to elf32-arm.c.
* elf32-m68hc11.c: Likewise.
* elf32-m68hc12.c: Likewise.
* elf32-mcore.c: Likewise.
* elf32-sh64.c: Likewise.
* elf32-v850.c: Likewise.
* elf32-xtensa.c: Likewise.
* elf64-alpha.c: Likewise.
* elf64-hppa.c: Likewise.
* elf64-ppc.c: Likewise.
* elf64-sh64.c: Likewise.
* elfxx-ia64.c: Likewise.
* elfxx-mips.c: Likewise.
* elf32-ppc.c: Likewise.
(bfd_elf_special_section ppc_alt_plt): New. Use it if .plt loadable.
* elfxx-mips.h (_bfd_mips_elf_get_sec_type_attr): Declare.
(_bfd_mips_elf_special_sections, elf_backend_special_sections): Delete.
(elf_backend_get_sec_type_attr): Define.
* elfxx-target.h (elf_backend_get_sec_type_attr): Define.
(elf_backend_special_sections): Don't define.
(elfNN_bed): Update.
2005-07-01 Nick Clifton <nickc@redhat.com> 2005-07-01 Nick Clifton <nickc@redhat.com>
* cpu-d10v.c: Update to ISO C90 style function declarations and * cpu-d10v.c: Update to ISO C90 style function declarations and

View File

@ -633,11 +633,16 @@ struct elf_backend_data
bfd_boolean (*elf_backend_section_from_shdr) bfd_boolean (*elf_backend_section_from_shdr)
(bfd *, Elf_Internal_Shdr *, const char *, int); (bfd *, Elf_Internal_Shdr *, const char *, int);
/* A function to convert machine dependent section header flags to /* A function to convert machine dependent ELF section header flags to
BFD internal section header flags. */ BFD internal section header flags. */
bfd_boolean (*elf_backend_section_flags) bfd_boolean (*elf_backend_section_flags)
(flagword *, const Elf_Internal_Shdr *); (flagword *, const Elf_Internal_Shdr *);
/* A function that returns a struct containing ELF section flags and
type for the given BFD section. */
const struct bfd_elf_special_section * (*get_sec_type_attr)
(bfd *, asection *);
/* A function to handle unusual program segment types when creating BFD /* A function to handle unusual program segment types when creating BFD
sections from ELF program segments. */ sections from ELF program segments. */
bfd_boolean (*elf_backend_section_from_phdr) bfd_boolean (*elf_backend_section_from_phdr)
@ -976,10 +981,6 @@ struct elf_backend_data
const struct elf_size_info *s; const struct elf_size_info *s;
/* An array of 27 target specific special section map arrays,
covering 'a' to 'z', plus other. */
const struct bfd_elf_special_section **special_sections;
/* The size in bytes of the header for the GOT. This includes the /* The size in bytes of the header for the GOT. This includes the
so-called reserved entries on some systems. */ so-called reserved entries on some systems. */
bfd_vma got_header_size; bfd_vma got_header_size;
@ -1501,8 +1502,10 @@ extern bfd_boolean _bfd_elf_new_section_hook
(bfd *, asection *); (bfd *, asection *);
extern bfd_boolean _bfd_elf_init_reloc_shdr extern bfd_boolean _bfd_elf_init_reloc_shdr
(bfd *, Elf_Internal_Shdr *, asection *, bfd_boolean); (bfd *, Elf_Internal_Shdr *, asection *, bfd_boolean);
extern const struct bfd_elf_special_section *_bfd_elf_get_special_section
(const char *, const struct bfd_elf_special_section *, unsigned int);
extern const struct bfd_elf_special_section *_bfd_elf_get_sec_type_attr extern const struct bfd_elf_special_section *_bfd_elf_get_sec_type_attr
(bfd *, const char *); (bfd *, asection *);
/* If the target doesn't have reloc handling written yet: */ /* If the target doesn't have reloc handling written yet: */
extern void _bfd_elf_no_info_to_howto extern void _bfd_elf_no_info_to_howto

View File

@ -2270,9 +2270,8 @@ static struct bfd_elf_special_section const special_sections_t[] =
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const *special_sections [27] = static struct bfd_elf_special_section const *special_sections[] =
{ {
NULL, /* 'a' */
special_sections_b, /* 'b' */ special_sections_b, /* 'b' */
special_sections_c, /* 'b' */ special_sections_c, /* 'b' */
special_sections_d, /* 'd' */ special_sections_d, /* 'd' */
@ -2292,51 +2291,29 @@ static struct bfd_elf_special_section const *special_sections [27] =
special_sections_r, /* 'r' */ special_sections_r, /* 'r' */
special_sections_s, /* 's' */ special_sections_s, /* 's' */
special_sections_t, /* 't' */ special_sections_t, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
}; };
static const struct bfd_elf_special_section * const struct bfd_elf_special_section *
get_special_section (const char *name, _bfd_elf_get_special_section (const char *name,
const struct bfd_elf_special_section **special_sections_p, const struct bfd_elf_special_section *spec,
unsigned int rela) unsigned int rela)
{ {
int i; int i;
int len; int len;
const struct bfd_elf_special_section *special_sections;
if (name [0] == '.') len = strlen (name);
{
i = name [1] - 'a';
if (i < 0 || i > 25)
i = 26;
}
else
i = 26;
special_sections = special_sections_p [i]; for (i = 0; spec[i].prefix != NULL; i++)
if (!special_sections)
return special_sections;
len= strlen (name);
for (i = 0; special_sections[i].prefix != NULL; i++)
{ {
int suffix_len; int suffix_len;
int prefix_len = special_sections[i].prefix_length; int prefix_len = spec[i].prefix_length;
if (len < prefix_len) if (len < prefix_len)
continue; continue;
if (memcmp (name, special_sections[i].prefix, prefix_len) != 0) if (memcmp (name, spec[i].prefix, prefix_len) != 0)
continue; continue;
suffix_len = special_sections[i].suffix_length; suffix_len = spec[i].suffix_length;
if (suffix_len <= 0) if (suffix_len <= 0)
{ {
if (name[prefix_len] != 0) if (name[prefix_len] != 0)
@ -2345,7 +2322,7 @@ get_special_section (const char *name,
continue; continue;
if (name[prefix_len] != '.' if (name[prefix_len] != '.'
&& (suffix_len == -2 && (suffix_len == -2
|| (rela && special_sections[i].type == SHT_REL))) || (rela && spec[i].type == SHT_REL)))
continue; continue;
} }
} }
@ -2354,41 +2331,46 @@ get_special_section (const char *name,
if (len < prefix_len + suffix_len) if (len < prefix_len + suffix_len)
continue; continue;
if (memcmp (name + len - suffix_len, if (memcmp (name + len - suffix_len,
special_sections[i].prefix + prefix_len, spec[i].prefix + prefix_len,
suffix_len) != 0) suffix_len) != 0)
continue; continue;
} }
return &special_sections[i]; return &spec[i];
} }
return NULL; return NULL;
} }
const struct bfd_elf_special_section * const struct bfd_elf_special_section *
_bfd_elf_get_sec_type_attr (bfd *abfd, const char *name) _bfd_elf_get_sec_type_attr (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
{ {
const struct elf_backend_data *bed = get_elf_backend_data (abfd); int i;
const struct bfd_elf_special_section *ssect = NULL; const struct bfd_elf_special_section *spec;
/* See if this is one of the special sections. */ /* See if this is one of the special sections. */
if (name) if (sec->name == NULL)
{ return NULL;
unsigned int rela = bed->default_use_rela_p;
if (bed->special_sections) if (sec->name[0] != '.')
ssect = get_special_section (name, bed->special_sections, rela); return NULL;
if (! ssect) i = sec->name[1] - 'b';
ssect = get_special_section (name, special_sections, rela); if (i < 0 || i > 't' - 'b')
} return NULL;
return ssect; spec = special_sections[i];
if (spec == NULL)
return NULL;
return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
} }
bfd_boolean bfd_boolean
_bfd_elf_new_section_hook (bfd *abfd, asection *sec) _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
{ {
struct bfd_elf_section_data *sdata; struct bfd_elf_section_data *sdata;
const struct elf_backend_data *bed;
const struct bfd_elf_special_section *ssect; const struct bfd_elf_special_section *ssect;
sdata = (struct bfd_elf_section_data *) sec->used_by_bfd; sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
@ -2400,13 +2382,17 @@ _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
sec->used_by_bfd = sdata; sec->used_by_bfd = sdata;
} }
/* Indicate whether or not this section should use RELA relocations. */
bed = get_elf_backend_data (abfd);
sec->use_rela_p = bed->default_use_rela_p;
/* When we read a file, we don't need section type and flags unless /* When we read a file, we don't need section type and flags unless
it is a linker created section. They will be overridden in it is a linker created section. They will be overridden in
_bfd_elf_make_section_from_shdr anyway. */ _bfd_elf_make_section_from_shdr anyway. */
if (abfd->direction != read_direction if (abfd->direction != read_direction
|| (sec->flags & SEC_LINKER_CREATED) != 0) || (sec->flags & SEC_LINKER_CREATED) != 0)
{ {
ssect = _bfd_elf_get_sec_type_attr (abfd, sec->name); ssect = (*bed->get_sec_type_attr) (abfd, sec);
if (ssect != NULL) if (ssect != NULL)
{ {
elf_section_type (sec) = ssect->type; elf_section_type (sec) = ssect->type;
@ -2414,9 +2400,6 @@ _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
} }
} }
/* Indicate whether or not this section should use RELA relocations. */
sec->use_rela_p = get_elf_backend_data (abfd)->default_use_rela_p;
return TRUE; return TRUE;
} }

View File

@ -6943,7 +6943,7 @@ elf32_arm_symbian_link_hash_table_create (bfd *abfd)
} }
static struct bfd_elf_special_section const static struct bfd_elf_special_section const
symbian_special_sections_d[]= elf32_arm_symbian_special_sections[] =
{ {
/* In a BPABI executable, the dynamic linking sections do not go in /* In a BPABI executable, the dynamic linking sections do not go in
the loadable read-only segment. The post-linker may wish to the loadable read-only segment. The post-linker may wish to
@ -6952,92 +6952,34 @@ static struct bfd_elf_special_section const
{ ".dynamic", 8, 0, SHT_DYNAMIC, 0 }, { ".dynamic", 8, 0, SHT_DYNAMIC, 0 },
{ ".dynstr", 7, 0, SHT_STRTAB, 0 }, { ".dynstr", 7, 0, SHT_STRTAB, 0 },
{ ".dynsym", 7, 0, SHT_DYNSYM, 0 }, { ".dynsym", 7, 0, SHT_DYNSYM, 0 },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
symbian_special_sections_g[]=
{
/* In a BPABI executable, the dynamic linking sections do not go in
the loadable read-only segment. The post-linker may wish to
refer to these sections, but they are not part of the final
program image. */
{ ".got", 4, 0, SHT_PROGBITS, 0 }, { ".got", 4, 0, SHT_PROGBITS, 0 },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
symbian_special_sections_h[]=
{
/* In a BPABI executable, the dynamic linking sections do not go in
the loadable read-only segment. The post-linker may wish to
refer to these sections, but they are not part of the final
program image. */
{ ".hash", 5, 0, SHT_HASH, 0 }, { ".hash", 5, 0, SHT_HASH, 0 },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
symbian_special_sections_i[]=
{
/* These sections do not need to be writable as the SymbianOS /* These sections do not need to be writable as the SymbianOS
postlinker will arrange things so that no dynamic relocation is postlinker will arrange things so that no dynamic relocation is
required. */ required. */
{ ".init_array", 11, 0, SHT_INIT_ARRAY, SHF_ALLOC }, { ".init_array", 11, 0, SHT_INIT_ARRAY, SHF_ALLOC },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
symbian_special_sections_f[]=
{
/* These sections do not need to be writable as the SymbianOS
postlinker will arrange things so that no dynamic relocation is
required. */
{ ".fini_array", 11, 0, SHT_FINI_ARRAY, SHF_ALLOC }, { ".fini_array", 11, 0, SHT_FINI_ARRAY, SHF_ALLOC },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
symbian_special_sections_p[]=
{
/* These sections do not need to be writable as the SymbianOS
postlinker will arrange things so that no dynamic relocation is
required. */
{ ".preinit_array", 14, 0, SHT_PREINIT_ARRAY, SHF_ALLOC }, { ".preinit_array", 14, 0, SHT_PREINIT_ARRAY, SHF_ALLOC },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
elf32_arm_symbian_special_sections[27]= elf32_arm_symbian_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
NULL, /* 'c' */ /* See if this is one of the special sections. */
symbian_special_sections_d, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
symbian_special_sections_f, /* 'f' */
symbian_special_sections_g, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
symbian_special_sections_h, /* 'h' */ elf32_arm_symbian_special_sections,
symbian_special_sections_i, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
symbian_special_sections_p, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
NULL, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
static void static void
elf32_arm_symbian_begin_write_processing (bfd *abfd, elf32_arm_symbian_begin_write_processing (bfd *abfd,
@ -7091,8 +7033,8 @@ elf32_arm_symbian_modify_segment_map (bfd *abfd,
#define bfd_elf32_bfd_link_hash_table_create \ #define bfd_elf32_bfd_link_hash_table_create \
elf32_arm_symbian_link_hash_table_create elf32_arm_symbian_link_hash_table_create
#undef elf_backend_special_sections #undef elf_backend_get_sec_type_attr
#define elf_backend_special_sections elf32_arm_symbian_special_sections #define elf_backend_get_sec_type_attr elf32_arm_symbian_get_sec_type_attr
#undef elf_backend_begin_write_processing #undef elf_backend_begin_write_processing
#define elf_backend_begin_write_processing \ #define elf_backend_begin_write_processing \

View File

@ -4013,45 +4013,30 @@ m32r_elf_check_relocs (bfd *abfd,
return TRUE; return TRUE;
} }
static struct bfd_elf_special_section const static struct bfd_elf_special_section const m32r_elf_special_sections[] =
m32r_elf_special_sections_s[] =
{ {
{ ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE }, { ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 } { ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
m32r_elf_special_sections[27] = m32r_elf_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
NULL, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ m32r_elf_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
NULL, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
m32r_elf_special_sections_s, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
static bfd_boolean static bfd_boolean
m32r_elf_fake_sections (bfd *abfd, m32r_elf_fake_sections (bfd *abfd,
@ -4156,7 +4141,7 @@ m32r_elf_reloc_type_class (const Elf_Internal_Rela *rela)
#define bfd_elf32_bfd_merge_private_bfd_data m32r_elf_merge_private_bfd_data #define bfd_elf32_bfd_merge_private_bfd_data m32r_elf_merge_private_bfd_data
#define bfd_elf32_bfd_set_private_flags m32r_elf_set_private_flags #define bfd_elf32_bfd_set_private_flags m32r_elf_set_private_flags
#define bfd_elf32_bfd_print_private_bfd_data m32r_elf_print_private_bfd_data #define bfd_elf32_bfd_print_private_bfd_data m32r_elf_print_private_bfd_data
#define elf_backend_special_sections m32r_elf_special_sections #define elf_backend_get_sec_type_attr m32r_elf_get_sec_type_attr
#include "elf32-target.h" #include "elf32-target.h"

View File

@ -1257,65 +1257,32 @@ m68hc11_elf_relax_delete_bytes (bfd *abfd, asection *sec,
are located in .page0. are located in .page0.
- The .vectors is the section that represents the interrupt - The .vectors is the section that represents the interrupt
vectors. */ vectors. */
static struct bfd_elf_special_section const static struct bfd_elf_special_section const elf32_m68hc11_special_sections[] =
m68hc11_special_sections_e[] =
{ {
{ ".eeprom", 7, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, { ".eeprom", 7, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
m68hc11_special_sections_s[]=
{
{ ".softregs", 9, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
m68hc11_special_sections_p[]=
{
{ ".page0", 6, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, { ".page0", 6, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 } { ".softregs", 9, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
};
static struct bfd_elf_special_section const
m68hc11_special_sections_v[]=
{
{ ".vectors", 8, 0, SHT_PROGBITS, SHF_ALLOC }, { ".vectors", 8, 0, SHT_PROGBITS, SHF_ALLOC },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
elf32_m68hc11_special_sections[27] = elf32_m68hc11_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
NULL, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
m68hc11_special_sections_e, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ elf32_m68hc11_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
m68hc11_special_sections_p, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
m68hc11_special_sections_s, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
m68hc11_special_sections_v, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
#define ELF_ARCH bfd_arch_m68hc11 #define ELF_ARCH bfd_arch_m68hc11
#define ELF_MACHINE_CODE EM_68HC11 #define ELF_MACHINE_CODE EM_68HC11
@ -1335,7 +1302,7 @@ static struct bfd_elf_special_section const *
#define elf_backend_object_p 0 #define elf_backend_object_p 0
#define elf_backend_final_write_processing 0 #define elf_backend_final_write_processing 0
#define elf_backend_can_gc_sections 1 #define elf_backend_can_gc_sections 1
#define elf_backend_special_sections elf32_m68hc11_special_sections #define elf_backend_get_sec_type_attr elf32_m68hc11_get_sec_type_attr
#define bfd_elf32_bfd_link_hash_table_create \ #define bfd_elf32_bfd_link_hash_table_create \
m68hc11_elf_bfd_link_hash_table_create m68hc11_elf_bfd_link_hash_table_create

View File

@ -535,65 +535,32 @@ m68hc12_elf_set_mach_from_flags (bfd *abfd)
Page0 accesses are faster on the M68HC12. Page0 accesses are faster on the M68HC12.
- The .vectors is the section that represents the interrupt - The .vectors is the section that represents the interrupt
vectors. */ vectors. */
static struct bfd_elf_special_section const static struct bfd_elf_special_section const elf32_m68hc12_special_sections[] =
m68hc12_special_sections_e[] =
{ {
{ ".eeprom", 7, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, { ".eeprom", 7, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
m68hc12_special_sections_s[]=
{
{ ".softregs", 9, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
m68hc12_special_sections_p[]=
{
{ ".page0", 6, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, { ".page0", 6, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 } { ".softregs", 9, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
};
static struct bfd_elf_special_section const
m68hc12_special_sections_v[]=
{
{ ".vectors", 8, 0, SHT_PROGBITS, SHF_ALLOC }, { ".vectors", 8, 0, SHT_PROGBITS, SHF_ALLOC },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
elf32_m68hc12_special_sections[27] = elf32_m68hc12_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
NULL, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
m68hc12_special_sections_e, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ elf32_m68hc12_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
m68hc12_special_sections_p, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
m68hc12_special_sections_s, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
m68hc12_special_sections_v, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
#define ELF_ARCH bfd_arch_m68hc12 #define ELF_ARCH bfd_arch_m68hc12
#define ELF_MACHINE_CODE EM_68HC12 #define ELF_MACHINE_CODE EM_68HC12
@ -611,7 +578,7 @@ static struct bfd_elf_special_section const *
#define elf_backend_object_p m68hc12_elf_set_mach_from_flags #define elf_backend_object_p m68hc12_elf_set_mach_from_flags
#define elf_backend_final_write_processing 0 #define elf_backend_final_write_processing 0
#define elf_backend_can_gc_sections 1 #define elf_backend_can_gc_sections 1
#define elf_backend_special_sections elf32_m68hc12_special_sections #define elf_backend_get_sec_type_attr elf32_m68hc12_get_sec_type_attr
#define elf_backend_post_process_headers elf32_m68hc11_post_process_headers #define elf_backend_post_process_headers elf32_m68hc11_post_process_headers
#define elf_backend_add_symbol_hook elf32_m68hc11_add_symbol_hook #define elf_backend_add_symbol_hook elf32_m68hc11_add_symbol_hook

View File

@ -635,51 +635,30 @@ mcore_elf_check_relocs (bfd * abfd,
return TRUE; return TRUE;
} }
static struct bfd_elf_special_section const static struct bfd_elf_special_section const mcore_elf_special_sections[]=
mcore_special_sections_c [] =
{ {
{ ".ctors", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, { ".ctors", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
mcore_special_sections_d[]=
{
{ ".dtors", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, { ".dtors", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
mcore_elf_special_sections[27]= mcore_elf_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
mcore_special_sections_c, /* 'c' */ /* See if this is one of the special sections. */
mcore_special_sections_d, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ mcore_elf_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
NULL, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
NULL, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
#define TARGET_BIG_SYM bfd_elf32_mcore_big_vec #define TARGET_BIG_SYM bfd_elf32_mcore_big_vec
#define TARGET_BIG_NAME "elf32-mcore-big" #define TARGET_BIG_NAME "elf32-mcore-big"
@ -699,7 +678,7 @@ static struct bfd_elf_special_section const *
#define elf_backend_gc_mark_hook mcore_elf_gc_mark_hook #define elf_backend_gc_mark_hook mcore_elf_gc_mark_hook
#define elf_backend_gc_sweep_hook mcore_elf_gc_sweep_hook #define elf_backend_gc_sweep_hook mcore_elf_gc_sweep_hook
#define elf_backend_check_relocs mcore_elf_check_relocs #define elf_backend_check_relocs mcore_elf_check_relocs
#define elf_backend_special_sections mcore_elf_special_sections #define elf_backend_get_sec_type_attr mcore_elf_get_sec_type_attr
#define elf_backend_can_gc_sections 1 #define elf_backend_can_gc_sections 1
#define elf_backend_rela_normal 1 #define elf_backend_rela_normal 1

View File

@ -1828,70 +1828,44 @@ ppc_elf_additional_program_headers (bfd *abfd)
that the linker doesn't crater when trying to make more than that the linker doesn't crater when trying to make more than
2 sections. */ 2 sections. */
static struct bfd_elf_special_section const static struct bfd_elf_special_section const ppc_elf_special_sections[] =
ppc_special_sections_p[] =
{ {
{ ".plt", 4, 0, SHT_NOBITS, SHF_ALLOC + SHF_EXECINSTR }, { ".plt", 4, 0, SHT_NOBITS, SHF_ALLOC + SHF_EXECINSTR },
{ ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
{ ".sbss2", 6, -2, SHT_PROGBITS, SHF_ALLOC },
{ ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ ".sdata2", 7, -2, SHT_PROGBITS, SHF_ALLOC },
{ ".tags", 5, 0, SHT_ORDERED, SHF_ALLOC },
{ ".PPC.EMB.apuinfo", 16, 0, SHT_NOTE, 0 },
{ ".PPC.EMB.sbss0", 14, 0, SHT_PROGBITS, SHF_ALLOC },
{ ".PPC.EMB.sdata0", 15, 0, SHT_PROGBITS, SHF_ALLOC },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const /* This is what we want for new plt/got. */
ppc_special_sections_s[] = static struct bfd_elf_special_section ppc_alt_plt =
{ { ".plt", 4, 0, SHT_PROGBITS, SHF_ALLOC };
{ ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
{ ".sdata2", 7, -2, SHT_PROGBITS, SHF_ALLOC },
{ ".sbss2", 6, -2, SHT_PROGBITS, SHF_ALLOC },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const static const struct bfd_elf_special_section *
ppc_special_sections_t[] = ppc_elf_get_sec_type_attr (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
{ {
{ ".tags", 5, 0, SHT_ORDERED, SHF_ALLOC }, const struct bfd_elf_special_section const *ssect;
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const /* See if this is one of the special sections. */
ppc_special_sections_other[]= if (sec->name == NULL)
{ return NULL;
{ ".PPC.EMB.apuinfo", 16, 0, SHT_NOTE, 0 },
{ ".PPC.EMB.sdata0", 15, 0, SHT_PROGBITS, SHF_ALLOC },
{ ".PPC.EMB.sbss0", 14, 0, SHT_PROGBITS, SHF_ALLOC },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const * ssect = _bfd_elf_get_special_section (sec->name, ppc_elf_special_sections,
ppc_elf_special_sections[27]= sec->use_rela_p);
{ if (ssect != NULL)
NULL, /* 'a' */ {
NULL, /* 'b' */ if (ssect == ppc_elf_special_sections && (sec->flags & SEC_LOAD) != 0)
NULL, /* 'c' */ ssect = &ppc_alt_plt;
NULL, /* 'd' */ return ssect;
NULL, /* 'e' */ }
NULL, /* 'f' */
NULL, /* 'g' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'h' */ }
NULL, /* 'i' */
NULL, /* 'j' */
NULL, /* 'k' */
NULL, /* 'l' */
NULL, /* 'm' */
NULL, /* 'n' */
NULL, /* 'o' */
ppc_special_sections_p, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
ppc_special_sections_s, /* 's' */
ppc_special_sections_t, /* 's' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
ppc_special_sections_other, /* other */
};
/* Very simple linked list structure for recording apuinfo values. */ /* Very simple linked list structure for recording apuinfo values. */
typedef struct apuinfo_list typedef struct apuinfo_list
@ -6978,7 +6952,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
#define elf_backend_begin_write_processing ppc_elf_begin_write_processing #define elf_backend_begin_write_processing ppc_elf_begin_write_processing
#define elf_backend_final_write_processing ppc_elf_final_write_processing #define elf_backend_final_write_processing ppc_elf_final_write_processing
#define elf_backend_write_section ppc_elf_write_section #define elf_backend_write_section ppc_elf_write_section
#define elf_backend_special_sections ppc_elf_special_sections #define elf_backend_get_sec_type_attr ppc_elf_get_sec_type_attr
#define elf_backend_plt_sym_val ppc_elf_plt_sym_val #define elf_backend_plt_sym_val ppc_elf_plt_sym_val
#include "elf32-target.h" #include "elf32-target.h"

View File

@ -89,7 +89,7 @@ static void sh64_find_section_for_address
#define elf_backend_merge_symbol_attribute sh64_elf_merge_symbol_attribute #define elf_backend_merge_symbol_attribute sh64_elf_merge_symbol_attribute
#define elf_backend_final_write_processing sh64_elf_final_write_processing #define elf_backend_final_write_processing sh64_elf_final_write_processing
#define elf_backend_section_from_shdr sh64_backend_section_from_shdr #define elf_backend_section_from_shdr sh64_backend_section_from_shdr
#define elf_backend_special_sections sh64_elf_special_sections #define elf_backend_get_sec_type_attr sh64_elf_get_sec_type_attr
#define elf_backend_section_flags sh64_elf_section_flags #define elf_backend_section_flags sh64_elf_section_flags
#define bfd_elf32_new_section_hook sh64_elf_new_section_hook #define bfd_elf32_new_section_hook sh64_elf_new_section_hook
@ -754,44 +754,29 @@ sh64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
return; return;
} }
static struct bfd_elf_special_section const static struct bfd_elf_special_section const sh64_elf_special_sections[] =
sh64_special_sections_c[] =
{ {
{ ".cranges", 8, 0, SHT_PROGBITS, 0 }, { ".cranges", 8, 0, SHT_PROGBITS, 0 },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
sh64_elf_special_sections[27]= sh64_elf_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
sh64_special_sections_c, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ sh64_elf_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
NULL, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
NULL, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
#undef TARGET_BIG_SYM #undef TARGET_BIG_SYM
#define TARGET_BIG_SYM bfd_elf32_sh64_vec #define TARGET_BIG_SYM bfd_elf32_sh64_vec

View File

@ -3024,93 +3024,54 @@ v850_elf_relax_section (bfd *abfd,
goto finish; goto finish;
} }
static struct bfd_elf_special_section const static struct bfd_elf_special_section const v850_elf_special_sections[] =
v850_special_sections_c[]=
{ {
{ ".call_table_data", 16, 0, SHT_PROGBITS, (SHF_ALLOC { ".call_table_data", 16, 0, SHT_PROGBITS, (SHF_ALLOC
+ SHF_WRITE) }, + SHF_WRITE) },
{ ".call_table_text", 16, 0, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE { ".call_table_text", 16, 0, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
+ SHF_EXECINSTR) }, + SHF_EXECINSTR) },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
v850_special_sections_r[]=
{
{ ".rosdata", 8, -2, SHT_PROGBITS, (SHF_ALLOC { ".rosdata", 8, -2, SHT_PROGBITS, (SHF_ALLOC
+ SHF_V850_GPREL) }, + SHF_V850_GPREL) },
{ ".rozdata", 8, -2, SHT_PROGBITS, (SHF_ALLOC { ".rozdata", 8, -2, SHT_PROGBITS, (SHF_ALLOC
+ SHF_V850_R0REL) }, + SHF_V850_R0REL) },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
v850_special_sections_s[]=
{
{ ".sdata", 6, -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
+ SHF_V850_GPREL) },
{ ".sbss", 5, -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE { ".sbss", 5, -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE
+ SHF_V850_GPREL) }, + SHF_V850_GPREL) },
{ ".scommon", 8, -2, SHT_V850_SCOMMON, (SHF_ALLOC + SHF_WRITE { ".scommon", 8, -2, SHT_V850_SCOMMON, (SHF_ALLOC + SHF_WRITE
+ SHF_V850_GPREL) }, + SHF_V850_GPREL) },
{ NULL, 0, 0, 0, 0 } { ".sdata", 6, -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
}; + SHF_V850_GPREL) },
static struct bfd_elf_special_section const
v850_special_sections_t[]=
{
{ ".tdata", 6, -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
+ SHF_V850_EPREL) },
{ ".tbss", 5, -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE { ".tbss", 5, -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE
+ SHF_V850_EPREL) }, + SHF_V850_EPREL) },
{ ".tcommon", 8, -2, SHT_V850_TCOMMON, (SHF_ALLOC + SHF_WRITE { ".tcommon", 8, -2, SHT_V850_TCOMMON, (SHF_ALLOC + SHF_WRITE
+ SHF_V850_R0REL) }, + SHF_V850_R0REL) },
{ NULL, 0, 0, 0, 0 } { ".tdata", 6, -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
}; + SHF_V850_EPREL) },
static struct bfd_elf_special_section const
v850_special_sections_z[]=
{
{ ".zdata", 6, -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
+ SHF_V850_R0REL) },
{ ".zbss", 5, -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE { ".zbss", 5, -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE
+ SHF_V850_R0REL) }, + SHF_V850_R0REL) },
{ ".zcommon", 8, -2, SHT_V850_ZCOMMON, (SHF_ALLOC + SHF_WRITE { ".zcommon", 8, -2, SHT_V850_ZCOMMON, (SHF_ALLOC + SHF_WRITE
+ SHF_V850_R0REL) }, + SHF_V850_R0REL) },
{ ".zdata", 6, -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
+ SHF_V850_R0REL) },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
v850_elf_special_sections[27] = v850_elf_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
v850_special_sections_c, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ v850_elf_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
NULL, /* 'p' */
NULL, /* 'q' */
v850_special_sections_r, /* 'r' */
v850_special_sections_s, /* 's' */
v850_special_sections_t, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
v850_special_sections_z, /* 'z' */
NULL /* other */
};
#define TARGET_LITTLE_SYM bfd_elf32_v850_vec #define TARGET_LITTLE_SYM bfd_elf32_v850_vec
#define TARGET_LITTLE_NAME "elf32-v850" #define TARGET_LITTLE_NAME "elf32-v850"
@ -3135,7 +3096,7 @@ static struct bfd_elf_special_section const *
#define elf_backend_fake_sections v850_elf_fake_sections #define elf_backend_fake_sections v850_elf_fake_sections
#define elf_backend_gc_mark_hook v850_elf_gc_mark_hook #define elf_backend_gc_mark_hook v850_elf_gc_mark_hook
#define elf_backend_gc_sweep_hook v850_elf_gc_sweep_hook #define elf_backend_gc_sweep_hook v850_elf_gc_sweep_hook
#define elf_backend_special_sections v850_elf_special_sections #define elf_backend_get_sec_type_attr v850_elf_get_sec_type_attr
#define elf_backend_can_gc_sections 1 #define elf_backend_can_gc_sections 1
#define elf_backend_rela_normal 1 #define elf_backend_rela_normal 1

View File

@ -9482,57 +9482,31 @@ xtensa_callback_required_dependence (bfd *abfd,
/* The default literal sections should always be marked as "code" (i.e., /* The default literal sections should always be marked as "code" (i.e.,
SHF_EXECINSTR). This is particularly important for the Linux kernel SHF_EXECINSTR). This is particularly important for the Linux kernel
module loader so that the literals are not placed after the text. */ module loader so that the literals are not placed after the text. */
static struct bfd_elf_special_section const static struct bfd_elf_special_section const elf_xtensa_special_sections[] =
xtensa_special_sections_f[]=
{ {
{ ".fini.literal", 13, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR }, { ".fini.literal", 13, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
xtensa_special_sections_i[]=
{
{ ".init.literal", 13, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR }, { ".init.literal", 13, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
xtensa_special_sections_l[]=
{
{ ".literal", 8, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR }, { ".literal", 8, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
elf_xtensa_special_sections[27] = elf_xtensa_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
NULL, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
xtensa_special_sections_f, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ elf_xtensa_special_sections,
xtensa_special_sections_i, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
xtensa_special_sections_l, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
NULL, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
NULL, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
#ifndef ELF_ARCH #ifndef ELF_ARCH
@ -9592,6 +9566,6 @@ static struct bfd_elf_special_section const *
#define elf_backend_reloc_type_class elf_xtensa_reloc_type_class #define elf_backend_reloc_type_class elf_xtensa_reloc_type_class
#define elf_backend_relocate_section elf_xtensa_relocate_section #define elf_backend_relocate_section elf_xtensa_relocate_section
#define elf_backend_size_dynamic_sections elf_xtensa_size_dynamic_sections #define elf_backend_size_dynamic_sections elf_xtensa_size_dynamic_sections
#define elf_backend_special_sections elf_xtensa_special_sections #define elf_backend_get_sec_type_attr elf_xtensa_get_sec_type_attr
#include "elf32-target.h" #include "elf32-target.h"

View File

@ -5162,45 +5162,30 @@ elf64_alpha_reloc_type_class (const Elf_Internal_Rela *rela)
} }
} }
static struct bfd_elf_special_section const static struct bfd_elf_special_section const elf64_alpha_special_sections[] =
alpha_special_sections_s[]=
{ {
{ ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_ALPHA_GPREL },
{ ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_ALPHA_GPREL }, { ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_ALPHA_GPREL },
{ ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_ALPHA_GPREL },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
elf64_alpha_special_sections[27] = elf64_alpha_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
NULL, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ elf64_alpha_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
NULL, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
alpha_special_sections_s, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
/* ECOFF swapping routines. These are used when dealing with the /* ECOFF swapping routines. These are used when dealing with the
.mdebug section, which is in the ECOFF debugging format. Copied .mdebug section, which is in the ECOFF debugging format. Copied
@ -5340,8 +5325,8 @@ static const struct elf_size_info alpha_elf_size_info =
#define elf_backend_size_info \ #define elf_backend_size_info \
alpha_elf_size_info alpha_elf_size_info
#define elf_backend_special_sections \ #define elf_backend_get_sec_type_attr \
elf64_alpha_special_sections elf64_alpha_get_sec_type_attr
/* A few constants that determine how the .plt section is set up. */ /* A few constants that determine how the .plt section is set up. */
#define elf_backend_want_got_plt 0 #define elf_backend_want_got_plt 0

View File

@ -2671,51 +2671,30 @@ elf64_hppa_elf_get_symbol_type (elf_sym, type)
return type; return type;
} }
static struct bfd_elf_special_section const static struct bfd_elf_special_section const elf64_hppa_special_sections[] =
hppa_special_sections_f[]=
{ {
{ ".fini", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, { ".fini", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
hppa_special_sections_i[]=
{
{ ".init", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, { ".init", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
elf64_hppa_special_sections[27] = elf64_hppa_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
NULL, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
hppa_special_sections_f, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ elf64_hppa_special_sections,
hppa_special_sections_i, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
NULL, /* 'f' */
NULL, /* 'q' */
NULL, /* 'r' */
NULL, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
/* The hash bucket size is the standard one, namely 4. */ /* The hash bucket size is the standard one, namely 4. */
@ -2813,7 +2792,7 @@ const struct elf_size_info hppa64_elf_size_info =
#define elf_backend_get_symbol_type elf64_hppa_elf_get_symbol_type #define elf_backend_get_symbol_type elf64_hppa_elf_get_symbol_type
#define elf_backend_reloc_type_class elf64_hppa_reloc_type_class #define elf_backend_reloc_type_class elf64_hppa_reloc_type_class
#define elf_backend_rela_normal 1 #define elf_backend_rela_normal 1
#define elf_backend_special_sections elf64_hppa_special_sections #define elf_backend_get_sec_type_attr elf64_hppa_get_sec_type_attr
#include "elf64-target.h" #include "elf64-target.h"
@ -2822,7 +2801,7 @@ const struct elf_size_info hppa64_elf_size_info =
#undef TARGET_BIG_NAME #undef TARGET_BIG_NAME
#define TARGET_BIG_NAME "elf64-hppa-linux" #define TARGET_BIG_NAME "elf64-hppa-linux"
#undef elf_backend_special_sections #undef elf_backend_get_sec_type_attr
#define INCLUDED_TARGET_FILE 1 #define INCLUDED_TARGET_FILE 1
#include "elf64-target.h" #include "elf64-target.h"

View File

@ -100,7 +100,7 @@ static bfd_vma opd_entry_value
#define elf_backend_reloc_type_class ppc64_elf_reloc_type_class #define elf_backend_reloc_type_class ppc64_elf_reloc_type_class
#define elf_backend_finish_dynamic_sections ppc64_elf_finish_dynamic_sections #define elf_backend_finish_dynamic_sections ppc64_elf_finish_dynamic_sections
#define elf_backend_link_output_symbol_hook ppc64_elf_output_symbol_hook #define elf_backend_link_output_symbol_hook ppc64_elf_output_symbol_hook
#define elf_backend_special_sections ppc64_elf_special_sections #define elf_backend_get_sec_type_attr ppc64_elf_get_sec_type_attr
/* The name of the dynamic interpreter. This is put in the .interp /* The name of the dynamic interpreter. This is put in the .interp
section. */ section. */
@ -2508,61 +2508,34 @@ ppc64_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
/* Add extra PPC sections. */ /* Add extra PPC sections. */
static struct bfd_elf_special_section const static struct bfd_elf_special_section const ppc64_elf_special_sections[]=
ppc64_special_sections_p[]=
{ {
{ ".plt", 4, 0, SHT_NOBITS, 0 }, { ".plt", 4, 0, SHT_NOBITS, 0 },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
ppc64_special_sections_s[]=
{
{ ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE }, { ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 } { ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
};
static struct bfd_elf_special_section const
ppc64_special_sections_t[]=
{
{ ".toc", 4, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, { ".toc", 4, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ ".toc1", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, { ".toc1", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
{ ".tocbss", 7, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE }, { ".tocbss", 7, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
ppc64_elf_special_sections[27]= ppc64_elf_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
NULL, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ ppc64_elf_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
ppc64_special_sections_p, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
ppc64_special_sections_s, /* 's' */
ppc64_special_sections_t, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
struct _ppc64_elf_section_data struct _ppc64_elf_section_data
{ {

View File

@ -4068,44 +4068,29 @@ sh64_elf64_merge_symbol_attribute (struct elf_link_hash_entry *h,
return; return;
} }
static struct bfd_elf_special_section const static struct bfd_elf_special_section const sh64_elf64_special_sections[]=
sh64_special_sections_c[] =
{ {
{ ".cranges", 8, 0, SHT_PROGBITS, 0 }, { ".cranges", 8, 0, SHT_PROGBITS, 0 },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
sh64_elf64_special_sections[27]= sh64_elf64_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
sh64_special_sections_c, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ sh64_elf64_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
NULL, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
NULL, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
#define TARGET_BIG_SYM bfd_elf64_sh64_vec #define TARGET_BIG_SYM bfd_elf64_sh64_vec
#define TARGET_BIG_NAME "elf64-sh64" #define TARGET_BIG_NAME "elf64-sh64"
@ -4165,7 +4150,7 @@ static struct bfd_elf_special_section const *
sh64_elf64_finish_dynamic_symbol sh64_elf64_finish_dynamic_symbol
#define elf_backend_finish_dynamic_sections \ #define elf_backend_finish_dynamic_sections \
sh64_elf64_finish_dynamic_sections sh64_elf64_finish_dynamic_sections
#define elf_backend_special_sections sh64_elf64_special_sections #define elf_backend_get_sec_type_attr sh64_elf64_get_sec_type_attr
#define elf_backend_want_got_plt 1 #define elf_backend_want_got_plt 1
#define elf_backend_plt_readonly 1 #define elf_backend_plt_readonly 1

View File

@ -5050,45 +5050,30 @@ elfNN_ia64_reloc_type_class (rela)
} }
} }
static struct bfd_elf_special_section const static struct bfd_elf_special_section const elfNN_ia64_special_sections[] =
ia64_special_sections_s[]=
{ {
{ ".sbss", 5, -1, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT }, { ".sbss", 5, -1, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT },
{ ".sdata", 6, -1, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT }, { ".sdata", 6, -1, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
static struct bfd_elf_special_section const * static const struct bfd_elf_special_section *
elfNN_ia64_special_sections[27] = elfNN_ia64_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
NULL, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ elfNN_ia64_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
NULL, /* 'l' */
NULL, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
NULL, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
ia64_special_sections_s, /* 's' */
NULL, /* 't' */
NULL, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};
static bfd_boolean static bfd_boolean
elfNN_ia64_object_p (bfd *abfd) elfNN_ia64_object_p (bfd *abfd)
@ -5311,7 +5296,7 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
#define elf_backend_hide_symbol elfNN_ia64_hash_hide_symbol #define elf_backend_hide_symbol elfNN_ia64_hash_hide_symbol
#define elf_backend_reloc_type_class elfNN_ia64_reloc_type_class #define elf_backend_reloc_type_class elfNN_ia64_reloc_type_class
#define elf_backend_rela_normal 1 #define elf_backend_rela_normal 1
#define elf_backend_special_sections elfNN_ia64_special_sections #define elf_backend_get_sec_type_attr elfNN_ia64_get_sec_type_attr
/* FIXME: PR 290: The Intel C compiler generates SHT_IA_64_UNWIND with /* FIXME: PR 290: The Intel C compiler generates SHT_IA_64_UNWIND with
SHF_LINK_ORDER. But it doesn't set theh sh_link or sh_info fields. SHF_LINK_ORDER. But it doesn't set theh sh_link or sh_info fields.

View File

@ -9969,63 +9969,31 @@ _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
return TRUE; return TRUE;
} }
static struct bfd_elf_special_section const struct bfd_elf_special_section const _bfd_mips_elf_special_sections[] =
mips_special_sections_l[]=
{ {
{ ".lit4", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, { ".lit4", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
{ ".lit8", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, { ".lit8", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
mips_special_sections_m[]=
{
{ ".mdebug", 7, 0, SHT_MIPS_DEBUG, 0 }, { ".mdebug", 7, 0, SHT_MIPS_DEBUG, 0 },
{ NULL, 0, 0, 0, 0 }
};
static struct bfd_elf_special_section const
mips_special_sections_s[]=
{
{ ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
{ ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL }, { ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
}; { ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
static struct bfd_elf_special_section const
mips_special_sections_u[]=
{
{ ".ucode", 6, 0, SHT_MIPS_UCODE, 0 }, { ".ucode", 6, 0, SHT_MIPS_UCODE, 0 },
{ NULL, 0, 0, 0, 0 } { NULL, 0, 0, 0, 0 }
}; };
struct bfd_elf_special_section const * const struct bfd_elf_special_section *
_bfd_mips_elf_special_sections[27] = _bfd_mips_elf_get_sec_type_attr (bfd *abfd, asection *sec)
{ {
NULL, /* 'a' */ const struct bfd_elf_special_section const *ssect;
NULL, /* 'b' */
NULL, /* 'c' */ /* See if this is one of the special sections. */
NULL, /* 'd' */ if (sec->name == NULL)
NULL, /* 'e' */ return NULL;
NULL, /* 'f' */
NULL, /* 'g' */ ssect = _bfd_elf_get_special_section (sec->name,
NULL, /* 'h' */ _bfd_mips_elf_special_sections,
NULL, /* 'i' */ sec->use_rela_p);
NULL, /* 'j' */ if (ssect != NULL)
NULL, /* 'k' */ return ssect;
mips_special_sections_l, /* 'l' */
mips_special_sections_m, /* 'm' */ return _bfd_elf_get_sec_type_attr (abfd, sec);
NULL, /* 'n' */ }
NULL, /* 'o' */
NULL, /* 'p' */
NULL, /* 'q' */
NULL, /* 'r' */
mips_special_sections_s, /* 'm' */
NULL, /* 't' */
mips_special_sections_u, /* 'u' */
NULL, /* 'v' */
NULL, /* 'w' */
NULL, /* 'x' */
NULL, /* 'y' */
NULL, /* 'z' */
NULL /* other */
};

View File

@ -127,9 +127,10 @@ extern bfd_boolean _bfd_mips_relax_section
(bfd *, asection *, struct bfd_link_info *, bfd_boolean *); (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
extern bfd_vma _bfd_mips_elf_sign_extend extern bfd_vma _bfd_mips_elf_sign_extend
(bfd_vma, int); (bfd_vma, int);
extern const struct bfd_elf_special_section *_bfd_mips_elf_get_sec_type_attr
(bfd *, asection *);
extern struct bfd_elf_special_section const *_bfd_mips_elf_special_sections[];
#define elf_backend_name_local_section_symbols \ #define elf_backend_name_local_section_symbols \
_bfd_mips_elf_name_local_section_symbols _bfd_mips_elf_name_local_section_symbols
#define elf_backend_special_sections _bfd_mips_elf_special_sections #define elf_backend_get_sec_type_attr _bfd_mips_elf_get_sec_type_attr
#define elf_backend_eh_frame_address_size _bfd_mips_elf_eh_frame_address_size #define elf_backend_eh_frame_address_size _bfd_mips_elf_eh_frame_address_size

View File

@ -331,6 +331,9 @@
#ifndef elf_backend_section_flags #ifndef elf_backend_section_flags
#define elf_backend_section_flags 0 #define elf_backend_section_flags 0
#endif #endif
#ifndef elf_backend_get_sec_type_attr
#define elf_backend_get_sec_type_attr _bfd_elf_get_sec_type_attr
#endif
#ifndef elf_backend_section_from_phdr #ifndef elf_backend_section_from_phdr
#define elf_backend_section_from_phdr _bfd_elf_make_section_from_phdr #define elf_backend_section_from_phdr _bfd_elf_make_section_from_phdr
#endif #endif
@ -506,10 +509,6 @@
#define elf_backend_size_info _bfd_elfNN_size_info #define elf_backend_size_info _bfd_elfNN_size_info
#endif #endif
#ifndef elf_backend_special_sections
#define elf_backend_special_sections NULL
#endif
#ifndef elf_backend_sign_extend_vma #ifndef elf_backend_sign_extend_vma
#define elf_backend_sign_extend_vma 0 #define elf_backend_sign_extend_vma 0
#endif #endif
@ -540,6 +539,7 @@ static const struct elf_backend_data elfNN_bed =
elf_backend_section_processing, elf_backend_section_processing,
elf_backend_section_from_shdr, elf_backend_section_from_shdr,
elf_backend_section_flags, elf_backend_section_flags,
elf_backend_get_sec_type_attr,
elf_backend_section_from_phdr, elf_backend_section_from_phdr,
elf_backend_fake_sections, elf_backend_fake_sections,
elf_backend_section_from_bfd_section, elf_backend_section_from_bfd_section,
@ -591,7 +591,6 @@ static const struct elf_backend_data elfNN_bed =
ELF_MACHINE_ALT1, ELF_MACHINE_ALT1,
ELF_MACHINE_ALT2, ELF_MACHINE_ALT2,
&elf_backend_size_info, &elf_backend_size_info,
elf_backend_special_sections,
elf_backend_got_header_size, elf_backend_got_header_size,
elf_backend_collect, elf_backend_collect,
elf_backend_type_change_ok, elf_backend_type_change_ok,

View File

@ -1,3 +1,10 @@
2005-07-04 Alan Modra <amodra@bigpond.net.au>
PR 1004
* objcopy.c (copy_object): Use bfd_make_section_with_flags.
(write_debugging_info): Likewise.
(setup_section): Use bfd_make_section_anyway_with_flags.
2005-07-01 Steve Ellcey <sje@cup.hp.com> 2005-07-01 Steve Ellcey <sje@cup.hp.com>
* configure.in (AM_BINUTILS_WARNINGS): Add. * configure.in (AM_BINUTILS_WARNINGS): Add.

View File

@ -1290,7 +1290,15 @@ copy_object (bfd *ibfd, bfd *obfd)
{ {
flagword flags; flagword flags;
padd->section = bfd_make_section (obfd, padd->name); pset = find_section_list (padd->name, FALSE);
if (pset != NULL)
pset->used = TRUE;
flags = SEC_HAS_CONTENTS | SEC_READONLY | SEC_DATA;
if (pset != NULL && pset->set_flags)
flags = pset->flags | SEC_HAS_CONTENTS;
padd->section = bfd_make_section_with_flags (obfd, padd->name, flags);
if (padd->section == NULL) if (padd->section == NULL)
{ {
non_fatal (_("can't create section `%s': %s"), non_fatal (_("can't create section `%s': %s"),
@ -1304,21 +1312,6 @@ copy_object (bfd *ibfd, bfd *obfd)
return FALSE; return FALSE;
} }
pset = find_section_list (padd->name, FALSE);
if (pset != NULL)
pset->used = TRUE;
if (pset != NULL && pset->set_flags)
flags = pset->flags | SEC_HAS_CONTENTS;
else
flags = SEC_HAS_CONTENTS | SEC_READONLY | SEC_DATA;
if (! bfd_set_section_flags (obfd, padd->section, flags))
{
bfd_nonfatal (bfd_get_filename (obfd));
return FALSE;
}
if (pset != NULL) if (pset != NULL)
{ {
if (pset->change_vma != CHANGE_IGNORE) if (pset->change_vma != CHANGE_IGNORE)
@ -2001,7 +1994,12 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
name = n; name = n;
} }
osection = bfd_make_section_anyway (obfd, name); if (p != NULL && p->set_flags)
flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC));
else if (strip_symbols == STRIP_NONDEBUG && (flags & SEC_ALLOC) != 0)
flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD);
osection = bfd_make_section_anyway_with_flags (obfd, name, flags);
if (osection == NULL) if (osection == NULL)
{ {
@ -2009,6 +2007,12 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
goto loser; goto loser;
} }
if (strip_symbols == STRIP_NONDEBUG
&& obfd->xvec->flavour == bfd_target_elf_flavour
&& (flags & SEC_ALLOC) != 0
&& (p == NULL || !p->set_flags))
elf_section_type (osection) = SHT_NOBITS;
size = bfd_section_size (ibfd, isection); size = bfd_section_size (ibfd, isection);
if (copy_byte >= 0) if (copy_byte >= 0)
size = (size + interleave - 1) / interleave; size = (size + interleave - 1) / interleave;
@ -2057,21 +2061,6 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
goto loser; goto loser;
} }
if (p != NULL && p->set_flags)
flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC));
else if (strip_symbols == STRIP_NONDEBUG && (flags & SEC_ALLOC) != 0)
{
flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD);
if (obfd->xvec->flavour == bfd_target_elf_flavour)
elf_section_type (osection) = SHT_NOBITS;
}
if (!bfd_set_section_flags (obfd, osection, flags))
{
err = _("flags");
goto loser;
}
/* Copy merge entity size. */ /* Copy merge entity size. */
osection->entsize = isection->entsize; osection->entsize = isection->entsize;
@ -2353,28 +2342,22 @@ write_debugging_info (bfd *obfd, void *dhandle,
bfd_byte *syms, *strings; bfd_byte *syms, *strings;
bfd_size_type symsize, stringsize; bfd_size_type symsize, stringsize;
asection *stabsec, *stabstrsec; asection *stabsec, *stabstrsec;
flagword flags;
if (! write_stabs_in_sections_debugging_info (obfd, dhandle, &syms, if (! write_stabs_in_sections_debugging_info (obfd, dhandle, &syms,
&symsize, &strings, &symsize, &strings,
&stringsize)) &stringsize))
return FALSE; return FALSE;
stabsec = bfd_make_section (obfd, ".stab"); flags = SEC_HAS_CONTENTS | SEC_READONLY | SEC_DEBUGGING;
stabstrsec = bfd_make_section (obfd, ".stabstr"); stabsec = bfd_make_section_with_flags (obfd, ".stab", flags);
stabstrsec = bfd_make_section_with_flags (obfd, ".stabstr", flags);
if (stabsec == NULL if (stabsec == NULL
|| stabstrsec == NULL || stabstrsec == NULL
|| ! bfd_set_section_size (obfd, stabsec, symsize) || ! bfd_set_section_size (obfd, stabsec, symsize)
|| ! bfd_set_section_size (obfd, stabstrsec, stringsize) || ! bfd_set_section_size (obfd, stabstrsec, stringsize)
|| ! bfd_set_section_alignment (obfd, stabsec, 2) || ! bfd_set_section_alignment (obfd, stabsec, 2)
|| ! bfd_set_section_alignment (obfd, stabstrsec, 0) || ! bfd_set_section_alignment (obfd, stabstrsec, 0))
|| ! bfd_set_section_flags (obfd, stabsec,
(SEC_HAS_CONTENTS
| SEC_READONLY
| SEC_DEBUGGING))
|| ! bfd_set_section_flags (obfd, stabstrsec,
(SEC_HAS_CONTENTS
| SEC_READONLY
| SEC_DEBUGGING)))
{ {
non_fatal (_("%s: can't create debugging section: %s"), non_fatal (_("%s: can't create debugging section: %s"),
bfd_get_filename (obfd), bfd_get_filename (obfd),

View File

@ -1,3 +1,9 @@
2005-07-04 Alan Modra <amodra@bigpond.net.au>
PR 1004
* config/obj-elf.c (obj_elf_change_section): Use backend
get_sec_type_attr.
2005-07-01 Jan Beulich <jbeulich@novell.com> 2005-07-01 Jan Beulich <jbeulich@novell.com>
* config/tc-ia64.c (line_separator_chars): Add '{' and '}'. * config/tc-ia64.c (line_separator_chars): Add '{' and '}'.

View File

@ -520,6 +520,7 @@ obj_elf_change_section (const char *name,
asection *old_sec; asection *old_sec;
segT sec; segT sec;
flagword flags; flagword flags;
const struct elf_backend_data *bed;
const struct bfd_elf_special_section *ssect; const struct bfd_elf_special_section *ssect;
#ifdef md_flush_pending_output #ifdef md_flush_pending_output
@ -551,7 +552,8 @@ obj_elf_change_section (const char *name,
else else
sec = subseg_force_new (name, 0); sec = subseg_force_new (name, 0);
ssect = _bfd_elf_get_sec_type_attr (stdoutput, name); bed = get_elf_backend_data (stdoutput);
ssect = (*bed->get_sec_type_attr) (stdoutput, sec);
if (ssect != NULL) if (ssect != NULL)
{ {