PowerPC .gnu.attributes

This patch extends Tag_GNU_Power_ABI_FP to cover long double ABIs,
makes the assembler warn about undefined tag values, and removes
similar warnings from the linker.  I think it is better to not
warn in the linker about undefined tag values as future extensions to
the tags then won't result in likely bogus warnings.  This is
consistent with the fact that an older linker won't warn on an
entirely new tag.

include/
	* elf/ppc.h (Tag_GNU_Power_ABI_FP): Comment.
bfd/
	* elf-bfd.h (_bfd_elf_ppc_merge_fp_attributes): Declare.
	* elf32-ppc.c (_bfd_elf_ppc_merge_fp_attributes): New function.
	(ppc_elf_merge_obj_attributes): Use it.  Don't copy first file
	attributes, merge them.  Don't warn about undefined tag bits,
	or copy unknown values to output.
	* elf64-ppc.c (ppc64_elf_merge_private_bfd_data): Call
	_bfd_elf_ppc_merge_fp_attributes.
binutils/
	* readelf.c (display_power_gnu_attribute): Catch truncated section
	for all powerpc attributes.  Display long double ABI.  Don't
	capitalize words, except for names.  Show known bits of tag values
	when some unknown bits are present.  Whitespace fixes.
gas/
	* config/tc-ppc.c (ppc_elf_gnu_attribute): New function.
	(md_pseudo_table <ELF>): Handle "gnu_attribute".
ld/
	* testsuite/ld-powerpc/attr-gnu-4-4.s: Delete.
	* testsuite/ld-powerpc/attr-gnu-4-14.d: Delete.
	* testsuite/ld-powerpc/attr-gnu-4-24.d: Delete.
	* testsuite/ld-powerpc/attr-gnu-4-34.d: Delete.
	* testsuite/ld-powerpc/attr-gnu-4-41.d: Delete.
	* testsuite/ld-powerpc/attr-gnu-4-32.d: Adjust expected warning.
	* testsuite/ld-powerpc/attr-gnu-8-23.d: Likewise.
	* testsuite/ld-powerpc/attr-gnu-4-01.d: Adjust expected output.
	* testsuite/ld-powerpc/attr-gnu-4-02.d: Likewise.
	* testsuite/ld-powerpc/attr-gnu-4-03.d: Likewise.
	* testsuite/ld-powerpc/attr-gnu-4-10.d: Likewise.
	* testsuite/ld-powerpc/attr-gnu-4-11.d: Likewise.
	* testsuite/ld-powerpc/attr-gnu-4-20.d: Likewise.
	* testsuite/ld-powerpc/attr-gnu-4-22.d: Likewise.
	* testsuite/ld-powerpc/attr-gnu-4-33.d: Likewise.
	* testsuite/ld-powerpc/attr-gnu-8-11.d: Likewise.
	* testsuite/ld-powerpc/powerpc.exp: Don't run deleted tests.
This commit is contained in:
Alan Modra 2016-09-26 18:04:57 +09:30
parent 153679d55f
commit 005d79fd61
28 changed files with 271 additions and 183 deletions

View File

@ -1,3 +1,13 @@
2016-09-26 Alan Modra <amodra@gmail.com>
* elf-bfd.h (_bfd_elf_ppc_merge_fp_attributes): Declare.
* elf32-ppc.c (_bfd_elf_ppc_merge_fp_attributes): New function.
(ppc_elf_merge_obj_attributes): Use it. Don't copy first file
attributes, merge them. Don't warn about undefined tag bits,
or copy unknown values to output.
* elf64-ppc.c (ppc64_elf_merge_private_bfd_data): Call
_bfd_elf_ppc_merge_fp_attributes.
2016-09-23 Akihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>
PR ld/20595

View File

