re PR target/65296 ([avr] fix various issues with specs file generation)
authorGeorg-Johann Lay <avr@gjlay.de>
Mon, 23 Mar 2015 18:19:01 +0000 (18:19 +0000)
committerGeorg-Johann Lay <gjl@gcc.gnu.org>
Mon, 23 Mar 2015 18:19:01 +0000 (18:19 +0000)
PR target/65296
* config/avr/driver-avr.c (avr_devicespecs_file): Allow to specify
the same -mmcu=MCU more than once.

From-SVN: r221602

gcc/ChangeLog
gcc/config/avr/driver-avr.c

index ae062f89810fe832dda8b8227ade5ba8ebfb18ac..ad9ca05bd29673311d2ebe55718593c6c637f010 100644 (file)
@@ -1,3 +1,9 @@
+2015-03-23  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/65296
+       * config/avr/driver-avr.c (avr_devicespecs_file): Allow to specify
+       the same -mmcu=MCU more than once.
+
 2015-03-23  Jakub Jelinek  <jakub@redhat.com>
 
        PR bootstrap/65522
index dbc5043d99667ce472fb9f40a0b4b7d5fe6c9a7d..4890a39b489a9eebdedc727ee6a91e0c60ca333e 100644 (file)
@@ -55,9 +55,10 @@ avr_diagnose_devicespecs_error (const char *mcu, const char *filename)
 
 /* Implement spec function `device-specs-fileĀ“.
 
-   Compose -specs=<specs-file-name>.  If everything went well then argv[0]
-   is the inflated specs directory and argv[1] is a device or core name as
-   supplied to -mmcu=*.  */
+   Compose -specs=<specs-file-name>%s.  If everything went well then argv[0]
+   is the inflated (absolute) specs directory and argv[1] is a device or
+   core name as supplied by -mmcu=*.  When building GCC the path might
+   be relative.  */
 
 const char*
 avr_devicespecs_file (int argc, const char **argv)
@@ -82,13 +83,19 @@ avr_devicespecs_file (int argc, const char **argv)
       mmcu = AVR_MMCU_DEFAULT;
       break;
 
-    case 2:
+    default:
       mmcu = argv[1];
-      break;
 
-    default:
-      error ("specified option %qs more than once", "-mmcu=");
-      return X_NODEVLIB;
+      // Allow specifying the same MCU more than once.
+
+      for (int i = 2; i < argc; i++)
+        if (0 != strcmp (mmcu, argv[i]))
+          {
+            error ("specified option %qs more than once", "-mmcu");
+            return X_NODEVLIB;
+          }
+
+      break;
     }
 
   specfile_name = concat (argv[0], dir_separator_str, "specs-", mmcu, NULL);