diff mbox

Use gcc/coretypes.h:enum offload_abi in mkoffloads

Message ID 87vbavuft0.fsf@kepler.schwinge.homeip.net
State New
Headers show

Commit Message

Thomas Schwinge Sept. 28, 2015, 8:08 a.m. UTC
Hi!

On Tue, 4 Aug 2015 13:20:12 +0200, I wrote:
> On Thu, 8 Jan 2015 07:02:19 -0800, "H.J. Lu" <hjl.tools@gmail.com> wrote:
> > On Thu, Jan 8, 2015 at 6:59 AM, Thomas Schwinge <thomas@codesourcery.com> wrote:
> > > On Mon, 22 Dec 2014 12:28:20 +0100, Jakub Jelinek <jakub@redhat.com> wrote:
> > >> On Mon, Dec 22, 2014 at 12:25:32PM +0100, Thomas Schwinge wrote:
> > >> > On Wed, 22 Oct 2014 22:57:01 +0400, Ilya Verbin <iverbin@gmail.com> wrote:
> > >> > > --- /dev/null
> > >> > > +++ b/gcc/config/i386/intelmic-mkoffload.c
> > >> > > @@ -0,0 +1,541 @@
> > >> > > +/* Offload image generation tool for Intel MIC devices.
> > >> >
> > >> > > +/* Shows if we should compile binaries for i386 instead of x86-64.  */
> > >> > > +bool target_ilp32 = false;
> 
> Once the following refactoring to use gcc/coretypes.h:enum offload_abi in
> mkoffloads gets approved...
> 
> > Should we also handle x32?
> 
> ..., that should be more easy to do.  OK for trunk, once testing
> succeeds?
> 
> commit de4d7cbcf979edc095a48dff5b38d12846bdab6f
> Author: Thomas Schwinge <thomas@codesourcery.com>
> Date:   Tue Aug 4 13:12:36 2015 +0200
> 
>     Use gcc/coretypes.h:enum offload_abi in mkoffloads

That one included unfortunate yet popular ;-) strcmp "typos":

