2010-05-12 Doug Kwan <dougkwan@google.com>

elfcpp/ChangeLog

	* arm.h (Tag_FP_arch, Tag_ABI_align_needed, Tag_ABI_align_preserved,
	Tag_FP_HP_extension, Tag_MPextension_use_legacy): Rename from
	existing tags.
	(Tag_undefined40, Tag_undefined41, Tag_MPextension_use,
	Tag_undefined43): New tags.
	(Targ_VFP_arch, Tag_ABI_align8_needed, TAG_ABI_align8_preserved,
	Tag_VFP_HP_extension): Define aliases for backward compatiblity.

gold/ChangeLog

	* arm.cc (Target_arm::do_finalize_sections): Create an empty
	attributes section only if there no attributes section after merging.
	(Target_arm::merge_object_attributes): Move value of
	Tag_MPextension_use_legacy to that of Tag_MPextension_use.
	Handle Tag_DIV_use and Tag_MPextension_use_legacy.
	* testsuite/Makefile.am (check_SCRIPTS): Add arm_attr_merge.sh
	(check_DATA): Add arm_attr_merge_6.stdout, arm_attr_merge_6r_stdout
	and arm_attr_merge_7.stdout.
	(arm_attr_merge_6.stdout, arm_attr_merge_6 arm_attr_merge_6a.o
	arm_attr_merge_6b.o, arm_attr_merge_6r.stdout, arm_attr_merge_6r,
	arm_attr_merge_7.stdout, arm_attr_merge_7, arm_attr_merge_7a.o,
	arm_attr_merge_7b.o): New rules.
	(MOSTLYCLEANFILES): Add arm_attr_merge_6, arm_attr_merge_6r and
	arm_attr_merge_7
	* testsuite/Makefile.in: Regenerate.
	* testsuite/arm_attr_merge.sh: New file.
	* testsuite/arm_attr_merge_[67][ab].s: Same.
This commit is contained in:
Doug Kwan 2010-05-13 02:41:15 +00:00
parent 235f101c07
commit da59ad79a2
11 changed files with 254 additions and 14 deletions

View file

@ -1,3 +1,13 @@
2010-05-12 Doug Kwan <dougkwan@google.com>
* arm.h (Tag_FP_arch, Tag_ABI_align_needed, Tag_ABI_align_preserved,
Tag_FP_HP_extension, Tag_MPextension_use_legacy): Rename from
existing tags.
(Tag_undefined40, Tag_undefined41, Tag_MPextension_use,
Tag_undefined43): New tags.
(Targ_VFP_arch, Tag_ABI_align8_needed, TAG_ABI_align8_preserved,
Tag_VFP_HP_extension): Define aliases for backward compatiblity.
2010-03-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* elfcpp.h (VER_FLG_INFO): Define.

View file

@ -255,7 +255,7 @@ enum
Tag_CPU_arch_profile = 7,
Tag_ARM_ISA_use = 8,
Tag_THUMB_ISA_use = 9,
Tag_VFP_arch = 10,
Tag_FP_arch = 10,
Tag_WMMX_arch = 11,
Tag_Advanced_SIMD_arch = 12,
Tag_PCS_config = 13,
@ -269,8 +269,8 @@ enum
Tag_ABI_FP_exceptions = 21,
Tag_ABI_FP_user_exceptions = 22,
Tag_ABI_FP_number_model = 23,
Tag_ABI_align8_needed = 24,
Tag_ABI_align8_preserved = 25,
Tag_ABI_align_needed = 24,
Tag_ABI_align_preserved = 25,
Tag_ABI_enum_size = 26,
Tag_ABI_HardFP_use = 27,
Tag_ABI_VFP_args = 28,
@ -281,17 +281,28 @@ enum
Tag_undefined33 = 33,
Tag_CPU_unaligned_access = 34,
Tag_undefined35 = 35,
Tag_VFP_HP_extension = 36,
Tag_FP_HP_extension = 36,
Tag_undefined37 = 37,
Tag_ABI_FP_16bit_format = 38,
Tag_undefined39 = 39,
Tag_undefined40 = 40,
Tag_undefined41 = 41,
Tag_MPextension_use = 42,
Tag_undefined43 = 43,
Tag_DIV_use = 44,
Tag_nodefaults = 64,
Tag_also_compatible_with = 65,
Tag_T2EE_use = 66,
Tag_conformance = 67,
Tag_Virtualization_use = 68,
Tag_undefined69 = 69,
Tag_MPextension_use = 70
Tag_MPextension_use_legacy = 70,
// The following tags are legacy names for other tags.
Tag_VFP_arch = Tag_FP_arch,
Tag_ABI_align8_needed = Tag_ABI_align_needed,
Tag_ABI_align8_preserved = Tag_ABI_align_preserved,
Tag_VFP_HP_extension = Tag_FP_HP_extension
};
// Values for Tag_ABI_PCS_R9_use.