@ -2393,6 +2393,8 @@ extern unsigned int _bfd_elf_ppc_at_tprel_transform
(unsigned int, unsigned int);
/* PowerPC elf_object_p tweak. */
extern bfd_boolean _bfd_elf_ppc_set_arch (bfd *);
/* PowerPC .gnu.attributes handling common to both 32-bit and 64-bit. */
extern void _bfd_elf_ppc_merge_fp_attributes (bfd *, bfd *);
/* Exported interface for writing elf corefile notes. */
extern char *elfcore_write_note

View File

@ -4653,8 +4653,76 @@ ppc_elf_check_relocs (bfd *abfd,
return TRUE;
}
/* Warn for conflicting Tag_GNU_Power_ABI_FP attributes between IBFD
and OBFD, and merge non-conflicting ones. */
void
_bfd_elf_ppc_merge_fp_attributes (bfd *ibfd, bfd *obfd)
{
obj_attribute *in_attr, *in_attrs;
obj_attribute *out_attr, *out_attrs;
/* Merge object attributes from IBFD into OBFD. Raise an error if
in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
out_attrs = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
in_attr = &in_attrs[Tag_GNU_Power_ABI_FP];
out_attr = &out_attrs[Tag_GNU_Power_ABI_FP];
if (in_attr->i != out_attr->i)
{
int in_fp = in_attr->i & 3;
int out_fp = out_attr->i & 3;
if (in_fp == 0)
;
else if (out_fp == 0)
{
out_attr->type = 1;
out_attr->i ^= in_fp;
}
else if (out_fp != 2 && in_fp == 2)
_bfd_error_handler
(_("Warning: %B uses hard float, %B uses soft float"), obfd, ibfd);
else if (out_fp == 2 && in_fp != 2)
_bfd_error_handler
(_("Warning: %B uses hard float, %B uses soft float"), ibfd, obfd);
else if (out_fp == 1 && in_fp == 3)
_bfd_error_handler
(_("Warning: %B uses double-precision hard float, "
"%B uses single-precision hard float"), obfd, ibfd);
else if (out_fp == 3 && in_fp == 1)
_bfd_error_handler
(_("Warning: %B uses double-precision hard float, "
"%B uses single-precision hard float"), ibfd, obfd);
in_fp = in_attr->i & 0xc;
out_fp = out_attr->i & 0xc;
if (in_fp == 0)
;
else if (out_fp == 0)
{
out_attr->type = 1;
out_attr->i ^= in_fp;
}
else if (out_fp != 2 * 4 && in_fp == 2 * 4)
_bfd_error_handler
(_("Warning: %B uses 64-bit long double, "
"%B uses 128-bit long double"), ibfd, obfd);
else if (in_fp != 2 * 4 && out_fp == 2 * 4)
_bfd_error_handler
(_("Warning: %B uses 64-bit long double, "
"%B uses 128-bit long double"), obfd, ibfd);
else if (out_fp == 1 * 4 && in_fp == 3 * 4)
_bfd_error_handler
(_("Warning: %B uses IBM long double, "
"%B uses IEEE long double"), ibfd, obfd);
else if (out_fp == 3 * 4 && in_fp == 1 * 4)
_bfd_error_handler
(_("Warning: %B uses IBM long double, "
"%B uses IEEE long double"), obfd, ibfd);
}
}
/* Merge object attributes from IBFD into OBFD. Warn if
there are conflicting attributes. */
static bfd_boolean
ppc_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
@ -4662,108 +4730,47 @@ ppc_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
obj_attribute *in_attr, *in_attrs;
obj_attribute *out_attr, *out_attrs;
if (!elf_known_obj_attributes_proc (obfd)[0].i)
{
/* This is the first object. Copy the attributes. */
_bfd_elf_copy_obj_attributes (ibfd, obfd);
/* Use the Tag_null value to indicate the attributes have been
initialized. */
elf_known_obj_attributes_proc (obfd)[0].i = 1;
return TRUE;
}
_bfd_elf_ppc_merge_fp_attributes (ibfd, obfd);
in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
out_attrs = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
/* Check for conflicting Tag_GNU_Power_ABI_FP attributes and merge
non-conflicting ones. */
in_attr = &in_attrs[Tag_GNU_Power_ABI_FP];
out_attr = &out_attrs[Tag_GNU_Power_ABI_FP];
if (in_attr->i != out_attr->i)
{
out_attr->type = 1;
if (out_attr->i == 0)
out_attr->i = in_attr->i;
else if (in_attr->i == 0)
;
else if (out_attr->i == 1 && in_attr->i == 2)
_bfd_error_handler
(_("Warning: %B uses hard float, %B uses soft float"), obfd, ibfd);
else if (out_attr->i == 1 && in_attr->i == 3)
_bfd_error_handler
(_("Warning: %B uses double-precision hard float, %B uses single-precision hard float"),
obfd, ibfd);
else if (out_attr->i == 3 && in_attr->i == 1)
_bfd_error_handler
(_("Warning: %B uses double-precision hard float, %B uses single-precision hard float"),
ibfd, obfd);
else if (out_attr->i == 3 && in_attr->i == 2)
_bfd_error_handler
(_("Warning: %B uses soft float, %B uses single-precision hard float"),
ibfd, obfd);
else if (out_attr->i == 2 && (in_attr->i == 1 || in_attr->i == 3))
_bfd_error_handler
(_("Warning: %B uses hard float, %B uses soft float"), ibfd, obfd);
else if (in_attr->i > 3)
_bfd_error_handler
(_("Warning: %B uses unknown floating point ABI %d"), ibfd,
in_attr->i);
else
_bfd_error_handler
(_("Warning: %B uses unknown floating point ABI %d"), obfd,
out_attr->i);
}
/* Check for conflicting Tag_GNU_Power_ABI_Vector attributes and
merge non-conflicting ones. */
in_attr = &in_attrs[Tag_GNU_Power_ABI_Vector];
out_attr = &out_attrs[Tag_GNU_Power_ABI_Vector];
if (in_attr->i != out_attr->i)
{
const char *in_abi = NULL, *out_abi = NULL;
int in_vec = in_attr->i & 3;
int out_vec = out_attr->i & 3;
switch (in_attr->i)
{
case 1: in_abi = "generic"; break;
case 2: in_abi = "AltiVec"; break;
case 3: in_abi = "SPE"; break;
}
switch (out_attr->i)
{
case 1: out_abi = "generic"; break;
case 2: out_abi = "AltiVec"; break;
case 3: out_abi = "SPE"; break;
}
out_attr->type = 1;
if (out_attr->i == 0)
out_attr->i = in_attr->i;
else if (in_attr->i == 0)
if (in_vec == 0)
;
else if (out_vec == 0)
{
out_attr->type = 1;
out_attr->i = in_vec;
}
/* For now, allow generic to transition to AltiVec or SPE
without a warning. If GCC marked files with their stack
alignment and used don't-care markings for files which are
not affected by the vector ABI, we could warn about this
case too. */
else if (out_attr->i == 1)
out_attr->i = in_attr->i;
else if (in_attr->i == 1)
else if (in_vec == 1)
;
else if (in_abi == NULL)
else if (out_vec == 1)
{
out_attr->type = 1;
out_attr->i = in_vec;
}
else if (out_vec < in_vec)
_bfd_error_handler
(_("Warning: %B uses unknown vector ABI %d"), ibfd,
in_attr->i);
else if (out_abi == NULL)
(_("Warning: %B uses AltiVec vector ABI, %B uses SPE vector ABI"),
obfd, ibfd);
else if (out_vec > in_vec)
_bfd_error_handler
(_("Warning: %B uses unknown vector ABI %d"), obfd,
in_attr->i);
else
_bfd_error_handler
(_("Warning: %B uses vector ABI \"%s\", %B uses \"%s\""),
ibfd, obfd, in_abi, out_abi);
(_("Warning: %B uses AltiVec vector ABI, %B uses SPE vector ABI"),
ibfd, obfd);
}
/* Check for conflicting Tag_GNU_Power_ABI_Struct_Return attributes
@ -4772,25 +4779,24 @@ ppc_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
out_attr = &out_attrs[Tag_GNU_Power_ABI_Struct_Return];
if (in_attr->i != out_attr->i)
{
out_attr->type = 1;
if (out_attr->i == 0)
out_attr->i = in_attr->i;
else if (in_attr->i == 0)
int in_struct = in_attr->i & 3;
int out_struct = out_attr->i & 3;
if (in_struct == 0 || in_struct == 3)
;
else if (out_attr->i == 1 && in_attr->i == 2)
_bfd_error_handler
(_("Warning: %B uses r3/r4 for small structure returns, %B uses memory"), obfd, ibfd);
else if (out_attr->i == 2 && in_attr->i == 1)
_bfd_error_handler
(_("Warning: %B uses r3/r4 for small structure returns, %B uses memory"), ibfd, obfd);
else if (in_attr->i > 2)
_bfd_error_handler
(_("Warning: %B uses unknown small structure return convention %d"), ibfd,
in_attr->i);
else
_bfd_error_handler
(_("Warning: %B uses unknown small structure return convention %d"), obfd,
out_attr->i);
else if (out_struct == 0)
{
out_attr->type = 1;
out_attr->i = in_struct;
}
else if (out_struct < in_struct)
_bfd_error_handler
(_("Warning: %B uses r3/r4 for small structure returns, "
"%B uses memory"), obfd, ibfd);
else if (out_struct > in_struct)
_bfd_error_handler
(_("Warning: %B uses r3/r4 for small structure returns, "
"%B uses memory"), ibfd, obfd);
}
/* Merge Tag_compatibility attributes and any common GNU ones. */

View File

@ -6030,6 +6030,8 @@ ppc64_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
return FALSE;
}
_bfd_elf_ppc_merge_fp_attributes (ibfd, obfd);
/* Merge Tag_compatibility attributes and any common GNU ones. */
_bfd_elf_merge_object_attributes (ibfd, obfd);

