* elf-bfd.h (LEAST_KNOWN_OBJ_ATTRIBUTE): Define.

(struct elf_backend_data): Update comment on obj_attrs_order.
	* elf-attrs.c (vendor_obj_attr_size, vendor_set_obj_attr_contents,
	_bfd_elf_copy_obj_attributes): Use LEAST_KNOWN_OBJ_ATTRIBUTE
	instead of hardcoded 4.
	* elf32-arm.c (elf32_arm_obj_attrs_order): Use
	LEAST_KNOWN_OBJ_ATTRIBUTE and LEAST_KNOWN_OBJ_ATTRIBUTE + 1
	instead of hardcoded 4 and 5.
	(elf32_arm_merge_eabi_attributes): Use LEAST_KNOWN_OBJ_ATTRIBUTE
	instead of hardcoded 4.
This commit is contained in:
Joseph Myers 2010-06-15 23:10:10 +00:00
parent 91ff43fe2d
commit 3de4a297ec
4 changed files with 35 additions and 13 deletions

View file

@ -1,3 +1,16 @@
2010-06-15 Joseph Myers <joseph@codesourcery.com>
* elf-bfd.h (LEAST_KNOWN_OBJ_ATTRIBUTE): Define.
(struct elf_backend_data): Update comment on obj_attrs_order.
* elf-attrs.c (vendor_obj_attr_size, vendor_set_obj_attr_contents,
_bfd_elf_copy_obj_attributes): Use LEAST_KNOWN_OBJ_ATTRIBUTE
instead of hardcoded 4.
* elf32-arm.c (elf32_arm_obj_attrs_order): Use
LEAST_KNOWN_OBJ_ATTRIBUTE and LEAST_KNOWN_OBJ_ATTRIBUTE + 1
instead of hardcoded 4 and 5.
(elf32_arm_merge_eabi_attributes): Use LEAST_KNOWN_OBJ_ATTRIBUTE
instead of hardcoded 4.
2010-06-14 Kevin Buettner <kevinb@redhat.com>
* elf32-h8300.c (elf_symbol_leading_char): Define.

View file

@ -1,5 +1,5 @@
/* ELF attributes support (based on ARM EABI attributes).
Copyright 2005, 2006, 2007, 2009
Copyright 2005, 2006, 2007, 2009, 2010
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@ -96,7 +96,7 @@ vendor_obj_attr_size (bfd *abfd, int vendor)
attr = elf_known_obj_attributes (abfd)[vendor];
size = 0;
for (i = 4; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
size += obj_attr_size (i, &attr[i]);
for (list = elf_other_obj_attributes (abfd)[vendor];
@ -188,7 +188,7 @@ vendor_set_obj_attr_contents (bfd *abfd, bfd_byte *contents, bfd_vma size,
p += 4;
attr = elf_known_obj_attributes (abfd)[vendor];
for (i = 4; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
{
int tag = i;
if (get_elf_backend_data (abfd)->obj_attrs_order)
@ -349,9 +349,11 @@ _bfd_elf_copy_obj_attributes (bfd *ibfd, bfd *obfd)
for (vendor = OBJ_ATTR_FIRST; vendor <= OBJ_ATTR_LAST; vendor++)
{
in_attr = &elf_known_obj_attributes (ibfd)[vendor][4];
out_attr = &elf_known_obj_attributes (obfd)[vendor][4];
for (i = 4; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
in_attr
= &elf_known_obj_attributes (ibfd)[vendor][LEAST_KNOWN_OBJ_ATTRIBUTE];
out_attr
= &elf_known_obj_attributes (obfd)[vendor][LEAST_KNOWN_OBJ_ATTRIBUTE];
for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
{
out_attr->type = in_attr->type;
out_attr->i = in_attr->i;

View file

@ -1245,10 +1245,11 @@ struct elf_backend_data
/* The section type to use for an attributes section. */
unsigned int obj_attrs_section_type;
/* This function determines the order in which any attributes are written.
It must be defined for input in the range 4..NUM_KNOWN_OBJ_ATTRIBUTES-1
(this range is used in order to make unity easy). The returned value is
the actual tag number to place in the input position. */
/* This function determines the order in which any attributes are
written. It must be defined for input in the range
LEAST_KNOWN_OBJ_ATTRIBUTE..NUM_KNOWN_OBJ_ATTRIBUTES-1 (this range
is used in order to make unity easy). The returned value is the
actual tag number to place in the input position. */
int (*obj_attrs_order) (int);
/* This is TRUE if the linker should act like collect and gather
@ -1412,6 +1413,12 @@ struct bfd_elf_section_data
#define get_elf_backend_data(abfd) \
xvec_get_elf_backend_data ((abfd)->xvec)
/* The least object attributes (within an attributes subsection) known
for any target. Some code assumes that the value 0 is not used and
the field for that attribute can instead be used as a marker to
indicate that attributes have been initialized. */
#define LEAST_KNOWN_OBJ_ATTRIBUTE 4
/* The maximum number of known object attributes for any target. */
#define NUM_KNOWN_OBJ_ATTRIBUTES 71

View file

@ -9624,9 +9624,9 @@ elf32_arm_obj_attrs_arg_type (int tag)
static int
elf32_arm_obj_attrs_order (int num)
{
if (num == 4)
if (num == LEAST_KNOWN_OBJ_ATTRIBUTE)
return Tag_conformance;
if (num == 5)
if (num == LEAST_KNOWN_OBJ_ATTRIBUTE + 1)
return Tag_nodefaults;
if ((num - 2) < Tag_nodefaults)
return num - 2;
@ -9932,7 +9932,7 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
}
}
for (i = 4; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
{
/* Merge this attribute with existing attributes. */
switch (i)