View file

@ -1,3 +1,23 @@
2010-05-12 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::do_finalize_sections): Create an empty
attributes section only if there no attributes section after merging.
(Target_arm::merge_object_attributes): Move value of
Tag_MPextension_use_legacy to that of Tag_MPextension_use.
Handle Tag_DIV_use and Tag_MPextension_use_legacy.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_attr_merge.sh
(check_DATA): Add arm_attr_merge_6.stdout, arm_attr_merge_6r_stdout
and arm_attr_merge_7.stdout.
(arm_attr_merge_6.stdout, arm_attr_merge_6 arm_attr_merge_6a.o
arm_attr_merge_6b.o, arm_attr_merge_6r.stdout, arm_attr_merge_6r,
arm_attr_merge_7.stdout, arm_attr_merge_7, arm_attr_merge_7a.o,
arm_attr_merge_7b.o): New rules.
(MOSTLYCLEANFILES): Add arm_attr_merge_6, arm_attr_merge_6r and
arm_attr_merge_7
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_attr_merge.sh: New file.
* testsuite/arm_attr_merge_[67][ab].s: Same.
2010-05-05 Nick Clifton <nickc@redhat.com>
* po/es.po: Updated Spanish translation.

View file

@ -7998,11 +7998,6 @@ Target_arm<big_endian>::do_finalize_sections(
const Input_objects* input_objects,
Symbol_table* symtab)
{
// Create an empty uninitialized attribute section if we still don't have it
// at this moment.
if (this->attributes_section_data_ == NULL)
this->attributes_section_data_ = new Attributes_section_data(NULL, 0);
// Merge processor-specific flags.
for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
p != input_objects->relobj_end();
@ -8033,6 +8028,12 @@ Target_arm<big_endian>::do_finalize_sections(
arm_dynobj->attributes_section_data());
}
// Create an empty uninitialized attribute section if we still don't have it
// at this moment. This happens if there is no attributes sections in all
// inputs.
if (this->attributes_section_data_ == NULL)
this->attributes_section_data_ = new Attributes_section_data(NULL, 0);
// Check BLX use.
const Object_attribute* cpu_arch_attr =
this->get_aeabi_object_attribute(elfcpp::Tag_CPU_arch);
@ -9427,13 +9428,35 @@ Target_arm<big_endian>::merge_object_attributes(
return;
// If output has no object attributes, just copy.
const int vendor = Object_attribute::OBJ_ATTR_PROC;
if (this->attributes_section_data_ == NULL)
{
this->attributes_section_data_ = new Attributes_section_data(*pasd);
Object_attribute* out_attr =
this->attributes_section_data_->known_attributes(vendor);
// We do not output objects with Tag_MPextension_use_legacy - we move
// the attribute's value to Tag_MPextension_use. */
if (out_attr[elfcpp::Tag_MPextension_use_legacy].int_value() != 0)
{
if (out_attr[elfcpp::Tag_MPextension_use].int_value() != 0
&& out_attr[elfcpp::Tag_MPextension_use_legacy].int_value()
!= out_attr[elfcpp::Tag_MPextension_use].int_value())
{
gold_error(_("%s has both the current and legacy "
"Tag_MPextension_use attributes"),
name);
}
out_attr[elfcpp::Tag_MPextension_use] =
out_attr[elfcpp::Tag_MPextension_use_legacy];
out_attr[elfcpp::Tag_MPextension_use_legacy].set_type(0);
out_attr[elfcpp::Tag_MPextension_use_legacy].set_int_value(0);
}
return;
}
const int vendor = Object_attribute::OBJ_ATTR_PROC;
const Object_attribute* in_attr = pasd->known_attributes(vendor);
Object_attribute* out_attr =
this->attributes_section_data_->known_attributes(vendor);
@ -9759,6 +9782,51 @@ Target_arm<big_endian>::merge_object_attributes(
out_attr[i].set_int_value(in_attr[i].int_value());
break;
case elfcpp::Tag_DIV_use:
// This tag is set to zero if we can use UDIV and SDIV in Thumb
// mode on a v7-M or v7-R CPU; to one if we can not use UDIV or
// SDIV at all; and to two if we can use UDIV or SDIV on a v7-A
// CPU. We will merge as follows: If the input attribute's value
// is one then the output attribute's value remains unchanged. If
// the input attribute's value is zero or two then if the output
// attribute's value is one the output value is set to the input
// value, otherwise the output value must be the same as the
// inputs. */
if (in_attr[i].int_value() != 1 && out_attr[i].int_value() != 1)
{
if (in_attr[i].int_value() != out_attr[i].int_value())
{
gold_error(_("DIV usage mismatch between %s and output"),
name);
}
}
if (in_attr[i].int_value() != 1)
out_attr[i].set_int_value(in_attr[i].int_value());
break;
case elfcpp::Tag_MPextension_use_legacy:
// We don't output objects with Tag_MPextension_use_legacy - we
// move the value to Tag_MPextension_use.
if (in_attr[i].int_value() != 0
&& in_attr[elfcpp::Tag_MPextension_use].int_value() != 0)
{
if (in_attr[elfcpp::Tag_MPextension_use].int_value()
!= in_attr[i].int_value())
{
gold_error(_("%s has has both the current and legacy "
"Tag_MPextension_use attributes"),
name);
}
}
if (in_attr[i].int_value()
> out_attr[elfcpp::Tag_MPextension_use].int_value())
out_attr[elfcpp::Tag_MPextension_use] = in_attr[i];
break;
case elfcpp::Tag_nodefaults:
// This tag is set if it exists, but the value is unused (and is
// typically zero). We don't actually need to do anything here -

View file

@ -1666,4 +1666,40 @@ arm_no_fix_v4bx: arm_fix_v4bx.o ../ld-new
MOSTLYCLEANFILES += arm_fix_v4bx arm_fix_v4bx_interworking arm_no_fix_v4bx
check_SCRIPTS += arm_attr_merge.sh
check_DATA += arm_attr_merge_6.stdout arm_attr_merge_6r.stdout \
arm_attr_merge_7.stdout
arm_attr_merge_6.stdout: arm_attr_merge_6
$(TEST_READELF) -A $< > $@
arm_attr_merge_6: arm_attr_merge_6a.o arm_attr_merge_6b.o
../ld-new -o $@ arm_attr_merge_6a.o arm_attr_merge_6b.o
arm_attr_merge_6a.o: arm_attr_merge_6a.s
$(TEST_AS) -o $@ $<
arm_attr_merge_6b.o: arm_attr_merge_6b.s
$(TEST_AS) -o $@ $<
arm_attr_merge_6r.stdout: arm_attr_merge_6r
$(TEST_READELF) -A $< > $@
arm_attr_merge_6r: arm_attr_merge_6b.o arm_attr_merge_6a.o
../ld-new -o $@ arm_attr_merge_6b.o arm_attr_merge_6a.o
arm_attr_merge_7.stdout: arm_attr_merge_7
$(TEST_READELF) -A $< > $@
arm_attr_merge_7: arm_attr_merge_7a.o arm_attr_merge_7b.o
../ld-new -o $@ arm_attr_merge_7a.o arm_attr_merge_7b.o
arm_attr_merge_7a.o: arm_attr_merge_7a.s
$(TEST_AS) -o $@ $<
arm_attr_merge_7b.o: arm_attr_merge_7b.s
$(TEST_AS) -o $@ $<
MOSTLYCLEANFILES += arm_attr_merge_6 arm_attr_merge_6r arm_attr_merge_7
endif DEFAULT_TARGET_ARM

View file

@ -344,7 +344,7 @@ check_PROGRAMS = object_unittest$(EXEEXT) binary_unittest$(EXEEXT) \
@DEFAULT_TARGET_ARM_TRUE@am__append_38 = arm_abs_global.sh \
@DEFAULT_TARGET_ARM_TRUE@ arm_branch_in_range.sh \
@DEFAULT_TARGET_ARM_TRUE@ arm_fix_v4bx.sh
@DEFAULT_TARGET_ARM_TRUE@ arm_fix_v4bx.sh arm_attr_merge.sh
@DEFAULT_TARGET_ARM_TRUE@am__append_39 = arm_abs_global.stdout \
@DEFAULT_TARGET_ARM_TRUE@ arm_bl_in_range.stdout \
@DEFAULT_TARGET_ARM_TRUE@ arm_bl_out_of_range.stdout \
@ -358,7 +358,10 @@ check_PROGRAMS = object_unittest$(EXEEXT) binary_unittest$(EXEEXT) \
@DEFAULT_TARGET_ARM_TRUE@ thumb2_blx_out_of_range.stdout \
@DEFAULT_TARGET_ARM_TRUE@ arm_fix_v4bx.stdout \
@DEFAULT_TARGET_ARM_TRUE@ arm_fix_v4bx_interworking.stdout \
@DEFAULT_TARGET_ARM_TRUE@ arm_no_fix_v4bx.stdout
@DEFAULT_TARGET_ARM_TRUE@ arm_no_fix_v4bx.stdout \
@DEFAULT_TARGET_ARM_TRUE@ arm_attr_merge_6.stdout \
@DEFAULT_TARGET_ARM_TRUE@ arm_attr_merge_6r.stdout \
@DEFAULT_TARGET_ARM_TRUE@ arm_attr_merge_7.stdout
@DEFAULT_TARGET_ARM_TRUE@am__append_40 = arm_abs_global \
@DEFAULT_TARGET_ARM_TRUE@ arm_bl_in_range arm_bl_out_of_range \
@DEFAULT_TARGET_ARM_TRUE@ thumb_bl_in_range \
@ -370,7 +373,8 @@ check_PROGRAMS = object_unittest$(EXEEXT) binary_unittest$(EXEEXT) \
@DEFAULT_TARGET_ARM_TRUE@ thumb2_blx_in_range \
@DEFAULT_TARGET_ARM_TRUE@ thumb2_blx_out_of_range arm_fix_v4bx \
@DEFAULT_TARGET_ARM_TRUE@ arm_fix_v4bx_interworking \
@DEFAULT_TARGET_ARM_TRUE@ arm_no_fix_v4bx
@DEFAULT_TARGET_ARM_TRUE@ arm_no_fix_v4bx arm_attr_merge_6 \
@DEFAULT_TARGET_ARM_TRUE@ arm_attr_merge_6r arm_attr_merge_7
subdir = testsuite
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@ -1244,7 +1248,9 @@ host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_as_default = @install_as_default@
install_sh = @install_sh@
installed_linker = @installed_linker@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@ -3284,6 +3290,36 @@ uninstall-am:
@DEFAULT_TARGET_ARM_TRUE@arm_no_fix_v4bx: arm_fix_v4bx.o ../ld-new
@DEFAULT_TARGET_ARM_TRUE@ ../ld-new -o $@ $<
@DEFAULT_TARGET_ARM_TRUE@arm_attr_merge_6.stdout: arm_attr_merge_6
@DEFAULT_TARGET_ARM_TRUE@ $(TEST_READELF) -A $< > $@
@DEFAULT_TARGET_ARM_TRUE@arm_attr_merge_6: arm_attr_merge_6a.o arm_attr_merge_6b.o
@DEFAULT_TARGET_ARM_TRUE@ ../ld-new -o $@ arm_attr_merge_6a.o arm_attr_merge_6b.o
@DEFAULT_TARGET_ARM_TRUE@arm_attr_merge_6a.o: arm_attr_merge_6a.s
@DEFAULT_TARGET_ARM_TRUE@ $(TEST_AS) -o $@ $<
@DEFAULT_TARGET_ARM_TRUE@arm_attr_merge_6b.o: arm_attr_merge_6b.s
@DEFAULT_TARGET_ARM_TRUE@ $(TEST_AS) -o $@ $<
@DEFAULT_TARGET_ARM_TRUE@arm_attr_merge_6r.stdout: arm_attr_merge_6r
@DEFAULT_TARGET_ARM_TRUE@ $(TEST_READELF) -A $< > $@
@DEFAULT_TARGET_ARM_TRUE@arm_attr_merge_6r: arm_attr_merge_6b.o arm_attr_merge_6a.o
@DEFAULT_TARGET_ARM_TRUE@ ../ld-new -o $@ arm_attr_merge_6b.o arm_attr_merge_6a.o
@DEFAULT_TARGET_ARM_TRUE@arm_attr_merge_7.stdout: arm_attr_merge_7
@DEFAULT_TARGET_ARM_TRUE@ $(TEST_READELF) -A $< > $@
@DEFAULT_TARGET_ARM_TRUE@arm_attr_merge_7: arm_attr_merge_7a.o arm_attr_merge_7b.o
@DEFAULT_TARGET_ARM_TRUE@ ../ld-new -o $@ arm_attr_merge_7a.o arm_attr_merge_7b.o
@DEFAULT_TARGET_ARM_TRUE@arm_attr_merge_7a.o: arm_attr_merge_7a.s
@DEFAULT_TARGET_ARM_TRUE@ $(TEST_AS) -o $@ $<
@DEFAULT_TARGET_ARM_TRUE@arm_attr_merge_7b.o: arm_attr_merge_7b.s
@DEFAULT_TARGET_ARM_TRUE@ $(TEST_AS) -o $@ $<
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View file

@ -0,0 +1,44 @@
#!/bin/sh
# arm_attr_merge.sh -- test ARM attributes merging.
# Copyright 2010 Free Software Foundation, Inc.
# Written by Doug Kwan <dougkwan@google.com>
# This file is part of gold.
# 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.
# This file goes with the assembler source files arm_attr_merge*.s
check()
{
file=$1
pattern=$2
found=`grep "$pattern" $file`
if test -z "$found"; then
echo "pattern \"$pattern\" not found in file $file."
exit 1
fi
}
# This is a bit crude.
check arm_attr_merge_6.stdout "Tag_MPextension_use: Allowed"
check arm_attr_merge_6r.stdout "Tag_MPextension_use: Allowed"
check arm_attr_merge_7.stdout "Tag_MPextension_use: Allowed"
exit 0

View file

@ -0,0 +1,4 @@
.cpu cortex-a9
.fpu softvfp
.eabi_attribute 70, 1
.file "arm_attr_merge_6a.s"

View file

@ -0,0 +1,3 @@
.cpu cortex-a9
.fpu softvfp
.file "arm_attr_merge_6b.s"

View file

@ -0,0 +1,4 @@
.cpu cortex-a9
.fpu softvfp
.eabi_attribute 70, 1
.file "arm_attr_merge_7a.s"

View file

@ -0,0 +1,4 @@
.cpu cortex-a9
.fpu softvfp
.eabi_attribute Tag_MPextension_use, 1
.file "arm_attr_merge_7b.s"