View File

@ -1,3 +1,10 @@
2016-09-26 Alan Modra <amodra@gmail.com>
* readelf.c (display_power_gnu_attribute): Catch truncated section
for all powerpc attributes. Display long double ABI. Don't
capitalize words, except for names. Show known bits of tag values
when some unknown bits are present. Whitespace fixes.
2016-09-26 Alan Modra <amodra@gmail.com>
* nm.c (get_elf_symbol_type): Don't use sprintf with translated

View File

@ -13382,47 +13382,77 @@ display_power_gnu_attribute (unsigned char * p,
const unsigned char * const end)
{
unsigned int len;
int val;
unsigned int val;
if (tag == Tag_GNU_Power_ABI_FP)
{
val = read_uleb128 (p, &len, end);
p += len;
printf (" Tag_GNU_Power_ABI_FP: ");
if (len == 0)
{
printf (_("<corrupt>\n"));
return p;
}
switch (val)
if (val > 15)
printf ("(%#x), ", val);
switch (val & 3)
{
case 0:
printf (_("Hard or soft float\n"));
printf (_("unspecified hard/soft float, "));
break;
case 1:
printf (_("Hard float\n"));
printf (_("hard float, "));
break;
case 2:
printf (_("Soft float\n"));
printf (_("soft float, "));
break;
case 3:
printf (_("Single-precision hard float\n"));
printf (_("single-precision hard float, "));
break;
default:
printf ("??? (%d)\n", val);
}
switch (val & 0xC)
{
case 0:
printf (_("unspecified long double\n"));
break;
case 4:
printf (_("128-bit IBM long double\n"));
break;
case 8:
printf (_("64-bit long double\n"));
break;
case 12:
printf (_("128-bit IEEE long double\n"));
break;
}
return p;
}
}
if (tag == Tag_GNU_Power_ABI_Vector)
{
val = read_uleb128 (p, &len, end);
p += len;
printf (" Tag_GNU_Power_ABI_Vector: ");
switch (val)
if (len == 0)
{
printf (_("<corrupt>\n"));
return p;
}
if (val > 3)
printf ("(%#x), ", val);
switch (val & 3)
{
case 0:
printf (_("Any\n"));
printf (_("unspecified\n"));
break;
case 1:
printf (_("Generic\n"));
printf (_("generic\n"));
break;
case 2:
printf ("AltiVec\n");
@ -13430,39 +13460,39 @@ display_power_gnu_attribute (unsigned char * p,
case 3:
printf ("SPE\n");
break;
default:
printf ("??? (%d)\n", val);
break;
}
return p;
}
}
if (tag == Tag_GNU_Power_ABI_Struct_Return)
{
if (p == end)
{
warn (_("corrupt Tag_GNU_Power_ABI_Struct_Return\n"));
return p;
}
val = read_uleb128 (p, &len, end);
p += len;
printf (" Tag_GNU_Power_ABI_Struct_Return: ");
switch (val)
{
case 0:
printf (_("Any\n"));
break;
case 1:
printf ("r3/r4\n");
break;
case 2:
printf (_("Memory\n"));
break;
default:
printf ("??? (%d)\n", val);
break;
}
if (len == 0)
{
printf (_("<corrupt>\n"));
return p;
}
if (val > 2)
printf ("(%#x), ", val);
switch (val & 3)
{
case 0:
printf (_("unspecified\n"));
break;
case 1:
printf ("r3/r4\n");
break;
case 2:
printf (_("memory\n"));
break;
case 3:
printf ("???\n");
break;
}
return p;
}

