This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
C6X DSBT attribute
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: binutils at sourceware dot org
- Cc: bernds at codesourcery dot com
- Date: Fri, 29 Oct 2010 00:17:19 +0000 (UTC)
- Subject: C6X DSBT attribute
I've applied this patch to add support for the C6X Tag_ABI_DSBT attribute.
Several more attributes included in the latest ABI version will follow in
due course.
bfd:
2010-10-29 Bernd Schmidt <bernds@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
* elf32-tic6x.c (elf32_tic6x_merge_attributes): Check for mismatch
of DSBT attributes.
binutils:
2010-10-29 Bernd Schmidt <bernds@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
* readelf.c (display_tic6x_attribute): Handle Tag_ABI_DSBT.
gas:
2010-10-29 Bernd Schmidt <bernds@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
* config/tc-tic6x.c (OPTION_MDSBT, OPTION_MNO_DSBT): New enum
values.
(md_longopts): Add mdsbt and mno-dsbt.
(tic6x_dsbt): New static variable.
(md_parse_option): Handle OPTION_MDSBT and OPTION_MNO_DSBT.
(md_show_usage): Output help text for -mdsbt and -mno-dsbt.
(TAG): Add comma at the end.
(tic6x_set_attributes): Set Tag_ABI_DSBT.
* doc/as.texinfo: Document -mdsbt and -mno-dsbt.
* doc/c-tic6x.texi (TIC6X Options): Likewise.
(TIC6X Directives): Mention Tag_ABI_DSBT.
gas/testsuite:
2010-10-29 Bernd Schmidt <bernds@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
* gas/tic6x/attr-dsbt-directive-1.d,
gas/tic6x/attr-dsbt-directive-1.s,
gas/tic6x/attr-dsbt-directive-2.d,
gas/tic6x/attr-dsbt-directive-2.s,
gas/tic6x/attr-dsbt-opts-mdsbt.d,
gas/tic6x/attr-dsbt-opts-mno-dsbt.d: New tests.
include/elf:
2010-10-29 Bernd Schmidt <bernds@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
* tic6x-attrs.h (Tag_ABI_DSBT): New.
ld/testsuite:
2010-10-29 Bernd Schmidt <bernds@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
* ld-tic6x/attr-dsbt-0.s, ld-tic6x/attr-dsbt-00.d,
ld-tic6x/attr-dsbt-01.d, ld-tic6x/attr-dsbt-1.s,
ld-tic6x/attr-dsbt-10.d, ld-tic6x/attr-dsbt-11.d: New tests.
Index: bfd/elf32-tic6x.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-tic6x.c,v
retrieving revision 1.9
diff -u -r1.9 elf32-tic6x.c
--- bfd/elf32-tic6x.c 25 Oct 2010 15:54:14 -0000 1.9
+++ bfd/elf32-tic6x.c 29 Oct 2010 00:03:10 -0000
@@ -1723,6 +1723,12 @@
= elf32_tic6x_merge_arch_attributes (in_attr[Tag_ISA].i,
out_attr[Tag_ISA].i);
+ if (out_attr[Tag_ABI_DSBT].i != in_attr[Tag_ABI_DSBT].i)
+ {
+ _bfd_error_handler
+ (_("warning: %B and %B differ in whether code is compiled for DSBT"),
+ obfd, ibfd);
+ }
/* Merge Tag_compatibility attributes and any common GNU ones. */
_bfd_elf_merge_object_attributes (ibfd, obfd);
Index: binutils/readelf.c
===================================================================
RCS file: /cvs/src/src/binutils/readelf.c,v
retrieving revision 1.518
diff -u -r1.518 readelf.c
--- binutils/readelf.c 28 Oct 2010 06:00:13 -0000 1.518
+++ binutils/readelf.c 29 Oct 2010 00:03:11 -0000
@@ -10810,6 +10810,24 @@
}
return p;
+ case Tag_ABI_DSBT:
+ val = read_uleb128 (p, &len);
+ p += len;
+ printf (" Tag_ABI_DSBT: ");
+ switch (val)
+ {
+ case 0:
+ printf (_("DSBT addressing not used\n"));
+ break;
+ case 1:
+ printf (_("DSBT addressing used\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. */
Index: gas/config/tc-tic6x.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-tic6x.c,v
retrieving revision 1.9
diff -u -r1.9 tc-tic6x.c
--- gas/config/tc-tic6x.c 25 Oct 2010 15:33:54 -0000 1.9
+++ gas/config/tc-tic6x.c 29 Oct 2010 00:03:12 -0000
@@ -50,6 +50,8 @@
OPTION_MNO_ATOMIC,
OPTION_MBIG_ENDIAN,
OPTION_MLITTLE_ENDIAN,
+ OPTION_MDSBT,
+ OPTION_MNO_DSBT,
OPTION_MGENERATE_REL
};
@@ -60,6 +62,8 @@
{ "mno-atomic", no_argument, NULL, OPTION_MNO_ATOMIC },
{ "mbig-endian", no_argument, NULL, OPTION_MBIG_ENDIAN },
{ "mlittle-endian", no_argument, NULL, OPTION_MLITTLE_ENDIAN },
+ { "mdsbt", no_argument, NULL, OPTION_MDSBT },
+ { "mno-dsbt", no_argument, NULL, OPTION_MNO_DSBT },
{ "mgenerate-rel", no_argument, NULL, OPTION_MGENERATE_REL },
{ NULL, no_argument, NULL, 0 }
};
@@ -113,6 +117,9 @@
/* Whether to generate RELA relocations. */
static bfd_boolean tic6x_generate_rela = TRUE;
+/* Whether the code uses DSBT addressing. */
+static bfd_boolean tic6x_dsbt;
+
/* Table of supported architecture variants. */
typedef struct
{
@@ -191,6 +198,14 @@
target_big_endian = 0;
break;
+ case OPTION_MDSBT:
+ tic6x_dsbt = 1;
+ break;
+
+ case OPTION_MNO_DSBT:
+ tic6x_dsbt = 0;
+ break;
+
case OPTION_MGENERATE_REL:
tic6x_generate_rela = FALSE;
break;
@@ -213,6 +228,8 @@
fprintf (stream, _(" -mno-atomic disable atomic operation instructions\n"));
fprintf (stream, _(" -mbig-endian generate big-endian code\n"));
fprintf (stream, _(" -mlittle-endian generate little-endian code\n"));
+ fprintf (stream, _(" -mdsbt code uses DSBT addressing\n"));
+ fprintf (stream, _(" -mno-dsbt code does not use DSBT addressing\n"));
/* -mgenerate-rel is only for testsuite use and is deliberately
undocumented. */
@@ -341,7 +358,7 @@
static const tic6x_attribute_table tic6x_attributes[] =
{
-#define TAG(tag, value) { #tag, tag }
+#define TAG(tag, value) { #tag, tag },
#include "elf/tic6x-attrs.h"
#undef TAG
};
@@ -3897,6 +3914,7 @@
tic6x_arch_attribute = C6XABI_Tag_ISA_C674X;
tic6x_set_attribute_int (Tag_ISA, tic6x_arch_attribute);
+ tic6x_set_attribute_int (Tag_ABI_DSBT, tic6x_dsbt);
}
/* Do machine-dependent manipulations of the frag chains after all
Index: gas/doc/as.texinfo
===================================================================
RCS file: /cvs/src/src/gas/doc/as.texinfo,v
retrieving revision 1.223
diff -u -r1.223 as.texinfo
--- gas/doc/as.texinfo 28 Oct 2010 11:40:26 -0000 1.223
+++ gas/doc/as.texinfo 29 Oct 2010 00:03:13 -0000
@@ -476,7 +476,7 @@
@emph{Target TIC6X options:}
[@b{-march=@var{arch}}] [@b{-matomic}|@b{-mno-atomic}]
- [@b{-mbig-endian}|@b{-mlittle-endian}]
+ [@b{-mbig-endian}|@b{-mlittle-endian}] [@b{-mdsbt}|@b{-mno-dsbt}]
@end ifset
@ifset Z80
@@ -1285,6 +1285,15 @@
independent of the order in which the @option{-march} or
@option{-matomic} or @option{-mno-atomic} options are passed.
+@item -mdsbt
+@itemx -mno-dsbt
+The @option{-mdsbt} option causes the assembler to generate the
+@code{Tag_ABI_DSBT} attribute with a value of 1, indicating that the
+code is using DSBT addressing. The @option{-mno-dsbt} option, the
+default, causes the tag to have a value of 0, indicating that the code
+does not use DSBT addressing. The linker will emit a warning if
+objects of different type (DSBT and non-DSBT) are linked together.
+
@item -mbig-endian
@itemx -mlittle-endian
Generate code for the specified endianness. The default is
Index: gas/doc/c-tic6x.texi
===================================================================
RCS file: /cvs/src/src/gas/doc/c-tic6x.texi,v
retrieving revision 1.3
diff -u -r1.3 c-tic6x.texi
--- gas/doc/c-tic6x.texi 21 Oct 2010 21:16:52 -0000 1.3
+++ gas/doc/c-tic6x.texi 29 Oct 2010 00:03:13 -0000
@@ -48,6 +48,17 @@
independent of the order in which the @option{-march} or
@option{-matomic} or @option{-mno-atomic} options are passed.
+@cindex @code{-mdsbt} command line option, TIC6X
+@cindex @code{-mno-dsbt} command line option, TIC6X
+@item -mdsbt
+@itemx -mno-dsbt
+The @option{-mdsbt} option causes the assembler to generate the
+@code{Tag_ABI_DSBT} attribute with a value of 1, indicating that the
+code is using DSBT addressing. The @option{-mno-dsbt} option, the
+default, causes the tag to have a value of 0, indicating that the code
+does not use DSBT addressing. The linker will emit a warning if
+objects of different type (DSBT and non-DSBT) are linked together.
+
@cindex TIC6X big-endian output
@cindex TIC6X little-endian output
@cindex big-endian output, TIC6X
@@ -113,10 +124,10 @@
@item .c6xabi_attribute @var{tag}, @var{value}
Set the C6000 EABI build attribute @var{tag} to @var{value}.
-The @var{tag} is either an attribute number or
-@code{Tag_ISA}. The @var{value} is either a
-@code{number}, @code{"string"}, or @code{number, "string"} depending
-on the tag.
+The @var{tag} is either an attribute number or one of
+@code{Tag_ISA} or @code{Tag_ABI_DSBT}. The
+@var{value} is either a @code{number}, @code{"string"}, or
+@code{number, "string"} depending on the tag.
@cindex @code{.nocmp} directive, TIC6X
@item .nocmp
Index: gas/testsuite/gas/tic6x/attr-dsbt-directive-1.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/attr-dsbt-directive-1.d
diff -N gas/testsuite/gas/tic6x/attr-dsbt-directive-1.d
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gas/testsuite/gas/tic6x/attr-dsbt-directive-1.d 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1,9 @@
+#readelf: -A
+#name: C6X DSBT attribute, directives 1
+#as:
+#source: attr-dsbt-directive-1.s
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_DSBT: DSBT addressing used
Index: gas/testsuite/gas/tic6x/attr-dsbt-directive-1.s
===================================================================
RCS file: gas/testsuite/gas/tic6x/attr-dsbt-directive-1.s
diff -N gas/testsuite/gas/tic6x/attr-dsbt-directive-1.s
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gas/testsuite/gas/tic6x/attr-dsbt-directive-1.s 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1 @@
+ .c6xabi_attribute Tag_ABI_DSBT, 1
Index: gas/testsuite/gas/tic6x/attr-dsbt-directive-2.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/attr-dsbt-directive-2.d
diff -N gas/testsuite/gas/tic6x/attr-dsbt-directive-2.d
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gas/testsuite/gas/tic6x/attr-dsbt-directive-2.d 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1,9 @@
+#readelf: -A
+#name: C6X DSBT attribute, directives 1
+#as:
+#source: attr-dsbt-directive-1.s
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_DSBT: DSBT addressing used
Index: gas/testsuite/gas/tic6x/attr-dsbt-directive-2.s
===================================================================
RCS file: gas/testsuite/gas/tic6x/attr-dsbt-directive-2.s
diff -N gas/testsuite/gas/tic6x/attr-dsbt-directive-2.s
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gas/testsuite/gas/tic6x/attr-dsbt-directive-2.s 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1 @@
+ .c6xabi_attribute 12, 1
Index: gas/testsuite/gas/tic6x/attr-dsbt-opts-mdsbt.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/attr-dsbt-opts-mdsbt.d
diff -N gas/testsuite/gas/tic6x/attr-dsbt-opts-mdsbt.d
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gas/testsuite/gas/tic6x/attr-dsbt-opts-mdsbt.d 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1,9 @@
+#readelf: -A
+#name: C6X DSBT attribute, -mdsbt
+#as: -mdsbt
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_DSBT: DSBT addressing used
Index: gas/testsuite/gas/tic6x/attr-dsbt-opts-mno-dsbt.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/attr-dsbt-opts-mno-dsbt.d
diff -N gas/testsuite/gas/tic6x/attr-dsbt-opts-mno-dsbt.d
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gas/testsuite/gas/tic6x/attr-dsbt-opts-mno-dsbt.d 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1,8 @@
+#readelf: -A
+#name: C6X DSBT attribute, -mno-dsbt
+#as: -mdsbt -mno-dsbt
+#source: dummy.s
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
Index: include/elf/tic6x-attrs.h
===================================================================
RCS file: /cvs/src/src/include/elf/tic6x-attrs.h,v
retrieving revision 1.2
diff -u -r1.2 tic6x-attrs.h
--- include/elf/tic6x-attrs.h 21 Oct 2010 21:16:53 -0000 1.2
+++ include/elf/tic6x-attrs.h 29 Oct 2010 00:03:13 -0000
@@ -23,3 +23,4 @@
name and value. */
TAG(Tag_ISA, 4)
+TAG(Tag_ABI_DSBT, 12)
Index: ld/testsuite/ld-tic6x/attr-dsbt-0.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/attr-dsbt-0.s
diff -N ld/testsuite/ld-tic6x/attr-dsbt-0.s
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/attr-dsbt-0.s 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_DSBT, 0
Index: ld/testsuite/ld-tic6x/attr-dsbt-00.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/attr-dsbt-00.d
diff -N ld/testsuite/ld-tic6x/attr-dsbt-00.d
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/attr-dsbt-00.d 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1,10 @@
+#name: C6X DSBT attribute merging, 0 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-dsbt-0.s
+#source: attr-dsbt-0.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
Index: ld/testsuite/ld-tic6x/attr-dsbt-01.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/attr-dsbt-01.d
diff -N ld/testsuite/ld-tic6x/attr-dsbt-01.d
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/attr-dsbt-01.d 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1,6 @@
+#name: C6X DSBT attribute merging, 0 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-dsbt-0.s
+#source: attr-dsbt-1.s
+#warning: .*differ in whether code is compiled for DSBT
Index: ld/testsuite/ld-tic6x/attr-dsbt-1.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/attr-dsbt-1.s
diff -N ld/testsuite/ld-tic6x/attr-dsbt-1.s
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/attr-dsbt-1.s 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1 @@
+.c6xabi_attribute Tag_ABI_DSBT, 1
Index: ld/testsuite/ld-tic6x/attr-dsbt-10.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/attr-dsbt-10.d
diff -N ld/testsuite/ld-tic6x/attr-dsbt-10.d
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/attr-dsbt-10.d 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1,6 @@
+#name: C6X DSBT attribute merging, 1 0
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-dsbt-1.s
+#source: attr-dsbt-0.s
+#warning: .*differ in whether code is compiled for DSBT
Index: ld/testsuite/ld-tic6x/attr-dsbt-11.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/attr-dsbt-11.d
diff -N ld/testsuite/ld-tic6x/attr-dsbt-11.d
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/attr-dsbt-11.d 29 Oct 2010 00:03:13 -0000
@@ -0,0 +1,11 @@
+#name: C6X DSBT attribute merging, 1 1
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: attr-dsbt-1.s
+#source: attr-dsbt-1.s
+#readelf: -A
+
+Attribute Section: c6xabi
+File Attributes
+ Tag_ISA: C674x
+ Tag_ABI_DSBT: DSBT addressing used
--
Joseph S. Myers
joseph@codesourcery.com