Hi Guys, I am checking in the patch below to add comments to the .eabi_attribute assembler directives emitted by the ARM backend, when commented assembler output is enabled.
Cheers Nick gcc/ChangeLog 2011-10-12 Nick Clifton <ni...@redhat.com> * config/arm/arm.h (EMIT_EABI_ATTRIBUTE): New macro. Used to emit a .eabi_attribute assembler directive, possibly with a comment attached. * config/arm/arm.c (arm_file_start): Use the new macro. * config/arm/arm-c.c (arm_output_c_attributes): Likewise. Index: gcc/config/arm/arm.c =================================================================== --- gcc/config/arm/arm.c (revision 179839) +++ gcc/config/arm/arm.c (working copy) @@ -22291,9 +22291,9 @@ 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, 27, 3); if (TARGET_HARD_FLOAT_ABI) - asm_fprintf (asm_out_file, "\t.eabi_attribute 28, 1\n"); + EMIT_EABI_ATTRIBUTE (Tag_ABI_VFP_args, 28, 1); } } asm_fprintf (asm_out_file, "\t.fpu %s\n", fpu_name); @@ -22302,31 +22302,24 @@ 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, 19, 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, 20, 1); + EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_exceptions, 21, 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, 22, 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, 23, + flag_finite_math_only ? 1 : 3); + EMIT_EABI_ATTRIBUTE (Tag_ABI_align8_needed, 24, 1); + EMIT_EABI_ATTRIBUTE (Tag_ABI_align8_preserved, 25, 1); + EMIT_EABI_ATTRIBUTE (Tag_ABI_enum_size, 26, flag_short_enums ? 1 : 2); + /* Tag_ABI_optimization_goals. */ if (optimize_size) val = 4; @@ -22336,21 +22329,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, 30, 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, 34, 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, 38, (int) arm_fp16_format); if (arm_lang_output_object_attributes_hook) arm_lang_output_object_attributes_hook(); static void Index: gcc/config/arm/arm.h =================================================================== --- gcc/config/arm/arm.h (revision 179839) +++ gcc/config/arm/arm.h (working copy) @@ -2235,4 +2235,19 @@ " %{mcpu=generic-*:-march=%*;" \ " :%{mcpu=*:-mcpu=%*} %{march=*:-march=%*}}" +/* 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). If requested 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,NUM,VAL) \ + do \ + { \ + asm_fprintf (asm_out_file, "\t.eabi_attribute %d, %d", NUM, VAL); \ + if (flag_verbose_asm || flag_debug_asm) \ + asm_fprintf (asm_out_file, "\t%s " #NAME, ASM_COMMENT_START); \ + asm_fprintf (asm_out_file, "\n"); \ + } \ + while (0) + #endif /* ! GCC_ARM_H */ Index: gcc/config/arm/arm-c.c =================================================================== --- gcc/config/arm/arm-c.c (revision 179839) +++ gcc/config/arm/arm-c.c (working copy) @@ -25,21 +25,21 @@ /* Output C specific EABI object attributes. These can not be done in arm.c because they require information from the C frontend. */ -static void arm_output_c_attributes(void) +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)); + EMIT_EABI_ATTRIBUTE (Tag_ABI_PCS_wchar_t, 18, + (int)(TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT)); } /* Setup so that common code calls arm_output_c_attributes. */ -void arm_lang_object_attributes_init(void) +void +arm_lang_object_attributes_init(void) { arm_lang_output_object_attributes_hook = arm_output_c_attributes; }