* elf-bfd.h (LEAST_KNOWN_OBJ_ATTRIBUTE): Define.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 15 Jun 2010 23:10:10 +0000 (23:10 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 15 Jun 2010 23:10:10 +0000 (23:10 +0000)
(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
bfd/elf-attrs.c
bfd/elf-bfd.h
bfd/elf32-arm.c

index 3cad9e845c361298ab9fa1fedd8683dad878970e..d9daae0e3e7bf3b9d6e94ec167e7030622c52c89 100644 (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.
index c514ead2ebb0681e8c2bd81cdae3c6a667f925ed..b9d3bf2fe4eca12e81476090b38b2e5fae3fa4ae 100644 (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;
index 226b95fe86ae700e56d65e9d95fdd202ab7ec20a..37e637ca66556bdbe515e6975d0161d899146117 100644 (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
 
index df259774e0e694afcde236dbe0c4915eb059c3d7..53a084665dcbd5a709f52abaa0d805fb0d2d99c3 100644 (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)