summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2010-06-15 23:10:10 +0000
committerJoseph Myers <joseph@codesourcery.com>2010-06-15 23:10:10 +0000
commitdba816e7cd0b49cedefa348ef217515154b8e86b (patch)
treecd095eb7c5ebd0a68e07ce6b064b28f3549267f7
parentd279ad3191363cbafc699c74a4a93b7b2b6a8487 (diff)
downloadbinutils-redhat-dba816e7cd0b49cedefa348ef217515154b8e86b.tar.gz
* 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.
-rw-r--r--bfd/ChangeLog13
-rw-r--r--bfd/elf-attrs.c14
-rw-r--r--bfd/elf-bfd.h15
-rw-r--r--bfd/elf32-arm.c6
4 files changed, 35 insertions, 13 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 3cad9e845c..d9daae0e3e 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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.
diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c
index c514ead2eb..b9d3bf2fe4 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 226b95fe86..37e637ca66 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 df259774e0..53a084665d 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)