diff options
24 files changed, 189 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8fbaed2..a45bac7 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +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. + 2010-10-25 Daniel Jacobowitz <dan@codesourcery.com> * elf-bfd.h (RELOC_AGAINST_DISCARDED_SECTION): Always call diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c index 3d76648..219e73d 100644 --- a/bfd/elf32-tic6x.c +++ b/bfd/elf32-tic6x.c @@ -1723,6 +1723,12 @@ elf32_tic6x_merge_attributes (bfd *ibfd, bfd *obfd) = 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); diff --git a/binutils/ChangeLog b/binutils/ChangeLog index eb2f14b..7b6db60 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2010-10-29 Bernd Schmidt <bernds@codesourcery.com> + Joseph Myers <joseph@codesourcery.com> + + * readelf.c (display_tic6x_attribute): Handle Tag_ABI_DSBT. + 2010-10-28 Nick Clifton <nickc@redhat.com> PR binutils/12058 diff --git a/binutils/readelf.c b/binutils/readelf.c index 76337d5..f1ecd20 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -10810,6 +10810,24 @@ display_tic6x_attribute (unsigned char * p) } 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. */ diff --git a/gas/ChangeLog b/gas/ChangeLog index c328e88..3e083fe 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,18 @@ +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. + 2010-10-28 Matthias Klose <doko@ubuntu.com> * doc/as.texinfo: Add directory section for info document. diff --git a/gas/config/tc-tic6x.c b/gas/config/tc-tic6x.c index 832491d..2f51466 100644 --- a/gas/config/tc-tic6x.c +++ b/gas/config/tc-tic6x.c @@ -50,6 +50,8 @@ enum OPTION_MNO_ATOMIC, OPTION_MBIG_ENDIAN, OPTION_MLITTLE_ENDIAN, + OPTION_MDSBT, + OPTION_MNO_DSBT, OPTION_MGENERATE_REL }; @@ -60,6 +62,8 @@ struct option md_longopts[] = { "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 @@ static bfd_boolean tic6x_compact_insns; /* 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 @@ md_parse_option (int c, char *arg) 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 @@ md_show_usage (FILE *stream ATTRIBUTE_UNUSED) 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 @@ typedef struct 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_set_attributes (void) 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 diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo index 3b78dc6..0c4662b 100644 --- a/gas/doc/as.texinfo +++ b/gas/doc/as.texinfo @@ -476,7 +476,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}. @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 @@ present. This option overrides such a default from the architecture, 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 diff --git a/gas/doc/c-tic6x.texi b/gas/doc/c-tic6x.texi index 7243a98..e729cac 100644 --- a/gas/doc/c-tic6x.texi +++ b/gas/doc/c-tic6x.texi @@ -48,6 +48,17 @@ present. This option overrides such a default from the architecture, 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 @@ These have the same effects as @option{-matomic} and @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 diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 9e12d93..0a51584 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,13 @@ +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. + 2010-10-28 Thomas Schwinge <thomas@schwinge.name> * gas/iq2000/load-hazards.exp: Sort all filename globs. diff --git a/gas/testsuite/gas/tic6x/attr-dsbt-directive-1.d b/gas/testsuite/gas/tic6x/attr-dsbt-directive-1.d new file mode 100644 index 0000000..bee901f --- /dev/null +++ b/gas/testsuite/gas/tic6x/attr-dsbt-directive-1.d @@ -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 diff --git a/gas/testsuite/gas/tic6x/attr-dsbt-directive-1.s b/gas/testsuite/gas/tic6x/attr-dsbt-directive-1.s new file mode 100644 index 0000000..97d952b --- /dev/null +++ b/gas/testsuite/gas/tic6x/attr-dsbt-directive-1.s @@ -0,0 +1 @@ + .c6xabi_attribute Tag_ABI_DSBT, 1 diff --git a/gas/testsuite/gas/tic6x/attr-dsbt-directive-2.d b/gas/testsuite/gas/tic6x/attr-dsbt-directive-2.d new file mode 100644 index 0000000..bee901f --- /dev/null +++ b/gas/testsuite/gas/tic6x/attr-dsbt-directive-2.d @@ -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 diff --git a/gas/testsuite/gas/tic6x/attr-dsbt-directive-2.s b/gas/testsuite/gas/tic6x/attr-dsbt-directive-2.s new file mode 100644 index 0000000..3818f12 --- /dev/null +++ b/gas/testsuite/gas/tic6x/attr-dsbt-directive-2.s @@ -0,0 +1 @@ + .c6xabi_attribute 12, 1 diff --git a/gas/testsuite/gas/tic6x/attr-dsbt-opts-mdsbt.d b/gas/testsuite/gas/tic6x/attr-dsbt-opts-mdsbt.d new file mode 100644 index 0000000..4e66f4a --- /dev/null +++ b/gas/testsuite/gas/tic6x/attr-dsbt-opts-mdsbt.d @@ -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 diff --git a/gas/testsuite/gas/tic6x/attr-dsbt-opts-mno-dsbt.d b/gas/testsuite/gas/tic6x/attr-dsbt-opts-mno-dsbt.d new file mode 100644 index 0000000..84f4c40 --- /dev/null +++ b/gas/testsuite/gas/tic6x/attr-dsbt-opts-mno-dsbt.d @@ -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 diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog index 9738df7..a8e25fd 100644 --- a/include/elf/ChangeLog +++ b/include/elf/ChangeLog @@ -1,3 +1,8 @@ +2010-10-29 Bernd Schmidt <bernds@codesourcery.com> + Joseph Myers <joseph@codesourcery.com> + + * tic6x-attrs.h (Tag_ABI_DSBT): New. + 2010-10-21 Joseph Myers <joseph@codesourcery.com> * tic6x-attrs.h (Tag_C6XABI_Tag_CPU_arch): Change to Tag_ISA, diff --git a/include/elf/tic6x-attrs.h b/include/elf/tic6x-attrs.h index 3783502..f131cff 100644 --- a/include/elf/tic6x-attrs.h +++ b/include/elf/tic6x-attrs.h @@ -23,3 +23,4 @@ name and value. */ TAG(Tag_ISA, 4) +TAG(Tag_ABI_DSBT, 12) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index c6771a6..246deef 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,10 @@ +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. + 2010-10-28 Thomas Schwinge <thomas@schwinge.name> * ld-scripts/script.exp: Sort all filename globs. diff --git a/ld/testsuite/ld-tic6x/attr-dsbt-0.s b/ld/testsuite/ld-tic6x/attr-dsbt-0.s new file mode 100644 index 0000000..abd72e3 --- /dev/null +++ b/ld/testsuite/ld-tic6x/attr-dsbt-0.s @@ -0,0 +1 @@ +.c6xabi_attribute Tag_ABI_DSBT, 0 diff --git a/ld/testsuite/ld-tic6x/attr-dsbt-00.d b/ld/testsuite/ld-tic6x/attr-dsbt-00.d new file mode 100644 index 0000000..c49752d --- /dev/null +++ b/ld/testsuite/ld-tic6x/attr-dsbt-00.d @@ -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 diff --git a/ld/testsuite/ld-tic6x/attr-dsbt-01.d b/ld/testsuite/ld-tic6x/attr-dsbt-01.d new file mode 100644 index 0000000..5f534a7 --- /dev/null +++ b/ld/testsuite/ld-tic6x/attr-dsbt-01.d @@ -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 diff --git a/ld/testsuite/ld-tic6x/attr-dsbt-1.s b/ld/testsuite/ld-tic6x/attr-dsbt-1.s new file mode 100644 index 0000000..75c972e --- /dev/null +++ b/ld/testsuite/ld-tic6x/attr-dsbt-1.s @@ -0,0 +1 @@ +.c6xabi_attribute Tag_ABI_DSBT, 1 diff --git a/ld/testsuite/ld-tic6x/attr-dsbt-10.d b/ld/testsuite/ld-tic6x/attr-dsbt-10.d new file mode 100644 index 0000000..283efab --- /dev/null +++ b/ld/testsuite/ld-tic6x/attr-dsbt-10.d @@ -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 diff --git a/ld/testsuite/ld-tic6x/attr-dsbt-11.d b/ld/testsuite/ld-tic6x/attr-dsbt-11.d new file mode 100644 index 0000000..d004c10 --- /dev/null +++ b/ld/testsuite/ld-tic6x/attr-dsbt-11.d @@ -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 |