[v2,5/7] aarch64,arm: Remove accepted_branch_protection_string

Message ID 8ebe0679d0d92c8c39bffc98e1f30e2b29770e00.1699025214.git.szabolcs.nagy@arm.com
State Accepted
Headers
Series aarch64 GCS preliminary patches |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Szabolcs Nagy Nov. 3, 2023, 3:36 p.m. UTC
  On aarch64 this caused ICE with pragma push_options since

  commit ae54c1b09963779c5c3914782324ff48af32e2f1
  Author:     Wilco Dijkstra <wilco.dijkstra@arm.com>
  CommitDate: 2022-06-01 18:13:57 +0100

  AArch64: Cleanup option processing code

The failure is at pop_options:

internal compiler error: ‘global_options’ are modified in local context

On arm the variable was unused.

gcc/ChangeLog:

	* config/aarch64/aarch64.cc (aarch64_override_options_after_change_1):
	Do not override branch_protection options.
	(aarch64_override_options): Remove accepted_branch_protection_string.
	* config/arm/aarch-common.cc (BRANCH_PROTECT_STR_MAX): Remove.
	(aarch_parse_branch_protection): Remove
	accepted_branch_protection_string.
	* config/arm/arm.cc: Likewise.
---
unchanged from v1
---
 gcc/config/aarch64/aarch64.cc  | 10 +---------
 gcc/config/arm/aarch-common.cc | 16 ----------------
 gcc/config/arm/arm.cc          |  2 --
 3 files changed, 1 insertion(+), 27 deletions(-)
  

Comments

Richard Sandiford Nov. 26, 2023, 2:50 p.m. UTC | #1
Szabolcs Nagy <szabolcs.nagy@arm.com> writes:
> On aarch64 this caused ICE with pragma push_options since
>
>   commit ae54c1b09963779c5c3914782324ff48af32e2f1
>   Author:     Wilco Dijkstra <wilco.dijkstra@arm.com>
>   CommitDate: 2022-06-01 18:13:57 +0100
>
>   AArch64: Cleanup option processing code
>
> The failure is at pop_options:
>
> internal compiler error: ‘global_options’ are modified in local context
>
> On arm the variable was unused.
>
> gcc/ChangeLog:
>
> 	* config/aarch64/aarch64.cc (aarch64_override_options_after_change_1):
> 	Do not override branch_protection options.
> 	(aarch64_override_options): Remove accepted_branch_protection_string.
> 	* config/arm/aarch-common.cc (BRANCH_PROTECT_STR_MAX): Remove.
> 	(aarch_parse_branch_protection): Remove
> 	accepted_branch_protection_string.
> 	* config/arm/arm.cc: Likewise.

OK.  Not sure I fully understand the subtlety of how things worked
before Wilco's patch, but I agree it looks like all the results of
the parsing are correctly captured by Target options or TargetVariables
in aarch64.opt, and so no special handling is needed.

Thanks,
Richard

> ---
> unchanged from v1
> ---
>  gcc/config/aarch64/aarch64.cc  | 10 +---------
>  gcc/config/arm/aarch-common.cc | 16 ----------------
>  gcc/config/arm/arm.cc          |  2 --
>  3 files changed, 1 insertion(+), 27 deletions(-)
>
> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
> index 88594bed8ce..f8e8fefc8d8 100644
> --- a/gcc/config/aarch64/aarch64.cc
> +++ b/gcc/config/aarch64/aarch64.cc
> @@ -323,8 +323,6 @@ bool aarch64_pcrelative_literal_loads;
>  /* Global flag for whether frame pointer is enabled.  */
>  bool aarch64_use_frame_pointer;
>  
> -char *accepted_branch_protection_string = NULL;
> -
>  /* Support for command line parsing of boolean flags in the tuning
>     structures.  */
>  struct aarch64_flag_desc
> @@ -18101,12 +18099,6 @@ aarch64_adjust_generic_arch_tuning (struct tune_params &current_tune)
>  static void
>  aarch64_override_options_after_change_1 (struct gcc_options *opts)
>  {
> -  if (accepted_branch_protection_string)
> -    {
> -      opts->x_aarch64_branch_protection_string
> -	= xstrdup (accepted_branch_protection_string);
> -    }
> -
>    /* PR 70044: We have to be careful about being called multiple times for the
>       same function.  This means all changes should be repeatable.  */
>  
> @@ -18715,7 +18707,7 @@ aarch64_override_options (void)
>    /* Return address signing is currently not supported for ILP32 targets.  For
>       LP64 targets use the configured option in the absence of a command-line
>       option for -mbranch-protection.  */
> -  if (!TARGET_ILP32 && accepted_branch_protection_string == NULL)
> +  if (!TARGET_ILP32 && aarch64_branch_protection_string == NULL)
>      {
>  #ifdef TARGET_ENABLE_PAC_RET
>        aarch_ra_sign_scope = AARCH_FUNCTION_NON_LEAF;
> diff --git a/gcc/config/arm/aarch-common.cc b/gcc/config/arm/aarch-common.cc
> index 5b96ff4c2e8..cbc7f68a8bf 100644
> --- a/gcc/config/arm/aarch-common.cc
> +++ b/gcc/config/arm/aarch-common.cc
> @@ -659,9 +659,6 @@ arm_md_asm_adjust (vec<rtx> &outputs, vec<rtx> & /*inputs*/,
>    return saw_asm_flag ? seq : NULL;
>  }
>  
> -#define BRANCH_PROTECT_STR_MAX 255
> -extern char *accepted_branch_protection_string;
> -
>  static enum aarch_parse_opt_result
>  aarch_handle_no_branch_protection (char* str, char* rest)
>  {
> @@ -812,19 +809,6 @@ aarch_parse_branch_protection (const char *const_str, char** last_str)
>        else
>  	*last_str = NULL;
>      }
> -
> -  if (res == AARCH_PARSE_OK)
> -    {
> -      /* If needed, alloc the accepted string then copy in const_str.
> -	Used by override_option_after_change_1.  */
> -      if (!accepted_branch_protection_string)
> -	accepted_branch_protection_string
> -	  = (char *) xmalloc (BRANCH_PROTECT_STR_MAX + 1);
> -      strncpy (accepted_branch_protection_string, const_str,
> -	       BRANCH_PROTECT_STR_MAX + 1);
> -      /* Forcibly null-terminate.  */
> -      accepted_branch_protection_string[BRANCH_PROTECT_STR_MAX] = '\0';
> -    }
>    return res;
>  }
>  
> diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc
> index 6e933c80183..f49312cace0 100644
> --- a/gcc/config/arm/arm.cc
> +++ b/gcc/config/arm/arm.cc
> @@ -2424,8 +2424,6 @@ const struct tune_params arm_fa726te_tune =
>    tune_params::SCHED_AUTOPREF_OFF
>  };
>  
> -char *accepted_branch_protection_string = NULL;
> -
>  /* Auto-generated CPU, FPU and architecture tables.  */
>  #include "arm-cpu-data.h"
  

