bfd:
authorJoseph Myers <joseph@codesourcery.com>
Wed, 16 Jun 2010 00:36:04 +0000 (00:36 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 16 Jun 2010 00:36:04 +0000 (00:36 +0000)
* elf-bfd.h (LEAST_KNOWN_OBJ_ATTRIBUTE): Decrease to 2.
* elf32-tic6x.c (elf32_tic6x_obj_attrs_arg_type,
elf32_tic6x_merge_arch_attributes, elf32_tic6x_merge_attributes,
elf32_tic6x_merge_private_bfd_data): New.
(bfd_elf32_bfd_merge_private_bfd_data,
elf_backend_obj_attrs_arg_type, elf_backend_obj_attrs_section,
elf_backend_obj_attrs_section_type, elf_backend_obj_attrs_vendor):
Define.
* elf32-tic6x.h (elf32_tic6x_merge_arch_attributes): Declare.

binutils:
* readelf.c (display_tic6x_attribute, process_tic6x_specific):
New.
(process_arch_specific): Call process_tic6x_specific for
EM_TI_C6000.

gas:
* config/tc-tic6x.c: Include elf/tic6x.h.
(tic6x_arch_attribute, tic6x_seen_insns): New.
(tic6x_arch_table, tic6x_arches): Add attribute values.
(tic6x_use_arch): Handle attribute settings.
(tic6x_attributes_set_explicitly, s_tic6x_c6xabi_attribute,
tic6x_attribute_table, tic6x_attributes,
tic6x_convert_symbolic_attribute): New.
(md_pseudo_table): Add c6xabi_attribute.
(md_assemble): Set tic6x_seen_insns and tic6x_arch_attribute.
(tic6x_set_attribute_int, tic6x_set_attributes): New.
(tic6x_end): Call tic6x_set_attributes.
* config/tc-tic6x.h (CONVERT_SYMBOLIC_ATTRIBUTE): Define.
(tic6x_convert_symbolic_attribute): Declare.

gas/testsuite:
* gas/elf/elf.exp: Set target_machine for tic6x-*-*.
* gas/elf/section2.e-tic6x, gas/tic6x/attr-arch-directive-1.d,
gas/tic6x/attr-arch-directive-1.s,
gas/tic6x/attr-arch-directive-2.d,
gas/tic6x/attr-arch-directive-2.s,
gas/tic6x/attr-arch-directive-3.d,
gas/tic6x/attr-arch-directive-3.s,
gas/tic6x/attr-arch-directive-4.d,
gas/tic6x/attr-arch-directive-4.s,
gas/tic6x/attr-arch-directive-5.d,
gas/tic6x/attr-arch-directive-5.s,
gas/tic6x/attr-arch-opts-c62x.d, gas/tic6x/attr-arch-opts-c64x+.d,
gas/tic6x/attr-arch-opts-c64x.d, gas/tic6x/attr-arch-opts-c674x.d,
gas/tic6x/attr-arch-opts-c67x+.d, gas/tic6x/attr-arch-opts-c67x.d,
gas/tic6x/attr-arch-opts-none-1.d,
gas/tic6x/attr-arch-opts-none-2.d,
gas/tic6x/attr-arch-opts-override-1.d,
gas/tic6x/attr-arch-opts-override-2.d, gas/tic6x/empty.s: New.

include/elf:
* tic6x-attrs.h: New.
* tic6x.h: Include elf/tic6x-attrs.h for attribute table.
(C6XABI_Tag_CPU_arch_none, C6XABI_Tag_CPU_arch_C62X,
C6XABI_Tag_CPU_arch_C67X, C6XABI_Tag_CPU_arch_C67XP,
C6XABI_Tag_CPU_arch_C64X, C6XABI_Tag_CPU_arch_C64XP,
C6XABI_Tag_CPU_arch_C674X): Define.

ld:
* emulparams/elf32_tic6x_le.sh (ATTRS_SECTIONS): Define.

ld/testsuite:
* ld-elf/orphan3.d: Allow section names starting '_'.
* ld-tic6x/attr-arch-c62x-c62x.d, ld-tic6x/attr-arch-c62x-c64x+.d,
ld-tic6x/attr-arch-c62x-c64x.d, ld-tic6x/attr-arch-c62x-c674x.d,
ld-tic6x/attr-arch-c62x-c67x+.d, ld-tic6x/attr-arch-c62x-c67x.d,
ld-tic6x/attr-arch-c62x.s, ld-tic6x/attr-arch-c64x+-c62x.d,
ld-tic6x/attr-arch-c64x+-c64x+.d, ld-tic6x/attr-arch-c64x+-c64x.d,
ld-tic6x/attr-arch-c64x+-c674x.d,
ld-tic6x/attr-arch-c64x+-c67x+.d, ld-tic6x/attr-arch-c64x+-c67x.d,
ld-tic6x/attr-arch-c64x+.s, ld-tic6x/attr-arch-c64x-c62x.d,
ld-tic6x/attr-arch-c64x-c64x+.d, ld-tic6x/attr-arch-c64x-c64x.d,
ld-tic6x/attr-arch-c64x-c674x.d, ld-tic6x/attr-arch-c64x-c67x+.d,
ld-tic6x/attr-arch-c64x-c67x.d, ld-tic6x/attr-arch-c64x.s,
ld-tic6x/attr-arch-c674x-c62x.d, ld-tic6x/attr-arch-c674x-c64x+.d,
ld-tic6x/attr-arch-c674x-c64x.d, ld-tic6x/attr-arch-c674x-c674x.d,
ld-tic6x/attr-arch-c674x-c67x+.d, ld-tic6x/attr-arch-c674x-c67x.d,
ld-tic6x/attr-arch-c674x.s, ld-tic6x/attr-arch-c67x+-c62x.d,
ld-tic6x/attr-arch-c67x+-c64x+.d, ld-tic6x/attr-arch-c67x+-c64x.d,
ld-tic6x/attr-arch-c67x+-c674x.d,
ld-tic6x/attr-arch-c67x+-c67x+.d, ld-tic6x/attr-arch-c67x+-c67x.d,
ld-tic6x/attr-arch-c67x+.s, ld-tic6x/attr-arch-c67x-c62x.d,
ld-tic6x/attr-arch-c67x-c64x+.d, ld-tic6x/attr-arch-c67x-c64x.d,
ld-tic6x/attr-arch-c67x-c674x.d, ld-tic6x/attr-arch-c67x-c67x+.d,
ld-tic6x/attr-arch-c67x-c67x.d, ld-tic6x/attr-arch-c67x.s: New.

82 files changed:
bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf32-tic6x.c
bfd/elf32-tic6x.h
binutils/ChangeLog
binutils/readelf.c
gas/ChangeLog
gas/config/tc-tic6x.c
gas/config/tc-tic6x.h
gas/testsuite/ChangeLog
gas/testsuite/gas/elf/elf.exp
gas/testsuite/gas/elf/section2.e-tic6x [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-directive-1.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-directive-1.s [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-directive-2.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-directive-2.s [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-directive-3.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-directive-3.s [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-directive-4.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-directive-4.s [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-directive-5.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-directive-5.s [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-opts-c62x.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-opts-c64x+.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-opts-c64x.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-opts-c674x.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-opts-c67x+.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-opts-c67x.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-opts-none-1.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-opts-none-2.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-opts-override-1.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/attr-arch-opts-override-2.d [new file with mode: 0644]
gas/testsuite/gas/tic6x/empty.s [new file with mode: 0644]
include/elf/ChangeLog
include/elf/tic6x-attrs.h [new file with mode: 0644]
include/elf/tic6x.h
ld/ChangeLog
ld/emulparams/elf32_tic6x_le.sh
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/orphan3.d
ld/testsuite/ld-tic6x/attr-arch-c62x-c62x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c62x-c64x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c62x-c64x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c62x-c674x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c62x-c67x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c62x-c67x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c62x.s [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x+-c62x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x+-c674x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x+.s [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x-c62x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x-c64x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x-c64x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x-c674x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x-c67x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x-c67x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c64x.s [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c674x-c62x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c674x-c64x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c674x-c64x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c674x-c674x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c674x-c67x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c674x-c67x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c674x.s [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x+-c62x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x+-c674x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x+.s [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x-c62x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x-c64x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x-c64x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x-c674x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x-c67x+.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x-c67x.d [new file with mode: 0644]
ld/testsuite/ld-tic6x/attr-arch-c67x.s [new file with mode: 0644]

index d9daae0e3e7bf3b9d6e94ec167e7030622c52c89..9f4bccbb2d26a80b6a5dfd12bd8f6fe060da658a 100644 (file)
@@ -1,3 +1,15 @@
+2010-06-15  Joseph Myers  <joseph@codesourcery.com>
+
+       * elf-bfd.h (LEAST_KNOWN_OBJ_ATTRIBUTE): Decrease to 2.
+       * elf32-tic6x.c (elf32_tic6x_obj_attrs_arg_type,
+       elf32_tic6x_merge_arch_attributes, elf32_tic6x_merge_attributes,
+       elf32_tic6x_merge_private_bfd_data): New.
+       (bfd_elf32_bfd_merge_private_bfd_data,
+       elf_backend_obj_attrs_arg_type, elf_backend_obj_attrs_section,
+       elf_backend_obj_attrs_section_type, elf_backend_obj_attrs_vendor):
+       Define.
+       * elf32-tic6x.h (elf32_tic6x_merge_arch_attributes): Declare.
+
 2010-06-15  Joseph Myers  <joseph@codesourcery.com>
 
        * elf-bfd.h (LEAST_KNOWN_OBJ_ATTRIBUTE): Define.
index 37e637ca66556bdbe515e6975d0161d899146117..0b21e2aa95b445323781a53f7870ced8b5280519 100644 (file)
@@ -1417,7 +1417,7 @@ struct bfd_elf_section_data
    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
+#define LEAST_KNOWN_OBJ_ATTRIBUTE 2
 
 /* The maximum number of known object attributes for any target.  */
 #define NUM_KNOWN_OBJ_ATTRIBUTES 71
index 73fb706123a359d8837a36313ef77b25511a827a..dc837fba2369ab37960f15abe7ddf39e14fe0944 100644 (file)
@@ -1664,6 +1664,89 @@ elf32_tic6x_relocate_section (bfd *output_bfd,
   return ok;
 }
 
+static int
+elf32_tic6x_obj_attrs_arg_type (int tag)
+{
+  if (tag == Tag_compatibility)
+    return ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL;
+  else
+    /* Correct for known attributes, arbitrary for others.  */
+    return ATTR_TYPE_FLAG_INT_VAL;
+}
+
+/* Merge the Tag_C6XABI_Tag_CPU_arch attribute values ARCH1 and ARCH2
+   and return the merged value.  At present, all merges succeed, so no
+   return value for errors is defined.  */
+
+int
+elf32_tic6x_merge_arch_attributes (int arch1, int arch2)
+{
+  int min_arch, max_arch;
+
+  min_arch = (arch1 < arch2 ? arch1 : arch2);
+  max_arch = (arch1 > arch2 ? arch1 : arch2);
+
+  /* In most cases, the numerically greatest value is the correct
+     merged value, but merging C64 and C67 results in C674X.  */
+  if ((min_arch == C6XABI_Tag_CPU_arch_C67X
+       || min_arch == C6XABI_Tag_CPU_arch_C67XP)
+      && (max_arch == C6XABI_Tag_CPU_arch_C64X
+         || max_arch == C6XABI_Tag_CPU_arch_C64XP))
+    return C6XABI_Tag_CPU_arch_C674X;
+
+  return max_arch;
+}
+
+/* Merge attributes from IBFD and OBFD, returning TRUE if the merge
+   succeeded, FALSE otherwise.  */
+
+static bfd_boolean
+elf32_tic6x_merge_attributes (bfd *ibfd, bfd *obfd)
+{
+  obj_attribute *in_attr;
+  obj_attribute *out_attr;
+
+  if (!elf_known_obj_attributes_proc (obfd)[0].i)
+    {
+      /* This is the first object.  Copy the attributes.  */
+      _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
+      out_attr = elf_known_obj_attributes_proc (obfd);
+
+      /* Use the Tag_null value to indicate the attributes have been
+        initialized.  */
+      out_attr[0].i = 1;
+
+      return TRUE;
+    }
+
+  in_attr = elf_known_obj_attributes_proc (ibfd);
+  out_attr = elf_known_obj_attributes_proc (obfd);
+
+  /* No specification yet for handling of unknown attributes, so just
+     ignore them and handle known ones.  */
+  out_attr[Tag_C6XABI_Tag_CPU_arch].i
+    = elf32_tic6x_merge_arch_attributes (in_attr[Tag_C6XABI_Tag_CPU_arch].i,
+                                        out_attr[Tag_C6XABI_Tag_CPU_arch].i);
+
+  /* Merge Tag_compatibility attributes and any common GNU ones.  */
+  _bfd_elf_merge_object_attributes (ibfd, obfd);
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf32_tic6x_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
+{
+  if (!_bfd_generic_verify_endian_match (ibfd, obfd))
+    return FALSE;
+
+  if (!elf32_tic6x_merge_attributes (ibfd, obfd))
+    return FALSE;
+
+  return TRUE;
+}
+
 
 #define TARGET_LITTLE_SYM      bfd_elf32_tic6x_le_vec
 #define TARGET_LITTLE_NAME     "elf32-tic6x-le"
@@ -1674,12 +1757,17 @@ elf32_tic6x_relocate_section (bfd *output_bfd,
 #define ELF_MAXPAGESIZE                1
 #define bfd_elf32_bfd_reloc_type_lookup elf32_tic6x_reloc_type_lookup
 #define bfd_elf32_bfd_reloc_name_lookup elf32_tic6x_reloc_name_lookup
+#define bfd_elf32_bfd_merge_private_bfd_data   elf32_tic6x_merge_private_bfd_data
 #define bfd_elf32_mkobject             elf32_tic6x_mkobject
 #define bfd_elf32_new_section_hook     elf32_tic6x_new_section_hook
 #define elf_backend_can_gc_sections    1
 #define elf_backend_default_use_rela_p 1
 #define elf_backend_may_use_rel_p      1
 #define elf_backend_may_use_rela_p     1
+#define elf_backend_obj_attrs_arg_type elf32_tic6x_obj_attrs_arg_type
+#define elf_backend_obj_attrs_section  "__TI_build_attributes"
+#define elf_backend_obj_attrs_section_type     SHT_C6000_ATTRIBUTES
+#define elf_backend_obj_attrs_vendor   "c6xabi"
 #define elf_backend_rela_normal                1
 #define elf_backend_relocate_section   elf32_tic6x_relocate_section
 #define elf_info_to_howto              elf32_tic6x_info_to_howto
index dfb488c731a5162fd39f297f19d57e25d1ae25ba..e8df4e2ca729cd00490b5d9549012ac56d0bc0e2 100644 (file)
@@ -19,6 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+extern int elf32_tic6x_merge_arch_attributes (int, int);
+
 /* This function is provided for use from the assembler.  */
 
 extern void elf32_tic6x_set_use_rela_p (bfd *, bfd_boolean);
index 4eb958b3fd845874d915b83447450541bfdfc8c0..0908d6a895ec1468f0e429b5b3395a0d69f5ebc1 100644 (file)
@@ -1,3 +1,10 @@
+2010-06-15  Joseph Myers  <joseph@codesourcery.com>
+
+       * readelf.c (display_tic6x_attribute, process_tic6x_specific):
+       New.
+       (process_arch_specific): Call process_tic6x_specific for
+       EM_TI_C6000.
+
 2010-06-11  H.J. Lu  <hongjiu.lu@intel.com>
 
        * readelf.c (dump_ia64_vms_dynamic_fixups): Cast to unsigned long
index dc06078584f0b8067d7613aa3b29bc296e4fea22..d4f47ca731852abaac07a063bdfbfb95589ce779 100644 (file)
@@ -10641,6 +10641,73 @@ display_mips_gnu_attribute (unsigned char * p, int tag)
   return p;
 }
 
+static unsigned char *
+display_tic6x_attribute (unsigned char * p)
+{
+  int tag;
+  unsigned int len;
+  int val;
+
+  tag = read_uleb128 (p, &len);
+  p += len;
+
+  switch (tag)
+    {
+    case Tag_C6XABI_Tag_CPU_arch:
+      val = read_uleb128 (p, &len);
+      p += len;
+      printf ("  Tag_C6XABI_Tag_CPU_arch: ");
+
+      switch (val)
+       {
+       case C6XABI_Tag_CPU_arch_none:
+         printf (_("None\n"));
+         break;
+       case C6XABI_Tag_CPU_arch_C62X:
+         printf ("C62x\n");
+         break;
+       case C6XABI_Tag_CPU_arch_C67X:
+         printf ("C67x\n");
+         break;
+       case C6XABI_Tag_CPU_arch_C67XP:
+         printf ("C67x+\n");
+         break;
+       case C6XABI_Tag_CPU_arch_C64X:
+         printf ("C64x\n");
+         break;
+       case C6XABI_Tag_CPU_arch_C64XP:
+         printf ("C64x+\n");
+         break;
+       case C6XABI_Tag_CPU_arch_C674X:
+         printf ("C674x\n");
+         break;
+       default:
+         printf ("??? (%d)\n", val);
+         break;
+       }
+      return p;
+
+    case 32:
+      /* Tag_compatibility - treated as generic by binutils for now
+        although not currently specified for C6X.  */
+      val = read_uleb128 (p, &len);
+      p += len;
+      printf (_("flag = %d, vendor = %s\n"), val, p);
+      p += strlen ((char *) p) + 1;
+      return p;
+    }
+
+  printf ("  Tag_unknown_%d: ", tag);
+
+  /* No general documentation of handling unknown attributes, treat as
+     ULEB128 for now.  */
+  val = read_uleb128 (p, &len);
+  p += len;
+  printf ("%d (0x%x)\n", val, val);
+
+  return p;
+}
+
 static int
 process_attributes (FILE * file,
                    const char * public_name,
@@ -10797,6 +10864,13 @@ process_power_specific (FILE * file)
                             display_power_gnu_attribute);
 }
 
+static int
+process_tic6x_specific (FILE * file)
+{
+  return process_attributes (file, "c6xabi", SHT_C6000_ATTRIBUTES,
+                            display_tic6x_attribute, NULL);
+}
+
 /* DATA points to the contents of a MIPS GOT that starts at VMA PLTGOT.
    Print the Address, Access and Initial fields of an entry at VMA ADDR
    and return the VMA of the next entry.  */
@@ -11867,6 +11941,9 @@ process_arch_specific (FILE * file)
     case EM_PPC:
       return process_power_specific (file);
       break;
+    case EM_TI_C6000:
+      return process_tic6x_specific (file);
+      break;
     default:
       break;
     }
index 821955e4c41308a400e2eb0bfacbace753a4a748..1bce7a45236b3df96cd0fce10f54ff3c4a7390ef 100644 (file)
@@ -1,3 +1,19 @@
+2010-06-15  Joseph Myers  <joseph@codesourcery.com>
+
+       * config/tc-tic6x.c: Include elf/tic6x.h.
+       (tic6x_arch_attribute, tic6x_seen_insns): New.
+       (tic6x_arch_table, tic6x_arches): Add attribute values.
+       (tic6x_use_arch): Handle attribute settings.
+       (tic6x_attributes_set_explicitly, s_tic6x_c6xabi_attribute,
+       tic6x_attribute_table, tic6x_attributes,
+       tic6x_convert_symbolic_attribute): New.
+       (md_pseudo_table): Add c6xabi_attribute.
+       (md_assemble): Set tic6x_seen_insns and tic6x_arch_attribute.
+       (tic6x_set_attribute_int, tic6x_set_attributes): New.
+       (tic6x_end): Call tic6x_set_attributes.
+       * config/tc-tic6x.h (CONVERT_SYMBOLIC_ATTRIBUTE): Define.
+       (tic6x_convert_symbolic_attribute): Declare.
+
 2010-06-14  Alan Modra  <amodra@gmail.com>
 
        * config/tc-ppc.c (md_assemble): Emit APUinfo section for
index 5e63c8bd2b6572df2ab48658a29673177f76f241..9c40c15a3e9db07167d4a078179389c694553d6f 100644 (file)
@@ -24,6 +24,7 @@
 #include "safe-ctype.h"
 #include "subsegs.h"
 #include "opcode/tic6x.h"
+#include "elf/tic6x.h"
 #include "elf32-tic6x.h"
 
 /* Truncate and sign-extend at 32 bits, so that building on a 64-bit
@@ -81,6 +82,15 @@ static unsigned short tic6x_arch_enable = (TIC6X_INSN_C62X
    (architecture, as modified by other options).  */
 static unsigned short tic6x_features;
 
+/* The architecture attribute value, or C6XABI_Tag_CPU_arch_none if
+   not yet set.  */
+static int tic6x_arch_attribute = C6XABI_Tag_CPU_arch_none;
+
+/* Whether any instructions at all have been seen.  Once any
+   instructions have been seen, architecture attributes merge into the
+   previous attribute value rather than replacing it.  */
+static bfd_boolean tic6x_seen_insns = FALSE;
+
 /* The number of registers in each register file supported by the
    current architecture.  */
 static unsigned int tic6x_num_registers;
@@ -105,21 +115,26 @@ static bfd_boolean tic6x_generate_rela = TRUE;
 typedef struct
 {
   const char *arch;
+  int attr;
   unsigned short features;
 } tic6x_arch_table;
 static const tic6x_arch_table tic6x_arches[] =
   {
-    { "c62x", TIC6X_INSN_C62X },
-    { "c64x", TIC6X_INSN_C62X | TIC6X_INSN_C64X },
-    { "c64x+", TIC6X_INSN_C62X | TIC6X_INSN_C64X | TIC6X_INSN_C64XP },
-    { "c67x", TIC6X_INSN_C62X | TIC6X_INSN_C67X },
-    { "c67x+", TIC6X_INSN_C62X | TIC6X_INSN_C67X | TIC6X_INSN_C67XP },
-    { "c674x", (TIC6X_INSN_C62X
-               | TIC6X_INSN_C64X
-               | TIC6X_INSN_C64XP
-               | TIC6X_INSN_C67X
-               | TIC6X_INSN_C67XP
-               | TIC6X_INSN_C674X) }
+    { "c62x", C6XABI_Tag_CPU_arch_C62X, TIC6X_INSN_C62X },
+    { "c64x", C6XABI_Tag_CPU_arch_C64X, TIC6X_INSN_C62X | TIC6X_INSN_C64X },
+    { "c64x+", C6XABI_Tag_CPU_arch_C64XP, (TIC6X_INSN_C62X
+                                          | TIC6X_INSN_C64X
+                                          | TIC6X_INSN_C64XP) },
+    { "c67x", C6XABI_Tag_CPU_arch_C67X, TIC6X_INSN_C62X | TIC6X_INSN_C67X },
+    { "c67x+", C6XABI_Tag_CPU_arch_C67XP, (TIC6X_INSN_C62X
+                                          | TIC6X_INSN_C67X
+                                          | TIC6X_INSN_C67XP) },
+    { "c674x", C6XABI_Tag_CPU_arch_C674X, (TIC6X_INSN_C62X
+                                          | TIC6X_INSN_C64X
+                                          | TIC6X_INSN_C64XP
+                                          | TIC6X_INSN_C67X
+                                          | TIC6X_INSN_C67XP
+                                          | TIC6X_INSN_C674X) }
   };
 
 /* Update the selected architecture based on ARCH, giving an error if
@@ -135,6 +150,12 @@ tic6x_use_arch (const char *arch)
     if (strcmp (arch, tic6x_arches[i].arch) == 0)
       {
        tic6x_arch_enable = tic6x_arches[i].features;
+       if (tic6x_seen_insns)
+         tic6x_arch_attribute
+           = elf32_tic6x_merge_arch_attributes (tic6x_arch_attribute,
+                                                tic6x_arches[i].attr);
+       else
+         tic6x_arch_attribute = tic6x_arches[i].attr;
        return;
       }
 
@@ -295,10 +316,53 @@ s_tic6x_nocmp (int ignored ATTRIBUTE_UNUSED)
   demand_empty_rest_of_line ();
 }
 
+/* Track for each attribute whether it has been set explicitly (and so
+   should not have a default value set by the assembler).  */
+static bfd_boolean tic6x_attributes_set_explicitly[NUM_KNOWN_OBJ_ATTRIBUTES];
+
+/* Parse a .c6xabi_attribute directive.  */
+
+static void
+s_tic6x_c6xabi_attribute (int ignored ATTRIBUTE_UNUSED)
+{
+  int tag = s_vendor_attribute (OBJ_ATTR_PROC);
+
+  if (tag < NUM_KNOWN_OBJ_ATTRIBUTES)
+    tic6x_attributes_set_explicitly[tag] = TRUE;
+}
+
+typedef struct
+{
+  const char *name;
+  int tag;
+} tic6x_attribute_table;
+
+static const tic6x_attribute_table tic6x_attributes[] =
+  {
+#define TAG(tag, value) { #tag, tag }
+#include "elf/tic6x-attrs.h"
+#undef TAG
+  };
+
+/* Convert an attribute name to a number.  */
+
+int
+tic6x_convert_symbolic_attribute (const char *name)
+{
+  unsigned int i;
+
+  for (i = 0; i < ARRAY_SIZE (tic6x_attributes); i++)
+    if (strcmp (name, tic6x_attributes[i].name) == 0)
+      return tic6x_attributes[i].tag;
+
+  return -1;
+}
+
 const pseudo_typeS md_pseudo_table[] =
   {
     { "arch", s_tic6x_arch, 0 },
     { "atomic", s_tic6x_atomic, 0 },
+    { "c6xabi_attribute", s_tic6x_c6xabi_attribute, 0 },
     { "noatomic", s_tic6x_noatomic, 0 },
     { "nocmp", s_tic6x_nocmp, 0 },
     { "word", cons, 4 },
@@ -2587,6 +2651,16 @@ md_assemble (char *str)
   if (p == str)
     abort ();
 
+  /* Now an instruction has been seen, architecture attributes from
+     .arch directives merge with rather than overriding the previous
+     value.  */
+  tic6x_seen_insns = TRUE;
+  /* If no .arch directives or -march options have been seen, we are
+     assessing instruction validity based on the C674X default, so set
+     the attribute accordingly.  */
+  if (tic6x_arch_attribute == C6XABI_Tag_CPU_arch_none)
+    tic6x_arch_attribute = C6XABI_Tag_CPU_arch_C674X;
+
   /* Reset global settings for parallel bars and predicates now to
      avoid extra errors if there are problems with this opcode.  */
   this_line_parallel = tic6x_line_parallel;
@@ -3760,6 +3834,29 @@ tic6x_frag_init (fragS *fragp)
   fragp->tc_frag_data.can_cross_fp_boundary = FALSE;
 }
 
+/* Set an attribute if it has not already been set by the user.  */
+
+static void
+tic6x_set_attribute_int (int tag, int value)
+{
+  if (tag < 1
+      || tag >= NUM_KNOWN_OBJ_ATTRIBUTES)
+    abort ();
+  if (!tic6x_attributes_set_explicitly[tag])
+    bfd_elf_add_proc_attr_int (stdoutput, tag, value);
+}
+
+/* Set object attributes deduced from the input file and command line
+   rather than given explicitly.  */
+static void
+tic6x_set_attributes (void)
+{
+  if (tic6x_arch_attribute == C6XABI_Tag_CPU_arch_none)
+    tic6x_arch_attribute = C6XABI_Tag_CPU_arch_C674X;
+
+  tic6x_set_attribute_int (Tag_C6XABI_Tag_CPU_arch, tic6x_arch_attribute);
+}
+
 /* Do machine-dependent manipulations of the frag chains after all
    input has been read and before the machine-independent sizing and
    relaxing.  */
@@ -3767,6 +3864,9 @@ tic6x_frag_init (fragS *fragp)
 void
 tic6x_end (void)
 {
+  /* Set object attributes at this point if not explicitly set.  */
+  tic6x_set_attributes ();
+
   /* Meeting alignment requirements may require inserting NOPs in
      parallel in execute packets earlier in the segment.  Future
      16-bit instruction generation involves whole-segment optimization
index 0285db4baf93b07e6822769a0afd09c03de0313a..c9df520b4b6c9d0d37048c4facabd4013207e645 100644 (file)
@@ -119,6 +119,10 @@ extern void tic6x_cons_align (int n);
   } while (0)
 extern bfd_boolean tic6x_do_align (int n, char *fill, int len, int max);
 
+#define CONVERT_SYMBOLIC_ATTRIBUTE(name)       \
+  tic6x_convert_symbolic_attribute (name)
+extern int tic6x_convert_symbolic_attribute (const char *);
+
 #define md_end() tic6x_end ();
 extern void tic6x_end (void);
 
index b4583a16b52516ec725568c4b399a03714d482cb..1a5b9f21234e2c442b6b90b9e433212824e96b71 100644 (file)
@@ -1,3 +1,24 @@
+2010-06-15  Joseph Myers  <joseph@codesourcery.com>
+
+       * gas/elf/elf.exp: Set target_machine for tic6x-*-*.
+       * gas/elf/section2.e-tic6x, gas/tic6x/attr-arch-directive-1.d,
+       gas/tic6x/attr-arch-directive-1.s,
+       gas/tic6x/attr-arch-directive-2.d,
+       gas/tic6x/attr-arch-directive-2.s,
+       gas/tic6x/attr-arch-directive-3.d,
+       gas/tic6x/attr-arch-directive-3.s,
+       gas/tic6x/attr-arch-directive-4.d,
+       gas/tic6x/attr-arch-directive-4.s,
+       gas/tic6x/attr-arch-directive-5.d,
+       gas/tic6x/attr-arch-directive-5.s,
+       gas/tic6x/attr-arch-opts-c62x.d, gas/tic6x/attr-arch-opts-c64x+.d,
+       gas/tic6x/attr-arch-opts-c64x.d, gas/tic6x/attr-arch-opts-c674x.d,
+       gas/tic6x/attr-arch-opts-c67x+.d, gas/tic6x/attr-arch-opts-c67x.d,
+       gas/tic6x/attr-arch-opts-none-1.d,
+       gas/tic6x/attr-arch-opts-none-2.d,
+       gas/tic6x/attr-arch-opts-override-1.d,
+       gas/tic6x/attr-arch-opts-override-2.d, gas/tic6x/empty.s: New.
+
 2010-06-14  Sebastian Andrzej Siewior  <bigeasy@linutronix.de>
 
        * gas/ppc/e500.s: Add eieio, mbar and lwsync
index 7c191adc32fb6cdadd169b786c41670edae83ecc..9771a86e2324b524472054e61157f6f55ebd54ec 100644 (file)
@@ -59,6 +59,9 @@ if { ([istarget "*-*-*elf*"]
     if {[istarget "score-*-*"]} then {
        set target_machine -score
     }
+    if {[istarget "tic6x-*-*"]} then {
+       set target_machine -tic6x
+    }
     if {[istarget "xtensa*-*-*"]} then {
        set target_machine -xtensa
     }
diff --git a/gas/testsuite/gas/elf/section2.e-tic6x b/gas/testsuite/gas/elf/section2.e-tic6x
new file mode 100644 (file)
index 0000000..84463b1
--- /dev/null
@@ -0,0 +1,9 @@
+
+Symbol table '.symtab' contains 6 entries:
+   Num:    Value[      ]* Size Type    Bind   Vis      Ndx Name
+     0: 0+0     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 0+0     0 SECTION LOCAL  DEFAULT    1 
+     2: 0+0     0 SECTION LOCAL  DEFAULT    2 
+     3: 0+0     0 SECTION LOCAL  DEFAULT    3 
+     4: 0+0     0 SECTION LOCAL  DEFAULT    4 
+     5: 0+0     0 SECTION LOCAL  DEFAULT    5 
diff --git a/gas/testsuite/gas/tic6x/attr-arch-directive-1.d b/gas/testsuite/gas/tic6x/attr-arch-directive-1.d
new file mode 100644 (file)
index 0000000..e89cb95
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, directives 1
+#as: -march=c64x
+#source: attr-arch-directive-1.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C62x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-directive-1.s b/gas/testsuite/gas/tic6x/attr-arch-directive-1.s
new file mode 100644 (file)
index 0000000..5d8c605
--- /dev/null
@@ -0,0 +1,3 @@
+# .arch directives override previous attributes before instructions are seen.
+.arch c67x
+.arch c62x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-directive-2.d b/gas/testsuite/gas/tic6x/attr-arch-directive-2.d
new file mode 100644 (file)
index 0000000..35e3a24
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, directives 2
+#as: -march=c64x
+#source: attr-arch-directive-2.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x\+
diff --git a/gas/testsuite/gas/tic6x/attr-arch-directive-2.s b/gas/testsuite/gas/tic6x/attr-arch-directive-2.s
new file mode 100644 (file)
index 0000000..b7a759f
--- /dev/null
@@ -0,0 +1,9 @@
+# .arch directives override previous attributes before instructions
+# are seen, but not after.
+.text
+.globl f
+f:
+.arch c67x
+.arch c62x
+       nop
+.arch c64x+
diff --git a/gas/testsuite/gas/tic6x/attr-arch-directive-3.d b/gas/testsuite/gas/tic6x/attr-arch-directive-3.d
new file mode 100644 (file)
index 0000000..d68149e
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, directives 3
+#as: -march=c62x
+#source: attr-arch-directive-3.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-directive-3.s b/gas/testsuite/gas/tic6x/attr-arch-directive-3.s
new file mode 100644 (file)
index 0000000..edfca62
--- /dev/null
@@ -0,0 +1,7 @@
+# .arch directives merge attributes after instructions are seen.
+.text
+.globl f
+f:
+       nop
+.arch c67x
+.arch c64x+
diff --git a/gas/testsuite/gas/tic6x/attr-arch-directive-4.d b/gas/testsuite/gas/tic6x/attr-arch-directive-4.d
new file mode 100644 (file)
index 0000000..bf7ff28
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, directives 4
+#as:
+#source: attr-arch-directive-4.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C62x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-directive-4.s b/gas/testsuite/gas/tic6x/attr-arch-directive-4.s
new file mode 100644 (file)
index 0000000..1c15ae9
--- /dev/null
@@ -0,0 +1,3 @@
+# .c6xabi_attribute directives override other architecture information.
+.c6xabi_attribute 2, 1
+.arch c674x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-directive-5.d b/gas/testsuite/gas/tic6x/attr-arch-directive-5.d
new file mode 100644 (file)
index 0000000..3edaa63
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, directives 5
+#as:
+#source: attr-arch-directive-5.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C62x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-directive-5.s b/gas/testsuite/gas/tic6x/attr-arch-directive-5.s
new file mode 100644 (file)
index 0000000..81d7094
--- /dev/null
@@ -0,0 +1,3 @@
+# .c6xabi_attribute directives override other architecture information.
+.arch c674x
+.c6xabi_attribute Tag_C6XABI_Tag_CPU_arch, 1
diff --git a/gas/testsuite/gas/tic6x/attr-arch-opts-c62x.d b/gas/testsuite/gas/tic6x/attr-arch-opts-c62x.d
new file mode 100644 (file)
index 0000000..7f3ffd2
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, -march=c62x
+#as: -march=c62x
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C62x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-opts-c64x+.d b/gas/testsuite/gas/tic6x/attr-arch-opts-c64x+.d
new file mode 100644 (file)
index 0000000..899b461
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, -march=c64x+
+#as: -march=c64x+
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x\+
diff --git a/gas/testsuite/gas/tic6x/attr-arch-opts-c64x.d b/gas/testsuite/gas/tic6x/attr-arch-opts-c64x.d
new file mode 100644 (file)
index 0000000..53d6d3e
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, -march=c64x
+#as: -march=c64x
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-opts-c674x.d b/gas/testsuite/gas/tic6x/attr-arch-opts-c674x.d
new file mode 100644 (file)
index 0000000..89678ec
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, -march=c674x
+#as: -march=c674x
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-opts-c67x+.d b/gas/testsuite/gas/tic6x/attr-arch-opts-c67x+.d
new file mode 100644 (file)
index 0000000..8c5bfe3
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, -march=c67x+
+#as: -march=c67x+
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C67x\+
diff --git a/gas/testsuite/gas/tic6x/attr-arch-opts-c67x.d b/gas/testsuite/gas/tic6x/attr-arch-opts-c67x.d
new file mode 100644 (file)
index 0000000..04c71b2
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, -march=c67x
+#as: -march=c67x
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C67x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-opts-none-1.d b/gas/testsuite/gas/tic6x/attr-arch-opts-none-1.d
new file mode 100644 (file)
index 0000000..7ece957
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, no options 1
+#as:
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-opts-none-2.d b/gas/testsuite/gas/tic6x/attr-arch-opts-none-2.d
new file mode 100644 (file)
index 0000000..b5f0194
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, no options 2
+#as:
+#source: empty.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-opts-override-1.d b/gas/testsuite/gas/tic6x/attr-arch-opts-override-1.d
new file mode 100644 (file)
index 0000000..ff2a997
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, -march=c674x -march=c62x
+#as: -march=c674x -march=c62x
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C62x
diff --git a/gas/testsuite/gas/tic6x/attr-arch-opts-override-2.d b/gas/testsuite/gas/tic6x/attr-arch-opts-override-2.d
new file mode 100644 (file)
index 0000000..2c7f835
--- /dev/null
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X arch attributes, -march=c62x -march=c674x
+#as: -march=c62x -march=c674x
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/gas/testsuite/gas/tic6x/empty.s b/gas/testsuite/gas/tic6x/empty.s
new file mode 100644 (file)
index 0000000..291fd40
--- /dev/null
@@ -0,0 +1 @@
+# Dummy input file with no instructions at all.
index bf36e1e1d1dd8f0ba08cb04513b7e3e49ba7ba6f..2442c50861c885faaf7b4c5cf670f02b4827c7ae 100644 (file)
@@ -1,3 +1,12 @@
+2010-06-15  Joseph Myers  <joseph@codesourcery.com>
+
+       * tic6x-attrs.h: New.
+       * tic6x.h: Include elf/tic6x-attrs.h for attribute table.
+       (C6XABI_Tag_CPU_arch_none, C6XABI_Tag_CPU_arch_C62X,
+       C6XABI_Tag_CPU_arch_C67X, C6XABI_Tag_CPU_arch_C67XP,
+       C6XABI_Tag_CPU_arch_C64X, C6XABI_Tag_CPU_arch_C64XP,
+       C6XABI_Tag_CPU_arch_C674X): Define.
+
 2010-06-11  Tristan Gingold  <gingold@adacore.com>
 
        * ia64.h (EF_IA_64_VMS_COMCOD, EF_IA_64_VMS_COMCOD_SUCCESS)
diff --git a/include/elf/tic6x-attrs.h b/include/elf/tic6x-attrs.h
new file mode 100644 (file)
index 0000000..d5b8ee1
--- /dev/null
@@ -0,0 +1,25 @@
+/* TI C6X ELF attributes.
+   Copyright 2010
+   Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+/* Define the TAG macro before including this file; it takes a tag
+   name and value.  */
+
+TAG(Tag_C6XABI_Tag_CPU_arch, 2)
index c4ec19356b0df7925b24a7b80927b4e6c45692f3..a9b66ddf395383cab39bf861cc778666b7d115d0 100644 (file)
@@ -125,4 +125,26 @@ END_RELOC_NUMBERS (R_TIC6X_max)
 /* Segment cannot be further relocated.  */
 #define PHA_READONLY           0x2
 
+/* Build attributes.  */
+enum
+  {
+#define TAG(tag, value) tag = value,
+#include "elf/tic6x-attrs.h"
+#undef TAG
+    Tag_C6XABI_last
+  };
+
+/* Values for Tag_C6XABI_Tag_CPU_arch.  GNU-specific names pending any
+   ABI defining official names associated with the values.  */
+enum
+  {
+    C6XABI_Tag_CPU_arch_none = 0,
+    C6XABI_Tag_CPU_arch_C62X = 1,
+    C6XABI_Tag_CPU_arch_C67X = 3,
+    C6XABI_Tag_CPU_arch_C67XP = 4,
+    C6XABI_Tag_CPU_arch_C64X = 6,
+    C6XABI_Tag_CPU_arch_C64XP = 7,
+    C6XABI_Tag_CPU_arch_C674X = 8
+  };
+
 #endif /* _ELF_TIC6X_H */
index c7f5202936e6c859ca5d0382b0ca290e710011c3..3aa9c712b42da8cd2bdb4493951ca37d1d9c4c03 100644 (file)
@@ -1,3 +1,7 @@
+2010-06-15  Joseph Myers  <joseph@codesourcery.com>
+
+       * emulparams/elf32_tic6x_le.sh (ATTRS_SECTIONS): Define.
+
 2010-06-09  Dave Korn  <dave.korn.cygwin@gmail.com>
 
        PR ld/11603
index ee41f4f986cad997e90fdf51a8db5eea417784fc..fca0c7f9830f3e888557c74e36eb3c3618f263d3 100644 (file)
@@ -37,3 +37,4 @@ OTHER_BSS_SECTIONS="
     . +=  0x100000;
     _STACK_START = .;
   }"
+ATTRS_SECTIONS='__TI_build_attributes 0 : { KEEP (*(__TI_build_attributes)) KEEP (*(.gnu.attributes)) }'
index 162f166c8c1fc3b22411098196461a59a0053749..03ee49da7a5549863fce4da9f34d1fae43b2566f 100644 (file)
@@ -1,3 +1,29 @@
+2010-06-15  Joseph Myers  <joseph@codesourcery.com>
+
+       * ld-elf/orphan3.d: Allow section names starting '_'.
+       * ld-tic6x/attr-arch-c62x-c62x.d, ld-tic6x/attr-arch-c62x-c64x+.d,
+       ld-tic6x/attr-arch-c62x-c64x.d, ld-tic6x/attr-arch-c62x-c674x.d,
+       ld-tic6x/attr-arch-c62x-c67x+.d, ld-tic6x/attr-arch-c62x-c67x.d,
+       ld-tic6x/attr-arch-c62x.s, ld-tic6x/attr-arch-c64x+-c62x.d,
+       ld-tic6x/attr-arch-c64x+-c64x+.d, ld-tic6x/attr-arch-c64x+-c64x.d,
+       ld-tic6x/attr-arch-c64x+-c674x.d,
+       ld-tic6x/attr-arch-c64x+-c67x+.d, ld-tic6x/attr-arch-c64x+-c67x.d,
+       ld-tic6x/attr-arch-c64x+.s, ld-tic6x/attr-arch-c64x-c62x.d,
+       ld-tic6x/attr-arch-c64x-c64x+.d, ld-tic6x/attr-arch-c64x-c64x.d,
+       ld-tic6x/attr-arch-c64x-c674x.d, ld-tic6x/attr-arch-c64x-c67x+.d,
+       ld-tic6x/attr-arch-c64x-c67x.d, ld-tic6x/attr-arch-c64x.s,
+       ld-tic6x/attr-arch-c674x-c62x.d, ld-tic6x/attr-arch-c674x-c64x+.d,
+       ld-tic6x/attr-arch-c674x-c64x.d, ld-tic6x/attr-arch-c674x-c674x.d,
+       ld-tic6x/attr-arch-c674x-c67x+.d, ld-tic6x/attr-arch-c674x-c67x.d,
+       ld-tic6x/attr-arch-c674x.s, ld-tic6x/attr-arch-c67x+-c62x.d,
+       ld-tic6x/attr-arch-c67x+-c64x+.d, ld-tic6x/attr-arch-c67x+-c64x.d,
+       ld-tic6x/attr-arch-c67x+-c674x.d,
+       ld-tic6x/attr-arch-c67x+-c67x+.d, ld-tic6x/attr-arch-c67x+-c67x.d,
+       ld-tic6x/attr-arch-c67x+.s, ld-tic6x/attr-arch-c67x-c62x.d,
+       ld-tic6x/attr-arch-c67x-c64x+.d, ld-tic6x/attr-arch-c67x-c64x.d,
+       ld-tic6x/attr-arch-c67x-c674x.d, ld-tic6x/attr-arch-c67x-c67x+.d,
+       ld-tic6x/attr-arch-c67x-c67x.d, ld-tic6x/attr-arch-c67x.s: New.
+
 2010-06-07  Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
 
        * ld-arm/arm-call.d: Handle change in lsls/movs disassembly.
index fc236cc777f385eabe051d1f8aacda32e312afeb..493ba584fc1d4ad7bc02ece70a1486fddf682bb7 100644 (file)
@@ -17,5 +17,5 @@
   \[[ 0-9]+\] \.foo +NOBITS +[0-9a-f]+ +[0-9a-f]+ +0+20 +0+ +A +0 +0 +[0-9]+
 #...
   \[[ 0-9]+\] \.foo +PROGBITS +0+ +[0-9a-f]+ +0+20 +0+ +0 +0 +[0-9]+
-  \[[ 0-9]+\] \.[^f].*
+  \[[ 0-9]+\] [._][^f].*
 #pass
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c62x-c62x.d b/ld/testsuite/ld-tic6x/attr-arch-c62x-c62x.d
new file mode 100644 (file)
index 0000000..7d33966
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C62x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x+.d b/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x+.d
new file mode 100644 (file)
index 0000000..f097363
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x\+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x.d b/ld/testsuite/ld-tic6x/attr-arch-c62x-c64x.d
new file mode 100644 (file)
index 0000000..6ebb94f
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c62x-c674x.d b/ld/testsuite/ld-tic6x/attr-arch-c62x-c674x.d
new file mode 100644 (file)
index 0000000..5fa0d9e
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x+.d b/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x+.d
new file mode 100644 (file)
index 0000000..449d5dd
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C67x\+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x.d b/ld/testsuite/ld-tic6x/attr-arch-c62x-c67x.d
new file mode 100644 (file)
index 0000000..47e295c
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c62x c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c62x.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C67x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c62x.s b/ld/testsuite/ld-tic6x/attr-arch-c62x.s
new file mode 100644 (file)
index 0000000..e69fbf4
--- /dev/null
@@ -0,0 +1 @@
+.arch c62x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x+-c62x.d b/ld/testsuite/ld-tic6x/attr-arch-c64x+-c62x.d
new file mode 100644 (file)
index 0000000..d05dbb6
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x\+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x+.d b/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x+.d
new file mode 100644 (file)
index 0000000..29f00c0
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x\+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x.d b/ld/testsuite/ld-tic6x/attr-arch-c64x+-c64x.d
new file mode 100644 (file)
index 0000000..d007b23
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x\+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x+-c674x.d b/ld/testsuite/ld-tic6x/attr-arch-c64x+-c674x.d
new file mode 100644 (file)
index 0000000..bef1c3f
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x+.d b/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x+.d
new file mode 100644 (file)
index 0000000..7bcfa8d
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x.d b/ld/testsuite/ld-tic6x/attr-arch-c64x+-c67x.d
new file mode 100644 (file)
index 0000000..68a3d2d
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x+ c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x+.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x+.s b/ld/testsuite/ld-tic6x/attr-arch-c64x+.s
new file mode 100644 (file)
index 0000000..2c2f210
--- /dev/null
@@ -0,0 +1 @@
+.arch c64x+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x-c62x.d b/ld/testsuite/ld-tic6x/attr-arch-c64x-c62x.d
new file mode 100644 (file)
index 0000000..47f87db
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x+.d b/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x+.d
new file mode 100644 (file)
index 0000000..648915c
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x\+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x.d b/ld/testsuite/ld-tic6x/attr-arch-c64x-c64x.d
new file mode 100644 (file)
index 0000000..1f2e286
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C64x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x-c674x.d b/ld/testsuite/ld-tic6x/attr-arch-c64x-c674x.d
new file mode 100644 (file)
index 0000000..d27fa57
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x+.d b/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x+.d
new file mode 100644 (file)
index 0000000..ee809a7
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x.d b/ld/testsuite/ld-tic6x/attr-arch-c64x-c67x.d
new file mode 100644 (file)
index 0000000..9df8d0f
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c64x c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c64x.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c64x.s b/ld/testsuite/ld-tic6x/attr-arch-c64x.s
new file mode 100644 (file)
index 0000000..438d0f8
--- /dev/null
@@ -0,0 +1 @@
+.arch c64x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c674x-c62x.d b/ld/testsuite/ld-tic6x/attr-arch-c674x-c62x.d
new file mode 100644 (file)
index 0000000..53dc64d
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x+.d b/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x+.d
new file mode 100644 (file)
index 0000000..b7d9c64
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x.d b/ld/testsuite/ld-tic6x/attr-arch-c674x-c64x.d
new file mode 100644 (file)
index 0000000..5a06c9a
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c674x-c674x.d b/ld/testsuite/ld-tic6x/attr-arch-c674x-c674x.d
new file mode 100644 (file)
index 0000000..41b41e5
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x+.d b/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x+.d
new file mode 100644 (file)
index 0000000..77be063
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x.d b/ld/testsuite/ld-tic6x/attr-arch-c674x-c67x.d
new file mode 100644 (file)
index 0000000..38acd9a
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c674x c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c674x.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c674x.s b/ld/testsuite/ld-tic6x/attr-arch-c674x.s
new file mode 100644 (file)
index 0000000..41b3886
--- /dev/null
@@ -0,0 +1 @@
+.arch c674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x+-c62x.d b/ld/testsuite/ld-tic6x/attr-arch-c67x+-c62x.d
new file mode 100644 (file)
index 0000000..0d58d50
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C67x\+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x+.d b/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x+.d
new file mode 100644 (file)
index 0000000..65baf14
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x.d b/ld/testsuite/ld-tic6x/attr-arch-c67x+-c64x.d
new file mode 100644 (file)
index 0000000..e4c55d9
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x+-c674x.d b/ld/testsuite/ld-tic6x/attr-arch-c67x+-c674x.d
new file mode 100644 (file)
index 0000000..41207d6
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x+.d b/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x+.d
new file mode 100644 (file)
index 0000000..27b717b
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C67x\+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x.d b/ld/testsuite/ld-tic6x/attr-arch-c67x+-c67x.d
new file mode 100644 (file)
index 0000000..73d2312
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x+ c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x+.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C67x\+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x+.s b/ld/testsuite/ld-tic6x/attr-arch-c67x+.s
new file mode 100644 (file)
index 0000000..f4c22de
--- /dev/null
@@ -0,0 +1 @@
+.arch c67x+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x-c62x.d b/ld/testsuite/ld-tic6x/attr-arch-c67x-c62x.d
new file mode 100644 (file)
index 0000000..e0dc26c
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c62x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c62x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C67x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x+.d b/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x+.d
new file mode 100644 (file)
index 0000000..82a3d12
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c64x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c64x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x.d b/ld/testsuite/ld-tic6x/attr-arch-c67x-c64x.d
new file mode 100644 (file)
index 0000000..b7e7cba
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c64x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c64x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x-c674x.d b/ld/testsuite/ld-tic6x/attr-arch-c67x-c674x.d
new file mode 100644 (file)
index 0000000..83e671c
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c674x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c674x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C674x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x+.d b/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x+.d
new file mode 100644 (file)
index 0000000..d51886c
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c67x+
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c67x+.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C67x\+
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x.d b/ld/testsuite/ld-tic6x/attr-arch-c67x-c67x.d
new file mode 100644 (file)
index 0000000..aaa49fc
--- /dev/null
@@ -0,0 +1,10 @@
+#name: C6X arch attribute merging, c67x c67x
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-arch-c67x.s
+#source: attr-arch-c67x.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+  Tag_C6XABI_Tag_CPU_arch: C67x
diff --git a/ld/testsuite/ld-tic6x/attr-arch-c67x.s b/ld/testsuite/ld-tic6x/attr-arch-c67x.s
new file mode 100644 (file)
index 0000000..a7e5ba6
--- /dev/null
@@ -0,0 +1 @@
+.arch c67x