Documentation problem with TEXT_SECTION_ASM_OP

Joseph S. Myers joseph@codesourcery.com
Wed Oct 24 12:32:00 GMT 2012


On Wed, 24 Oct 2012, Paulo Matos wrote:

> I gave it a go with TEXT_SECTION_ASM_OP.

Given what you've found, maybe other macros are easier to convert....

> I started by changing crtstuff.c to use __LIBGCC_TEXT_SECTION_ASM_OP__ 
> instead of TEXT_SECTION_ASM_OP. I noticed crtstuff.c is not compiled 
> with -fbuilding-libgcc so I added the flags to CRTSTUFF_T_CFLAGS in my 
> makefile fragment.

That would seem to make sense anyway.

>       /* For libgcc crtstuff.c. */
> #ifdef TEXT_SECTION_ASM_OP
>       builtin_define_with_value ("__LIBGCC_TEXT_SECTION_ASM_OP__",
> 				 TEXT_SECTION_ASM_OP, true);
> #else
>       /* Is text_section always an unnamed section? */
>       builtin_define_with_value ("__LIBGCC_TEXT_SECTION_ASM_OP__",
> 				 (const char *)text_section->unnamed.data, true);
> #endif
>     }
> 
> The reason for the ifdef is because the docs allow the backend to define 
> either TEXT_SECTION_ASM_OP or the text_section directly in 
> TARGET_ASM_INIT_SECTIONS.
> Therefore if we don't have TEXT_SECTION_ASM_OP we need to grab the text 
> string from text_section. I assumed text_section was defined in 
> TARGET_ASM_INIT_SECTIONS with an unnamed section (that's how I did it) 
> but I am unsure if this is a general assumption.

I don't like this #else.  Presumably the libgcc code already works if 
TEXT_SECTION_ASM_OP isn't defined at all.  So the equivalent is simply not 
to define __LIBGCC_TEXT_SECTION_ASM_OP__ in that case, rather than 
synthesizing a definition from other information.

If however you want to synthesize a definition, then I think 
TEXT_SECTION_ASM_OP should be converted to a target hook (at least to the 
extent of targhooks.c being the only place testing it, if it remains at 
all), so that the logic generating predefined macros is unconditional.

> #define __LIBGCC_TEXT_SECTION_ASM_OP__ "        .section .text, "axU""

So you should teach builtin_define_with_value to generate proper escapes 
when producing a string.

-- 
Joseph S. Myers
joseph@codesourcery.com



More information about the Gcc mailing list