View File

@ -1,3 +1,8 @@
2016-09-26 Alan Modra <amodra@gmail.com>
* config/tc-ppc.c (ppc_elf_gnu_attribute): New function.
(md_pseudo_table <ELF>): Handle "gnu_attribute".
2016-09-22 Thomas Preud'homme <thomas.preudhomme@arm.com>
* config/tc-arm.c (v7m_psrs): Remove BASEPRI_MASK MRS/MSR special

View File

@ -133,6 +133,7 @@ static void ppc_elf_rdata (int);
static void ppc_elf_lcomm (int);
static void ppc_elf_localentry (int);
static void ppc_elf_abiversion (int);
static void ppc_elf_gnu_attribute (int);
#endif
#ifdef TE_PE
@ -270,6 +271,7 @@ const pseudo_typeS md_pseudo_table[] =
{ "lcomm", ppc_elf_lcomm, 0 },
{ "localentry", ppc_elf_localentry, 0 },
{ "abiversion", ppc_elf_abiversion, 0 },
{ "gnu_attribute", ppc_elf_gnu_attribute, 0},
#endif
#ifdef TE_PE
@ -2314,6 +2316,28 @@ ppc_elf_abiversion (int ignore ATTRIBUTE_UNUSED)
demand_empty_rest_of_line ();
}
/* Parse a .gnu_attribute directive. */
static void
ppc_elf_gnu_attribute (int ignored ATTRIBUTE_UNUSED)
{
int tag = obj_elf_vendor_attribute (OBJ_ATTR_GNU);
/* Check validity of defined powerpc tags. */
if (tag == Tag_GNU_Power_ABI_FP
|| tag == Tag_GNU_Power_ABI_Vector
|| tag == Tag_GNU_Power_ABI_Struct_Return)
{
unsigned int val;
val = bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_GNU, tag);
if ((tag == Tag_GNU_Power_ABI_FP && val > 15)
|| (tag == Tag_GNU_Power_ABI_Vector && val > 3)
|| (tag == Tag_GNU_Power_ABI_Struct_Return && val > 2))
as_warn (_("unknown .gnu_attribute value"));
}
}
/* Set ABI version in output file. */
void
ppc_elf_end (void)

