[PATCH] gas: sframe: command line option takes precedence

Indu Bhagat indu.bhagat@oracle.com
Fri Jul 18 19:06:25 GMT 2025


On 7/18/25 11:33 AM, Indu Bhagat wrote:
> On 7/18/25 1:25 AM, Jan Beulich wrote:
>> On 18.07.2025 09:21, Indu Bhagat via Binutils wrote:
>>> --- a/gas/as.h
>>> +++ b/gas/as.h
>>> @@ -355,8 +355,15 @@ COMMON int flag_execstack;
>>>   /* TRUE if .note.GNU-stack section with SEC_CODE should be created */
>>>   COMMON int flag_noexecstack;
>>> -/* TRUE if .sframe section should be created.  */
>>> -COMMON int flag_gen_sframe;
>>> +enum gen_sframe_option
>>> +{
>>> +  GEN_SFRAME_NONE = 0,
>>
>> Maybe better GEN_SFRAME_DEFAULT, seeing Sam's plan to allow 
>> controlling the
>> default from configure?
>>
> 
> I think GEN_SFRAME_DEFAULT will be confusing.  Related response below..
> 
>>> --- a/gas/dw2gencfi.c
>>> +++ b/gas/dw2gencfi.c
>>> @@ -2596,10 +2596,13 @@ cfi_finish (void)
>>>         flag_traditional_format = save_flag_traditional_format;
>>>       }
>>> -  /* Generate SFrame section if the user specifies:
>>> -    - the command line option to gas, or
>>> -    - .sframe in the .cfi_sections directive.  */
>>> -  if (flag_gen_sframe || (all_cfi_sections & CFI_EMIT_sframe) != 0)
>>> +  /* Generate SFrame section if the user:
>>> +    - enables via the command line option, or
>>> +    - specifies .sframe in the .cfi_sections directive and does not 
>>> disable
>>> +      via the command line.  */
>>> +  if (flag_gen_sframe == GEN_SFRAME_ENABLED
>>> +      || ((all_cfi_sections & CFI_EMIT_sframe) != 0
>>> +      && flag_gen_sframe != GEN_SFRAME_DISABLED))
>>
>> With said plan, I'm not sure about this. What's the intended behavior if
>> the default is "disabled"? It feels like you need to resolve the default
>> anyway after having parsed the command line. At which point I'm not even
>> sure anymore that a tristate is needed here.
>>
> 
> The intended behavior IMO should be:
>    - command line takes precedence over configure time setting and 
> cfi_section directive.
>    - .cfi_section directive takes precedence over configure time setting.
> 
> (The command line takes precedence over configure time defaults.)  So 
> Sam's patch to add configure-time enablement will basically just 
> initialize the value of flag_gen_sframe to GEN_SFRAME_ENABLED or 
> GEN_SFRAME_DISABLED based on --enable-sframe/--disable-sframe 
> respectively at an appropriate time.
> 

Correction: IMO Sam's patch to add configure-time enablement will 
basically just initialize the value of flag_gen_sframe to 
GEN_SFRAME_ENABLED or GEN_SFRAME_NONE based on 
--enable-sframe/--disable-sframe respectively at an appropriate time.

When --disable-sframe is used, the desired behavior is equivalent to 
'passing no --gsframe', and not '--gsframe=no'.

> The options processing code in gas/as.c can remain the same:
> 
>          case OPTION_SFRAME:
>            if (optarg)
>              {
>                if (strcasecmp (optarg, "no") == 0)
>                  flag_gen_sframe = GEN_SFRAME_DISABLED;
>                else if (strcasecmp (optarg, "yes") == 0)
>                  flag_gen_sframe = GEN_SFRAME_ENABLED;
>                else
>                  as_fatal (_("Invalid --gsframe option: `%s'"), optarg);
>              }
>            else
>              flag_gen_sframe = GEN_SFRAME_ENABLED;
>            break;
> 
> Basically, with ".cfi_sections .sframe" we need to distinguish between 
> the two states:
>    - No command line option (=> generate SFrame)
>    - explicit --gsframe=no (=> no generate SFrame)
> and hence, the tristate.
> 
>>> --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d
>>> +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d
>>> @@ -1,4 +1,4 @@
>>> -#as: --gsframe
>>> +#as:
>>>   #objdump: --sframe=.sframe
>>>   #name: SFrame generation using CFI directive .cfi_sections
>>>   #...
>>
>> Wasn't this option just recently added here, to prepare for default-off
>> configurations?
>>
> 
> No, I dont see it.



More information about the Binutils mailing list