[BFD, LD] aarch64: Add support for GCS in AArch64 linker.

Nick Clifton nickc@redhat.com
Fri Jan 5 10:57:27 GMT 2024


Hi Srinath,

> This patch will not be committed to development branch until the Kernel GCS
> ABI changes are approved and committed.
> 
> Ok to commit this patch to Arm vendor branch based on binutils-master ?

Yes.  (Since the branch is ARM specific, you do not really need to check
with us first, but the thought is appreciated).

Looking over the patch I did see one thing which niggled:

+     else if (strncmp (optarg, "experimental-gcs-report", 23) == 0)
+	{
+	  if (strlen (optarg) == 23 || strcmp (optarg + 23, "=none") == 0)
+	    gcs_report = GCS_NONE;
+	  else if (strcmp (optarg + 23, "=warning") == 0)
+	    gcs_report = GCS_WARN;
+	  else if (strcmp (optarg + 23, "=error") == 0)
+	    gcs_report = GCS_ERROR;
+	  else
+	    einfo (_("%P: error: unrecognized: `%s'\''\n"), optarg);
+	}
+     else if (strncmp (optarg, "experimental-gcs", 16) == 0)
+	{
+	  if (strlen (optarg) == 16 || strcmp (optarg + 16, "=always") == 0)
+	    gcs_type = GCS_ALWAYS;
+	  else if (strcmp (optarg + 16, "=never") == 0)
+	    gcs_type = GCS_NEVER;
+	  else if (strcmp (optarg + 16, "=implicit") == 0)
+	    gcs_type = GCS_IMPLICIT;
+	  else
+	    einfo (_("%P: error: unrecognized: `%s'\''\n"), optarg);
+	}

I do not like the use of magic numbers (23 and 16 in the fragment above).
Whilst it is fairly obvious where they come from, it is entirely possible
that a future coder might change one of the strings and not change (all
of) the places where the string's length is used.  So instead I would
suggest using constants instead, eg:

       static const char * egr = "experimental-gcs-report";
       const int egr_len = strlen (egr);

       else if (strncmp (optarg, egr, egr_len) == 0)
	{
	  if (strlen (optarg) == egr_len || strcmp (optarg + egr_len, "=none") == 0)
	    gcs_report = GCS_NONE;
	  else if (strcmp (optarg + egr_len, "=warning") == 0)
	    gcs_report = GCS_WARN;
	  else if (strcmp (optarg + egr_len, "=error") == 0)
	    gcs_report = GCS_ERROR;
	  else
	    einfo (_("%P: error: unrecognized: `%s'\''\n"), optarg);
	}

Cheers
   Nick



More information about the Binutils mailing list