* elf32-ppc.c (ppc_elf_merge_obj_attributes): Add support for
Tag_GNU_Power_ABI_Vector. * readelf.c (display_power_gnu_attribute): Add support for Tag_GNU_Power_ABI_Vector. * ppc.h (Tag_GNU_Power_ABI_Vector): New. * ld-powerpc/attr-gnu-8-1.s, ld-powerpc/attr-gnu-8-11.d, ld-powerpc/attr-gnu-8-2.s, ld-powerpc/attr-gnu-8-23.d, ld-powerpc/attr-gnu-8-3.s, ld-powerpc/attr-gnu-8-31.d: New. * ld-powerpc/powerpc.exp: Run new tests.
This commit is contained in:
parent
7c8b76cc17
commit
c6e653525f
14 changed files with 152 additions and 16 deletions
|
@ -1,3 +1,8 @@
|
|||
2007-10-25 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* elf32-ppc.c (ppc_elf_merge_obj_attributes): Add support for
|
||||
Tag_GNU_Power_ABI_Vector.
|
||||
|
||||
2007-10-25 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Do not add
|
||||
|
|
|
@ -3603,8 +3603,8 @@ ppc_elf_check_relocs (bfd *abfd,
|
|||
static bfd_boolean
|
||||
ppc_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
|
||||
{
|
||||
obj_attribute *in_attr;
|
||||
obj_attribute *out_attr;
|
||||
obj_attribute *in_attr, *in_attrs;
|
||||
obj_attribute *out_attr, *out_attrs;
|
||||
|
||||
if (!elf_known_obj_attributes_proc (obfd)[0].i)
|
||||
{
|
||||
|
@ -3618,33 +3618,84 @@ ppc_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
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 = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
|
||||
out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
|
||||
if (in_attr[Tag_GNU_Power_ABI_FP].i != out_attr[Tag_GNU_Power_ABI_FP].i)
|
||||
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[Tag_GNU_Power_ABI_FP].type = 1;
|
||||
if (out_attr[Tag_GNU_Power_ABI_FP].i == 0)
|
||||
out_attr[Tag_GNU_Power_ABI_FP].i = in_attr[Tag_GNU_Power_ABI_FP].i;
|
||||
else if (in_attr[Tag_GNU_Power_ABI_FP].i == 0)
|
||||
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[Tag_GNU_Power_ABI_FP].i == 1
|
||||
&& in_attr[Tag_GNU_Power_ABI_FP].i == 2)
|
||||
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[Tag_GNU_Power_ABI_FP].i == 2
|
||||
&& in_attr[Tag_GNU_Power_ABI_FP].i == 1)
|
||||
else if (out_attr->i == 2 && in_attr->i == 1)
|
||||
_bfd_error_handler
|
||||
(_("Warning: %B uses hard float, %B uses soft float"), ibfd, obfd);
|
||||
else if (in_attr[Tag_GNU_Power_ABI_FP].i > 2)
|
||||
else if (in_attr->i > 2)
|
||||
_bfd_error_handler
|
||||
(_("Warning: %B uses unknown floating point ABI %d"), ibfd,
|
||||
in_attr[Tag_GNU_Power_ABI_FP].i);
|
||||
in_attr->i);
|
||||
else
|
||||
_bfd_error_handler
|
||||
(_("Warning: %B uses unknown floating point ABI %d"), obfd,
|
||||
out_attr[Tag_GNU_Power_ABI_FP].i);
|
||||
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;
|
||||
|
||||
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)
|
||||
;
|
||||
/* 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_abi == NULL)
|
||||
_bfd_error_handler
|
||||
(_("Warning: %B uses unknown vector ABI %d"), ibfd,
|
||||
in_attr->i);
|
||||
else if (out_abi == NULL)
|
||||
_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);
|
||||
}
|
||||
|
||||
/* Merge Tag_compatibility attributes and any common GNU ones. */
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2007-10-25 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* readelf.c (display_power_gnu_attribute): Add support for
|
||||
Tag_GNU_Power_ABI_Vector.
|
||||
|
||||
2007-10-25 Carlos Eduardo Seo <cseo@linux.vnet.ibm.com>
|
||||
|
||||
* readelf.c (get_note_type): Handle NT_PPC_VMX.
|
||||
|
|
|
@ -8553,6 +8553,32 @@ display_power_gnu_attribute (unsigned char *p, int tag)
|
|||
return p;
|
||||
}
|
||||
|
||||
if (tag == Tag_GNU_Power_ABI_Vector)
|
||||
{
|
||||
val = read_uleb128 (p, &len);
|
||||
p += len;
|
||||
printf (" Tag_GNU_Power_ABI_Vector: ");
|
||||
switch (val)
|
||||
{
|
||||
case 0:
|
||||
printf ("Any\n");
|
||||
break;
|
||||
case 1:
|
||||
printf ("Generic\n");
|
||||
break;
|
||||
case 2:
|
||||
printf ("AltiVec\n");
|
||||
break;
|
||||
case 3:
|
||||
printf ("SPE\n");
|
||||
break;
|
||||
default:
|
||||
printf ("??? (%d)\n", val);
|
||||
break;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
if (tag & 1)
|
||||
type = 1; /* String. */
|
||||
else
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2007-10-25 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* ppc.h (Tag_GNU_Power_ABI_Vector): New.
|
||||
|
||||
2007-10-19 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* mn10300.h: Add R_MN10300_SYM_DIFF reloc.
|
||||
|
|
|
@ -180,6 +180,11 @@ enum
|
|||
soft-float; 0 for not tagged or not
|
||||
using any ABIs affected by the
|
||||
differences. */
|
||||
|
||||
/* Value 1 for general purpose registers only, 2 for AltiVec
|
||||
registers, 3 for SPE registers; 0 for not tagged or not using any
|
||||
ABIs affected by the differences. */
|
||||
Tag_GNU_Power_ABI_Vector = 8,
|
||||
};
|
||||
|
||||
#endif /* _ELF_PPC_H */
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2007-10-25 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* ld-powerpc/attr-gnu-8-1.s, ld-powerpc/attr-gnu-8-11.d,
|
||||
ld-powerpc/attr-gnu-8-2.s, ld-powerpc/attr-gnu-8-23.d,
|
||||
ld-powerpc/attr-gnu-8-3.s, ld-powerpc/attr-gnu-8-31.d: New.
|
||||
* ld-powerpc/powerpc.exp: Run new tests.
|
||||
|
||||
2007-10-19 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* ld-mn10300: New test directory.
|
||||
|
|
1
ld/testsuite/ld-powerpc/attr-gnu-8-1.s
Normal file
1
ld/testsuite/ld-powerpc/attr-gnu-8-1.s
Normal file
|
@ -0,0 +1 @@
|
|||
.gnu_attribute 8,1
|
10
ld/testsuite/ld-powerpc/attr-gnu-8-11.d
Normal file
10
ld/testsuite/ld-powerpc/attr-gnu-8-11.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: attr-gnu-8-1.s
|
||||
#source: attr-gnu-8-1.s
|
||||
#as: -a32
|
||||
#ld: -r -melf32ppc
|
||||
#readelf: -A
|
||||
#target: powerpc*-*-*
|
||||
|
||||
Attribute Section: gnu
|
||||
File Attributes
|
||||
Tag_GNU_Power_ABI_Vector: Generic
|
1
ld/testsuite/ld-powerpc/attr-gnu-8-2.s
Normal file
1
ld/testsuite/ld-powerpc/attr-gnu-8-2.s
Normal file
|
@ -0,0 +1 @@
|
|||
.gnu_attribute 8,2
|
6
ld/testsuite/ld-powerpc/attr-gnu-8-23.d
Normal file
6
ld/testsuite/ld-powerpc/attr-gnu-8-23.d
Normal file
|
@ -0,0 +1,6 @@
|
|||
#source: attr-gnu-8-2.s
|
||||
#source: attr-gnu-8-3.s
|
||||
#as: -a32
|
||||
#ld: -r -melf32ppc
|
||||
#warning: Warning: .* uses vector ABI "SPE", .* uses "AltiVec"
|
||||
#target: powerpc*-*-*
|
1
ld/testsuite/ld-powerpc/attr-gnu-8-3.s
Normal file
1
ld/testsuite/ld-powerpc/attr-gnu-8-3.s
Normal file
|
@ -0,0 +1 @@
|
|||
.gnu_attribute 8,3
|
10
ld/testsuite/ld-powerpc/attr-gnu-8-31.d
Normal file
10
ld/testsuite/ld-powerpc/attr-gnu-8-31.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: attr-gnu-8-3.s
|
||||
#source: attr-gnu-8-1.s
|
||||
#as: -a32
|
||||
#ld: -r -melf32ppc
|
||||
#readelf: -A
|
||||
#target: powerpc*-*-*
|
||||
|
||||
Attribute Section: gnu
|
||||
File Attributes
|
||||
Tag_GNU_Power_ABI_Vector: SPE
|
|
@ -165,3 +165,7 @@ 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-31"
|
||||
|
||||
run_dump_test "attr-gnu-8-11"
|
||||
run_dump_test "attr-gnu-8-23"
|
||||
run_dump_test "attr-gnu-8-31"
|
||||
|
|
Loading…
Reference in a new issue