Hi Richard, Hi Paul, Hi Ramana, Well my idea to have a header file containing all of the possible binary file attributes does not seem to have taken off, so here is a much simpler patch for the GCC ARM backend. It just adds comments to the .eabi_directives (when -dA or -fverbose-asm are in effect) emitted by GCC. It does not have any dependencies upon header files, nor does it attempt to make use of the symbolic names in the actual .eabi_directives.
Any objections to this version of the patch ? Cheers Nick gcc/ChangeLog 2011-10-05 Nick Clifton <ni...@redhat.com> * config/arm/arm.c (EMIT_EABI_ATTRIBUTE): New macro. Used to emit a .eabi_attribute assembler directive, possibly with a comment attached. (asm_file_start): Use the new macro. Index: gcc/config/arm/arm.c =================================================================== --- gcc/config/arm/arm.c (revision 179554) +++ gcc/config/arm/arm.c (working copy) @@ -22243,6 +22243,21 @@ asm_fprintf (stream, "%U%s", name); } +/* 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) + static void arm_file_start (void) { @@ -22274,9 +22289,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); @@ -22285,31 +22300,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; @@ -22319,16 +22327,12 @@ 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();