This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, ARM] Add support for value 3 of Tag_ABI_VFP_args attribute


On Tue, Dec 23, 2014 at 01:32:16PM +0000, Nicholas Clifton wrote:
> >*** gold/ChangeLog ***
> >
> >2014-11-06  Thomas Preud'homme  <thomas.preudhomme@arm.com>
> >
> >	* arm.cc (Target_arm::do_adjust_elf_header): Set e_flags in ELF header
> >	as hard float only when Tag_ABI_VFP_args is 1, using new enum value
> >	AEABI_VFP_args_vfp to check that.
> >	(Target_arm::merge_object_attributes): Handle new Tag_ABI_VFP_args
> >	value and replace hardcoded values by enum values.

This part doesn't even compile.  :-(

Committing the following to fix it.

elfcpp/
	* arm.h: Add enums for Tag_ABI_FP_number_model and Tag_ABI_VFP_args.
gold/
	* arm.cc (Target_arm::do_adjust_elf_header): Provide namespace on
	new enums.
	(Target_arm::merge_object_attributes, ): Likewise.

diff --git a/elfcpp/arm.h b/elfcpp/arm.h
index 8c6b6bf..8a86595 100644
--- a/elfcpp/arm.h
+++ b/elfcpp/arm.h
@@ -340,6 +340,24 @@ enum
   AEABI_enum_forced_wide = 3
 };
 
+// Values for Tag_ABI_FP_number_model.
+enum
+{
+  AEABI_FP_number_model_none = 0,
+  AEABI_FP_number_model_ieee754_number = 1,
+  AEABI_FP_number_model_rtabi = 2,
+  AEABI_FP_number_model_ieee754_all = 3
+};
+
+// Values for Tag_ABI_VFP_args.
+enum
+{
+  AEABI_VFP_args_base = 0,
+  AEABI_VFP_args_vfp = 1,
+  AEABI_VFP_args_toolchain = 2,
+  AEABI_VFP_args_compatible = 3
+};
+
 // For Exception Index Table. (Exception handling ABI for the ARM
 // architectue, Section 5)
 enum
diff --git a/gold/arm.cc b/gold/arm.cc
index 4186a2a..8485ab3 100644
--- a/gold/arm.cc
+++ b/gold/arm.cc
@@ -10056,7 +10056,7 @@ Target_arm<big_endian>::do_adjust_elf_header(
     if (type == elfcpp::ET_EXEC || type == elfcpp::ET_DYN)
       {
 	Object_attribute* attr = this->get_aeabi_object_attribute(elfcpp::Tag_ABI_VFP_args);
-	if (attr->int_value() == AEABI_VFP_args_vfp)
+	if (attr->int_value() == elfcpp::AEABI_VFP_args_vfp)
 	  flags |= elfcpp::EF_ARM_ABI_FLOAT_HARD;
 	else
 	  flags |= elfcpp::EF_ARM_ABI_FLOAT_SOFT;
@@ -10494,17 +10494,17 @@ Target_arm<big_endian>::merge_object_attributes(
     {
       // Ignore mismatches if the object doesn't use floating point.  */
       if (out_attr[elfcpp::Tag_ABI_FP_number_model].int_value()
-	  == AEABI_FP_number_model_none
+	  == elfcpp::AEABI_FP_number_model_none
 	  || (in_attr[elfcpp::Tag_ABI_FP_number_model].int_value()
-	      != AEABI_FP_number_model_none
+	      != elfcpp::AEABI_FP_number_model_none
 	      && out_attr[elfcpp::Tag_ABI_VFP_args].int_value()
-		 == AEABI_VFP_args_compatible))
+		 == elfcpp::AEABI_VFP_args_compatible))
 	out_attr[elfcpp::Tag_ABI_VFP_args].set_int_value(
 	    in_attr[elfcpp::Tag_ABI_VFP_args].int_value());
       else if (in_attr[elfcpp::Tag_ABI_FP_number_model].int_value()
-	       != AEABI_FP_number_model_none
+	       != elfcpp::AEABI_FP_number_model_none
 	       && in_attr[elfcpp::Tag_ABI_VFP_args].int_value()
-		  != AEABI_VFP_args_compatible
+		  != elfcpp::AEABI_VFP_args_compatible
 	       && parameters->options().warn_mismatch())
 	gold_error(_("%s uses VFP register arguments, output does not"),
 		   name);

-- 
Alan Modra
Australia Development Lab, IBM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]