* 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> 2010-06-14 Kevin Buettner <kevinb@redhat.com>
* elf32-h8300.c (elf_symbol_leading_char): Define. * elf32-h8300.c (elf_symbol_leading_char): Define.

View file

@ -1,5 +1,5 @@
/* ELF attributes support (based on ARM EABI attributes). /* ELF attributes support (based on ARM EABI attributes).
Copyright 2005, 2006, 2007, 2009 Copyright 2005, 2006, 2007, 2009, 2010
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library. 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]; attr = elf_known_obj_attributes (abfd)[vendor];
size = 0; 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]); size += obj_attr_size (i, &attr[i]);
for (list = elf_other_obj_attributes (abfd)[vendor]; 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; p += 4;
attr = elf_known_obj_attributes (abfd)[vendor]; 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; int tag = i;
if (get_elf_backend_data (abfd)->obj_attrs_order) 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++) for (vendor = OBJ_ATTR_FIRST; vendor <= OBJ_ATTR_LAST; vendor++)
{ {
in_attr = &elf_known_obj_attributes (ibfd)[vendor][4]; in_attr
out_attr = &elf_known_obj_attributes (obfd)[vendor][4]; = &elf_known_obj_attributes (ibfd)[vendor][LEAST_KNOWN_OBJ_ATTRIBUTE];
for (i = 4; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++) 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->type = in_attr->type;
out_attr->i = in_attr->i; 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. */ /* The section type to use for an attributes section. */
unsigned int obj_attrs_section_type; unsigned int obj_attrs_section_type;
/* This function determines the order in which any attributes are written. /* This function determines the order in which any attributes are
It must be defined for input in the range 4..NUM_KNOWN_OBJ_ATTRIBUTES-1 written. It must be defined for input in the range
(this range is used in order to make unity easy). The returned value is LEAST_KNOWN_OBJ_ATTRIBUTE..NUM_KNOWN_OBJ_ATTRIBUTES-1 (this range
the actual tag number to place in the input position. */ 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); int (*obj_attrs_order) (int);
/* This is TRUE if the linker should act like collect and gather /* 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) \ #define get_elf_backend_data(abfd) \
xvec_get_elf_backend_data ((abfd)->xvec) 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. */ /* The maximum number of known object attributes for any target. */
#define NUM_KNOWN_OBJ_ATTRIBUTES 71 #define NUM_KNOWN_OBJ_ATTRIBUTES 71

View file

@ -9624,9 +9624,9 @@ elf32_arm_obj_attrs_arg_type (int tag)
static int static int
elf32_arm_obj_attrs_order (int num) elf32_arm_obj_attrs_order (int num)
{ {
if (num == 4) if (num == LEAST_KNOWN_OBJ_ATTRIBUTE)
return Tag_conformance; return Tag_conformance;
if (num == 5) if (num == LEAST_KNOWN_OBJ_ATTRIBUTE + 1)
return Tag_nodefaults; return Tag_nodefaults;
if ((num - 2) < Tag_nodefaults) if ((num - 2) < Tag_nodefaults)
return num - 2; 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. */ /* Merge this attribute with existing attributes. */
switch (i) switch (i)