From 3de4a297ec739ba0111d80a5b9060d9bffc2d899 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 15 Jun 2010 23:10:10 +0000 Subject: [PATCH] * 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. --- bfd/ChangeLog | 13 +++++++++++++ bfd/elf-attrs.c | 14 ++++++++------ bfd/elf-bfd.h | 15 +++++++++++---- bfd/elf32-arm.c | 6 +++--- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3cad9e845c3..d9daae0e3e7 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,16 @@ +2010-06-15 Joseph Myers + + * 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 * elf32-h8300.c (elf_symbol_leading_char): Define. diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c index c514ead2ebb..b9d3bf2fe4e 100644 --- a/bfd/elf-attrs.c +++ b/bfd/elf-attrs.c @@ -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; diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 226b95fe86a..37e637ca665 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -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 diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index df259774e0e..53a084665dc 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -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) -- 2.30.2