> +#define STR "-foffload-abi="
> +      if (strncmp (argv[i], STR, strlen (STR)) == 0)
> +	{
> +	  if (strcmp (argv[i] + strlen (STR), "lp64"))
> +	    offload_abi = OFFLOAD_ABI_LP64;
> +	  else if (strcmp (argv[i] + strlen (STR), "ilp32"))
> +	    offload_abi = OFFLOAD_ABI_ILP32;

..., so with these fixed up:



Grüße,
 Thomas

Comments

Bernd Schmidt Sept. 28, 2015, 10:19 a.m. UTC | #1
Hi Thomas,

Your patch submissions are sometimes very verbose which makes them hard 
to follow.

>> commit de4d7cbcf979edc095a48dff5b38d12846bdab6f
>> Author: Thomas Schwinge <thomas@codesourcery.com>
>> Date:   Tue Aug 4 13:12:36 2015 +0200

Cut unnecessary information such as this. git headers are uninteresting.

>>      Use gcc/coretypes.h:enum offload_abi in mkoffloads
>
> That one included unfortunate yet popular ;-) strcmp "typos":
>
>> +#define STR "-foffload-abi="
>> +      if (strncmp (argv[i], STR, strlen (STR)) == 0)
>> +	{
>> +	  if (strcmp (argv[i] + strlen (STR), "lp64"))
>> +	    offload_abi = OFFLOAD_ABI_LP64;
>> +	  else if (strcmp (argv[i] + strlen (STR), "ilp32"))
>> +	    offload_abi = OFFLOAD_ABI_ILP32;
>
> ..., so with these fixed up:
>
> --- gcc/config/i386/intelmic-mkoffload.c
> +++ gcc/config/i386/intelmic-mkoffload.c
> @@ -544,9 +544,9 @@ main (int argc, char **argv)
>   #define STR "-foffload-abi="
>         if (strncmp (argv[i], STR, strlen (STR)) == 0)
>   	{
> -	  if (strcmp (argv[i] + strlen (STR), "lp64"))
> +	  if (strcmp (argv[i] + strlen (STR), "lp64") == 0)
>   	    offload_abi = OFFLOAD_ABI_LP64;
> -	  else if (strcmp (argv[i] + strlen (STR), "ilp32"))
> +	  else if (strcmp (argv[i] + strlen (STR), "ilp32") == 0)
>   	    offload_abi = OFFLOAD_ABI_ILP32;
>   	  else
>   	    fatal_error (input_location,
> --- gcc/config/nvptx/mkoffload.c
> +++ gcc/config/nvptx/mkoffload.c
> @@ -1013,9 +1013,9 @@ main (int argc, char **argv)
>   #define STR "-foffload-abi="
>         if (strncmp (argv[i], STR, strlen (STR)) == 0)
>   	{
> -	  if (strcmp (argv[i] + strlen (STR), "lp64"))
> +	  if (strcmp (argv[i] + strlen (STR), "lp64") == 0)
>   	    offload_abi = OFFLOAD_ABI_LP64;
> -	  else if (strcmp (argv[i] + strlen (STR), "ilp32"))
> +	  else if (strcmp (argv[i] + strlen (STR), "ilp32") == 0)
>   	    offload_abi = OFFLOAD_ABI_ILP32;
>   	  else
>   	    fatal_error (input_location,

This confused me for a while because I thought you were proposing the 
above patch. A single line "I fixed that in the following version" would 
have been a clearer way to communicate that doesn't take up a page of space.

> ..., I'll again propose the following patch for trunk:
>
> commit 9288882278239a9d346ebde99e616185a91fbfaf
> Author: Thomas Schwinge <thomas@codesourcery.com>
> Date:   Tue Aug 4 13:12:36 2015 +0200
>
>      Use gcc/coretypes.h:enum offload_abi in mkoffloads
>
>      	gcc/
>      	* config/i386/intelmic-mkoffload.c (target_ilp32): Remove
>      	variable, replacing it with...
>      	(offload_abi): ... this new variable.  Adjust all users.
>      	* config/nvptx/mkoffload.c (target_ilp32, offload_abi): Likewise.
> ---
>   gcc/config/i386/intelmic-mkoffload.c |   90 +++++++++++++++++++++++-----------
>   gcc/config/nvptx/mkoffload.c         |   56 +++++++++++++++------
>   2 files changed, 101 insertions(+), 45 deletions(-)

Just the ChangeLog please, not the other noise.

> +      abort ();

Can we have gcc_unreachable() in these tools?

Other than that, it looks ok but it also doesn't seem to do anything. 
Are you intending to add more ABIs?


Bernd
diff mbox

Patch

--- gcc/config/i386/intelmic-mkoffload.c
+++ gcc/config/i386/intelmic-mkoffload.c
@@ -544,9 +544,9 @@  main (int argc, char **argv)
 #define STR "-foffload-abi="
       if (strncmp (argv[i], STR, strlen (STR)) == 0)
 	{
-	  if (strcmp (argv[i] + strlen (STR), "lp64"))
+	  if (strcmp (argv[i] + strlen (STR), "lp64") == 0)
 	    offload_abi = OFFLOAD_ABI_LP64;
-	  else if (strcmp (argv[i] + strlen (STR), "ilp32"))
+	  else if (strcmp (argv[i] + strlen (STR), "ilp32") == 0)
 	    offload_abi = OFFLOAD_ABI_ILP32;
 	  else
 	    fatal_error (input_location,
--- gcc/config/nvptx/mkoffload.c
+++ gcc/config/nvptx/mkoffload.c
@@ -1013,9 +1013,9 @@  main (int argc, char **argv)
 #define STR "-foffload-abi="
       if (strncmp (argv[i], STR, strlen (STR)) == 0)
 	{
-	  if (strcmp (argv[i] + strlen (STR), "lp64"))
+	  if (strcmp (argv[i] + strlen (STR), "lp64") == 0)
 	    offload_abi = OFFLOAD_ABI_LP64;
-	  else if (strcmp (argv[i] + strlen (STR), "ilp32"))
+	  else if (strcmp (argv[i] + strlen (STR), "ilp32") == 0)
 	    offload_abi = OFFLOAD_ABI_ILP32;
 	  else
 	    fatal_error (input_location,

..., I'll again propose the following patch for trunk:

commit 9288882278239a9d346ebde99e616185a91fbfaf
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Tue Aug 4 13:12:36 2015 +0200

    Use gcc/coretypes.h:enum offload_abi in mkoffloads
    
    	gcc/
    	* config/i386/intelmic-mkoffload.c (target_ilp32): Remove
    	variable, replacing it with...
    	(offload_abi): ... this new variable.  Adjust all users.
    	* config/nvptx/mkoffload.c (target_ilp32, offload_abi): Likewise.
---
 gcc/config/i386/intelmic-mkoffload.c |   90 +++++++++++++++++++++++-----------
 gcc/config/nvptx/mkoffload.c         |   56 +++++++++++++++------
 2 files changed, 101 insertions(+), 45 deletions(-)

diff --git gcc/config/i386/intelmic-mkoffload.c gcc/config/i386/intelmic-mkoffload.c
index 4a7812c..8028584 100644
--- gcc/config/i386/intelmic-mkoffload.c
+++ gcc/config/i386/intelmic-mkoffload.c
@@ -42,8 +42,7 @@  int num_temps = 0;
 const int MAX_NUM_TEMPS = 10;
 const char *temp_files[MAX_NUM_TEMPS];
 
-/* Shows if we should compile binaries for i386 instead of x86-64.  */
-bool target_ilp32 = false;
+enum offload_abi offload_abi = OFFLOAD_ABI_UNSET;
 
 /* Delete tempfiles and exit function.  */
 void
@@ -200,10 +199,17 @@  out:
 static void
 compile_for_target (struct obstack *argv_obstack)
 {
-  if (target_ilp32)
-    obstack_ptr_grow (argv_obstack, "-m32");
-  else
-    obstack_ptr_grow (argv_obstack, "-m64");
+  switch (offload_abi)
+    {
+    case OFFLOAD_ABI_LP64:
+      obstack_ptr_grow (argv_obstack, "-m64");
+      break;
+    case OFFLOAD_ABI_ILP32:
+      obstack_ptr_grow (argv_obstack, "-m32");
+      break;
+    default:
+      abort ();
+    }
   obstack_ptr_grow (argv_obstack, NULL);
   char **argv = XOBFINISH (argv_obstack, char **);
 
@@ -379,10 +385,17 @@  generate_host_descr_file (const char *host_compiler)
   new_argv[new_argc++] = "-c";
   new_argv[new_argc++] = "-fPIC";
   new_argv[new_argc++] = "-shared";
-  if (target_ilp32)
-    new_argv[new_argc++] = "-m32";
-  else
-    new_argv[new_argc++] = "-m64";
+  switch (offload_abi)
+    {
+    case OFFLOAD_ABI_LP64:
+      new_argv[new_argc++] = "-m64";
+      break;
+    case OFFLOAD_ABI_ILP32:
+      new_argv[new_argc++] = "-m32";
+      break;
+    default:
+      abort ();
+    }
   new_argv[new_argc++] = src_filename;
   new_argv[new_argc++] = "-o";
   new_argv[new_argc++] = obj_filename;
@@ -442,10 +455,17 @@  prepare_target_image (const char *target_compiler, int argc, char **argv)
   objcopy_argv[3] = "-I";
   objcopy_argv[4] = "binary";
   objcopy_argv[5] = "-O";
-  if (target_ilp32)
-    objcopy_argv[6] = "elf32-i386";
-  else
-    objcopy_argv[6] = "elf64-x86-64";
+  switch (offload_abi)
+    {
+    case OFFLOAD_ABI_LP64:
+      objcopy_argv[6] = "elf64-x86-64";
+      break;
+    case OFFLOAD_ABI_ILP32:
+      objcopy_argv[6] = "elf32-i386";
+      break;
+    default:
+      abort ();
+    }
   objcopy_argv[7] = target_so_filename;
   objcopy_argv[8] = "--rename-section";
   objcopy_argv[9] = rename_section_opt;
@@ -518,17 +538,22 @@  main (int argc, char **argv)
      passed with @file.  Expand them into argv before processing.  */
   expandargv (&argc, &argv);
 
-  /* Find out whether we should compile binaries for i386 or x86-64.  */
-  for (int i = argc - 1; i > 0; i--)
-    if (strncmp (argv[i], "-foffload-abi=", sizeof ("-foffload-abi=") - 1) == 0)
-      {
-	if (strstr (argv[i], "ilp32"))
-	  target_ilp32 = true;
-	else if (!strstr (argv[i], "lp64"))
-	  fatal_error (input_location,
-		       "unrecognizable argument of option -foffload-abi");
-	break;
-      }
+  /* Scan the argument vector.  */
+  for (int i = 1; i < argc; i++)
+    {
+#define STR "-foffload-abi="
+      if (strncmp (argv[i], STR, strlen (STR)) == 0)
+	{
+	  if (strcmp (argv[i] + strlen (STR), "lp64") == 0)
+	    offload_abi = OFFLOAD_ABI_LP64;
+	  else if (strcmp (argv[i] + strlen (STR), "ilp32") == 0)
+	    offload_abi = OFFLOAD_ABI_ILP32;
+	  else
+	    fatal_error (input_location,
+			 "unrecognizable argument of option " STR);
+	}
+#undef STR
+    }
 
   const char *target_so_filename
     = prepare_target_image (target_compiler, argc, argv);
@@ -541,10 +566,17 @@  main (int argc, char **argv)
   const char *new_argv[9];
   new_argv[new_argc++] = "ld";
   new_argv[new_argc++] = "-m";
-  if (target_ilp32)
-    new_argv[new_argc++] = "elf_i386";
-  else
-    new_argv[new_argc++] = "elf_x86_64";
+  switch (offload_abi)
+    {
+    case OFFLOAD_ABI_LP64:
+      new_argv[new_argc++] = "elf_x86_64";
+      break;
+    case OFFLOAD_ABI_ILP32:
+      new_argv[new_argc++] = "elf_i386";
+      break;
+    default:
+      abort ();
+    }
   new_argv[new_argc++] = "--relocatable";
   new_argv[new_argc++] = host_descr_filename;
   new_argv[new_argc++] = target_so_filename;
diff --git gcc/config/nvptx/mkoffload.c gcc/config/nvptx/mkoffload.c
index ba0454e..78ac8fe 100644
--- gcc/config/nvptx/mkoffload.c
+++ gcc/config/nvptx/mkoffload.c
@@ -126,8 +126,7 @@  static id_map *var_ids, **vars_tail = &var_ids;
 static const char *ptx_name;
 static const char *ptx_cfile_name;
 
-/* Shows if we should compile binaries for i386 instead of x86-64.  */
-bool target_ilp32 = false;
+enum offload_abi offload_abi = OFFLOAD_ABI_UNSET;
 
 /* Delete tempfiles.  */
 
@@ -920,7 +919,17 @@  compile_native (const char *infile, const char *outfile, const char *compiler)
   struct obstack argv_obstack;
   obstack_init (&argv_obstack);
   obstack_ptr_grow (&argv_obstack, compiler);
-  obstack_ptr_grow (&argv_obstack, target_ilp32 ? "-m32" : "-m64");
+  switch (offload_abi)
+    {
+    case OFFLOAD_ABI_LP64:
+      obstack_ptr_grow (&argv_obstack, "-m64");
+      break;
+    case OFFLOAD_ABI_ILP32:
+      obstack_ptr_grow (&argv_obstack, "-m32");
+      break;
+    default:
+      abort ();
+    }
   obstack_ptr_grow (&argv_obstack, infile);
   obstack_ptr_grow (&argv_obstack, "-c");
   obstack_ptr_grow (&argv_obstack, "-o");
@@ -998,23 +1007,38 @@  main (int argc, char **argv)
      passed with @file.  Expand them into argv before processing.  */
   expandargv (&argc, &argv);
 
-  /* Find out whether we should compile binaries for i386 or x86-64.  */
-  for (int i = argc - 1; i > 0; i--)
-    if (strncmp (argv[i], "-foffload-abi=", sizeof ("-foffload-abi=") - 1) == 0)
-      {
-	if (strstr (argv[i], "ilp32"))
-	  target_ilp32 = true;
-	else if (!strstr (argv[i], "lp64"))
-	  fatal_error (input_location,
-		       "unrecognizable argument of option -foffload-abi");
-	break;
-      }
+  /* Scan the argument vector.  */
+  for (int i = 1; i < argc; i++)
+    {
+#define STR "-foffload-abi="
+      if (strncmp (argv[i], STR, strlen (STR)) == 0)
+	{
+	  if (strcmp (argv[i] + strlen (STR), "lp64") == 0)
+	    offload_abi = OFFLOAD_ABI_LP64;
+	  else if (strcmp (argv[i] + strlen (STR), "ilp32") == 0)
+	    offload_abi = OFFLOAD_ABI_ILP32;
+	  else
+	    fatal_error (input_location,
+			 "unrecognizable argument of option " STR);
+	}
+#undef STR
+    }
 
   struct obstack argv_obstack;
   obstack_init (&argv_obstack);
   obstack_ptr_grow (&argv_obstack, driver);
   obstack_ptr_grow (&argv_obstack, "-xlto");
-  obstack_ptr_grow (&argv_obstack, target_ilp32 ? "-m32" : "-m64");
+  switch (offload_abi)
+    {
+    case OFFLOAD_ABI_LP64:
+      obstack_ptr_grow (&argv_obstack, "-m64");
+      break;
+    case OFFLOAD_ABI_ILP32:
+      obstack_ptr_grow (&argv_obstack, "-m32");
+      break;
+    default:
+      abort ();
+    }
   obstack_ptr_grow (&argv_obstack, "-S");
 
   for (int ix = 1; ix != argc; ix++)
@@ -1033,7 +1057,7 @@  main (int argc, char **argv)
 
   /* PR libgomp/65099: Currently, we only support offloading in 64-bit
      configurations.  */
-  if (!target_ilp32)
+  if (offload_abi == OFFLOAD_ABI_LP64)
     {
       ptx_name = make_temp_file (".mkoffload");
       obstack_ptr_grow (&argv_obstack, "-o");