View File

@ -1,3 +1,7 @@
2016-09-26 Alan Modra <amodra@gmail.com>
* elf/ppc.h (Tag_GNU_Power_ABI_FP): Comment on new values.
2016-09-21 Richard Sandiford <richard.sandiford@arm.com>
* opcode/aarch64.h (aarch64_cond): Bump array size to 4.

View File

@ -219,11 +219,18 @@ END_RELOC_NUMBERS (R_PPC_max)
enum
{
/* 0-3 are generic. */
Tag_GNU_Power_ABI_FP = 4, /* Value 1 for hard-float, 2 for
soft-float, 3 for single=precision
hard-float; 0 for not tagged or not
using any ABIs affected by the
differences. */
/* FP ABI, low 2 bits:
1 for double precision hard-float,
2 for soft-float,
3 for single precision hard-float.
0 for not tagged or not using any ABIs affected by the differences.
Next 2 bits:
1 for ibm long double
2 for 64-bit long double
3 for IEEE long double.
0 for not tagged or not using any ABIs affected by the differences. */
Tag_GNU_Power_ABI_FP = 4,
/* Value 1 for general purpose registers only, 2 for AltiVec
registers, 3 for SPE registers; 0 for not tagged or not using any

View File

@ -1,3 +1,23 @@
2016-09-26 Alan Modra <amodra@gmail.com>
* testsuite/ld-powerpc/attr-gnu-4-4.s: Delete.
* testsuite/ld-powerpc/attr-gnu-4-14.d: Delete.
* testsuite/ld-powerpc/attr-gnu-4-24.d: Delete.
* testsuite/ld-powerpc/attr-gnu-4-34.d: Delete.
* testsuite/ld-powerpc/attr-gnu-4-41.d: Delete.
* testsuite/ld-powerpc/attr-gnu-4-32.d: Adjust expected warning.
* testsuite/ld-powerpc/attr-gnu-8-23.d: Likewise.
* testsuite/ld-powerpc/attr-gnu-4-01.d: Adjust expected output.
* testsuite/ld-powerpc/attr-gnu-4-02.d: Likewise.
* testsuite/ld-powerpc/attr-gnu-4-03.d: Likewise.
* testsuite/ld-powerpc/attr-gnu-4-10.d: Likewise.
* testsuite/ld-powerpc/attr-gnu-4-11.d: Likewise.
* testsuite/ld-powerpc/attr-gnu-4-20.d: Likewise.
* testsuite/ld-powerpc/attr-gnu-4-22.d: Likewise.
* testsuite/ld-powerpc/attr-gnu-4-33.d: Likewise.
* testsuite/ld-powerpc/attr-gnu-8-11.d: Likewise.
* testsuite/ld-powerpc/powerpc.exp: Don't run deleted tests.
2016-09-23 Akihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>
PR ld/20595

View File

@ -7,4 +7,4 @@
Attribute Section: gnu
File Attributes
Tag_GNU_Power_ABI_FP: Hard float
Tag_GNU_Power_ABI_FP: hard float, unspecified long double

View File

@ -7,4 +7,4 @@
Attribute Section: gnu
File Attributes
Tag_GNU_Power_ABI_FP: Soft float
Tag_GNU_Power_ABI_FP: soft float, unspecified long double

View File

@ -7,4 +7,4 @@
Attribute Section: gnu
File Attributes
Tag_GNU_Power_ABI_FP: Single-precision hard float
Tag_GNU_Power_ABI_FP: single-precision hard float, unspecified long double

View File

@ -7,4 +7,4 @@
Attribute Section: gnu
File Attributes
Tag_GNU_Power_ABI_FP: Hard float
Tag_GNU_Power_ABI_FP: hard float, unspecified long double

View File

@ -7,4 +7,4 @@
Attribute Section: gnu
File Attributes
Tag_GNU_Power_ABI_FP: Hard float
Tag_GNU_Power_ABI_FP: hard float, unspecified long double

View File

@ -1,6 +0,0 @@
#source: attr-gnu-4-1.s
#source: attr-gnu-4-4.s
#as: -a32
#ld: -r -melf32ppc
#warning: Warning: .* uses unknown floating point ABI 4
#target: powerpc*-*-*

View File

@ -7,4 +7,4 @@
Attribute Section: gnu
File Attributes
Tag_GNU_Power_ABI_FP: Soft float
Tag_GNU_Power_ABI_FP: soft float, unspecified long double

View File

@ -7,4 +7,4 @@
Attribute Section: gnu
File Attributes
Tag_GNU_Power_ABI_FP: Soft float
Tag_GNU_Power_ABI_FP: soft float, unspecified long double

View File

@ -1,6 +0,0 @@
#source: attr-gnu-4-2.s
#source: attr-gnu-4-4.s
#as: -a32
#ld: -r -melf32ppc
#warning: Warning: .* uses unknown floating point ABI 4
#target: powerpc*-*-*

View File

@ -2,5 +2,5 @@
#source: attr-gnu-4-2.s
#as: -a32
#ld: -r -melf32ppc
#warning: Warning: .* uses soft float, .* uses single-precision hard float
#warning: Warning: .* uses hard float, .* uses soft float
#target: powerpc*-*-*

View File

@ -7,4 +7,4 @@
Attribute Section: gnu
File Attributes
Tag_GNU_Power_ABI_FP: Single-precision hard float
Tag_GNU_Power_ABI_FP: single-precision hard float, unspecified long double

View File

@ -1,6 +0,0 @@
#source: attr-gnu-4-3.s
#source: attr-gnu-4-4.s
#as: -a32
#ld: -r -melf32ppc
#warning: Warning: .* uses unknown floating point ABI 4
#target: powerpc*-*-*

View File

@ -1 +0,0 @@
.gnu_attribute 4,4

View File

@ -1,6 +0,0 @@
#source: attr-gnu-4-4.s
#source: attr-gnu-4-1.s
#as: -a32
#ld: -r -melf32ppc
#warning: Warning: .* uses unknown floating point ABI 4
#target: powerpc*-*-*

View File

@ -7,4 +7,4 @@
Attribute Section: gnu
File Attributes
Tag_GNU_Power_ABI_Vector: Generic
Tag_GNU_Power_ABI_Vector: generic

View File

@ -2,5 +2,5 @@
#source: attr-gnu-8-3.s
#as: -a32
#ld: -r -melf32ppc
#warning: Warning: .* uses vector ABI "SPE", .* uses "AltiVec"
#warning: Warning: .* uses AltiVec vector ABI, .* uses SPE vector ABI
#target: powerpc*-*-*

View File

@ -319,17 +319,13 @@ run_dump_test "attr-gnu-4-10"
run_dump_test "attr-gnu-4-11"
run_dump_test "attr-gnu-4-12"
run_dump_test "attr-gnu-4-13"
run_dump_test "attr-gnu-4-14"
run_dump_test "attr-gnu-4-20"
run_dump_test "attr-gnu-4-21"
run_dump_test "attr-gnu-4-22"
run_dump_test "attr-gnu-4-23"
run_dump_test "attr-gnu-4-24"
run_dump_test "attr-gnu-4-31"
run_dump_test "attr-gnu-4-32"
run_dump_test "attr-gnu-4-33"
run_dump_test "attr-gnu-4-34"
run_dump_test "attr-gnu-4-41"
run_dump_test "attr-gnu-8-11"
run_dump_test "attr-gnu-8-23"