Patch

diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index 88594bed8ce..f8e8fefc8d8 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -323,8 +323,6 @@  bool aarch64_pcrelative_literal_loads;
 /* Global flag for whether frame pointer is enabled.  */
 bool aarch64_use_frame_pointer;
 
-char *accepted_branch_protection_string = NULL;
-
 /* Support for command line parsing of boolean flags in the tuning
    structures.  */
 struct aarch64_flag_desc
@@ -18101,12 +18099,6 @@  aarch64_adjust_generic_arch_tuning (struct tune_params &current_tune)
 static void
 aarch64_override_options_after_change_1 (struct gcc_options *opts)
 {
-  if (accepted_branch_protection_string)
-    {
-      opts->x_aarch64_branch_protection_string
-	= xstrdup (accepted_branch_protection_string);
-    }
-
   /* PR 70044: We have to be careful about being called multiple times for the
      same function.  This means all changes should be repeatable.  */
 
@@ -18715,7 +18707,7 @@  aarch64_override_options (void)
   /* Return address signing is currently not supported for ILP32 targets.  For
      LP64 targets use the configured option in the absence of a command-line
      option for -mbranch-protection.  */
-  if (!TARGET_ILP32 && accepted_branch_protection_string == NULL)
+  if (!TARGET_ILP32 && aarch64_branch_protection_string == NULL)
     {
 #ifdef TARGET_ENABLE_PAC_RET
       aarch_ra_sign_scope = AARCH_FUNCTION_NON_LEAF;
diff --git a/gcc/config/arm/aarch-common.cc b/gcc/config/arm/aarch-common.cc
index 5b96ff4c2e8..cbc7f68a8bf 100644
--- a/gcc/config/arm/aarch-common.cc
+++ b/gcc/config/arm/aarch-common.cc
@@ -659,9 +659,6 @@  arm_md_asm_adjust (vec<rtx> &outputs, vec<rtx> & /*inputs*/,
   return saw_asm_flag ? seq : NULL;
 }
 
-#define BRANCH_PROTECT_STR_MAX 255
-extern char *accepted_branch_protection_string;
-
 static enum aarch_parse_opt_result
 aarch_handle_no_branch_protection (char* str, char* rest)
 {
@@ -812,19 +809,6 @@  aarch_parse_branch_protection (const char *const_str, char** last_str)
       else
 	*last_str = NULL;
     }
-
-  if (res == AARCH_PARSE_OK)
-    {
-      /* If needed, alloc the accepted string then copy in const_str.
-	Used by override_option_after_change_1.  */
-      if (!accepted_branch_protection_string)
-	accepted_branch_protection_string
-	  = (char *) xmalloc (BRANCH_PROTECT_STR_MAX + 1);
-      strncpy (accepted_branch_protection_string, const_str,
-	       BRANCH_PROTECT_STR_MAX + 1);
-      /* Forcibly null-terminate.  */
-      accepted_branch_protection_string[BRANCH_PROTECT_STR_MAX] = '\0';
-    }
   return res;
 }
 
diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc
index 6e933c80183..f49312cace0 100644
--- a/gcc/config/arm/arm.cc
+++ b/gcc/config/arm/arm.cc
@@ -2424,8 +2424,6 @@  const struct tune_params arm_fa726te_tune =
   tune_params::SCHED_AUTOPREF_OFF
 };
 
-char *accepted_branch_protection_string = NULL;
-
 /* Auto-generated CPU, FPU and architecture tables.  */
 #include "arm-cpu-data.h"