public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* RFC: ARM: Add comment enumerating emitted .eabi_attribute tags
@ 2011-09-27 15:51 Nick Clifton
  2011-09-27 16:47 ` Ramana Radhakrishnan
  2011-09-27 16:49 ` Richard Henderson
  0 siblings, 2 replies; 8+ messages in thread
From: Nick Clifton @ 2011-09-27 15:51 UTC (permalink / raw)
  To: richard.earnshaw, paul, ramana.radhakrishnan; +Cc: gcc-patches

Hi Richard, Hi Paul, Hi Ramana,

  I am planning to check in the patch below to add comments to the
  .eabi_attribute directives emitted by the ARM GCC backend.  So for
  example a simple hello world source file might compile to something
  like this:

        .cpu arm7tdmi
        .fpu softvfp
        .eabi_attribute 20, 1   @ Tag_ABI_FP_denormal
        .eabi_attribute 21, 1   @ Tag_ABI_FP_exceptions
        .eabi_attribute 23, 3   @ Tag_ABI_FP_number_model
   
  Apart from making the assembler output easier to understand, the patch
  also makes use of the enumerated tag values in the elf/arm.h header
  file, thus making sure that the compiler stays in sync with the
  header.

  I stuck with using numerical values in the actual .eabi_attribute
  directive as versions of GAS prior to 2.20 require this.
  
  Any comments or objections to this patch ?  If not, I will apply it
  next week.

Cheers
  Nick

gcc/ChangeLog
2011-09-27  Nick Clifton  <nickc@redhat.com>

	* config/arm/arm.c (EMIT_EABI_ATTRIBUTE): New macro.
	(arm_file_start): Use it to generate .eabi_attribute assembler
	pseudo-ops.

Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c	(revision 179269)
+++ gcc/config/arm/arm.c	(working copy)
@@ -22220,6 +22220,24 @@
     asm_fprintf (stream, "%U%s", name);
 }
 
+/* Get the definitions of the ARM EABI Attribute tag values.  */
+#define BFD_ARCH_SIZE
+#include "elf/arm.h"
+
+/* This macro is used to emit an EABI tag and its associated value.
+   We emit the numerical value of the tag in case the assembler does not
+   support textual tags.  (Eg gas prior to 2.20).  We include the tag
+   name in a comment so that anyone reading the assembler output will
+   know which tag is being set.  */
+#define EMIT_EABI_ATTRIBUTE(name,val)					\
+  do									\
+    {									\
+      asm_fprintf (asm_out_file, "\t.eabi_attribute %d, %d\t%s " #name "\n", \
+		   name, val, ASM_COMMENT_START);			\
+    }									\
+  while (0)
+	  
+
 static void
 arm_file_start (void)
 {
@@ -22248,12 +22266,13 @@
       else
 	{
 	  fpu_name = arm_fpu_desc->name;
+
 	  if (arm_fpu_desc->model == ARM_FP_MODEL_VFP)
 	    {
 	      if (TARGET_HARD_FLOAT)
-		asm_fprintf (asm_out_file, "\t.eabi_attribute 27, 3\n");
+		EMIT_EABI_ATTRIBUTE (Tag_ABI_HardFP_use, 3);
 	      if (TARGET_HARD_FLOAT_ABI)
-		asm_fprintf (asm_out_file, "\t.eabi_attribute 28, 1\n");
+		EMIT_EABI_ATTRIBUTE (Tag_ABI_VFP_args, 1);
 	    }
 	}
       asm_fprintf (asm_out_file, "\t.fpu %s\n", fpu_name);
@@ -22262,31 +22281,25 @@
          are used.  However we don't have any easy way of figuring this out.
 	 Conservatively record the setting that would have been used.  */
 
-      /* Tag_ABI_FP_rounding.  */
       if (flag_rounding_math)
-	asm_fprintf (asm_out_file, "\t.eabi_attribute 19, 1\n");
+	EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_rounding, 1);
+
       if (!flag_unsafe_math_optimizations)
 	{
-	  /* Tag_ABI_FP_denomal.  */
-	  asm_fprintf (asm_out_file, "\t.eabi_attribute 20, 1\n");
-	  /* Tag_ABI_FP_exceptions.  */
-	  asm_fprintf (asm_out_file, "\t.eabi_attribute 21, 1\n");
+	  EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_denormal, 1);
+	  EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_exceptions, 1);
 	}
-      /* Tag_ABI_FP_user_exceptions.  */
+
       if (flag_signaling_nans)
-	asm_fprintf (asm_out_file, "\t.eabi_attribute 22, 1\n");
-      /* Tag_ABI_FP_number_model.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 23, %d\n", 
-		   flag_finite_math_only ? 1 : 3);
+	EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_user_exceptions, 1);
 
-      /* Tag_ABI_align8_needed.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 24, 1\n");
-      /* Tag_ABI_align8_preserved.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 25, 1\n");
-      /* Tag_ABI_enum_size.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 26, %d\n",
-		   flag_short_enums ? 1 : 2);
+      EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_number_model,
+			   flag_finite_math_only ? 1 : 3);
 
+      EMIT_EABI_ATTRIBUTE (Tag_ABI_align8_needed, 1);
+      EMIT_EABI_ATTRIBUTE (Tag_ABI_align8_preserved, 1);
+      EMIT_EABI_ATTRIBUTE (Tag_ABI_enum_size, flag_short_enums ? 1 : 2);
+
       /* Tag_ABI_optimization_goals.  */
       if (optimize_size)
 	val = 4;
@@ -22296,21 +22309,18 @@
 	val = 1;
       else
 	val = 6;
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 30, %d\n", val);
+      EMIT_EABI_ATTRIBUTE (Tag_ABI_optimization_goals, val);
 
-      /* Tag_CPU_unaligned_access.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 34, %d\n",
-		   unaligned_access);
+      EMIT_EABI_ATTRIBUTE (Tag_CPU_unaligned_access, unaligned_access);
 
-      /* Tag_ABI_FP_16bit_format.  */
       if (arm_fp16_format)
-	asm_fprintf (asm_out_file, "\t.eabi_attribute 38, %d\n",
-		     (int)arm_fp16_format);
+	EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_16bit_format, (int) arm_fp16_format);
 
       if (arm_lang_output_object_attributes_hook)
 	arm_lang_output_object_attributes_hook();
     }
-  default_file_start();
+
+  default_file_start ();
 }
 
 static void
Index: gcc/config/arm/arm-c.c
===================================================================
--- gcc/config/arm/arm-c.c	(revision 179247)
+++ gcc/config/arm/arm-c.c	(working copy)
@@ -32,8 +32,9 @@
 static void arm_output_c_attributes(void)
 {
   /* Tag_ABI_PCS_wchar_t.  */
-  asm_fprintf (asm_out_file, "\t.eabi_attribute 18, %d\n",
-	       (int)(TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT));
+  asm_fprintf (asm_out_file, "\t.eabi_attribute 18, %d\t%s Tag_ABI_PCS_wchar_t\n",
+	       (int)(TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT),
+	       ASM_COMMENT_START);
 }
 
 

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-09-27 17:33 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-27 15:51 RFC: ARM: Add comment enumerating emitted .eabi_attribute tags Nick Clifton
2011-09-27 16:47 ` Ramana Radhakrishnan
2011-09-27 16:58   ` Paul Brook
2011-09-27 17:01     ` Ramana Radhakrishnan
2011-09-27 17:17   ` Nick Clifton
2011-09-27 18:19     ` Paul Brook
2011-09-27 16:49 ` Richard Henderson
2011-09-27 17:23   ` Nick Clifton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).