re PR target/45261 (Doesn't indicate failure status when it doesn't support (attiny23...
authorGeorg-Johann Lay <avr@gjlay.de>
Sun, 27 Feb 2011 12:23:14 +0000 (12:23 +0000)
committerDenis Chertykov <denisc@gcc.gnu.org>
Sun, 27 Feb 2011 12:23:14 +0000 (15:23 +0300)
2011-02-23  Georg-Johann Lay  <avr@gjlay.de>

PR target/45261
* config/avr/avr.c (avr_option_override): Use error on bad options.
(avr_help): New function.
(TARGET_HELP): Define.

From-SVN: r170536

gcc/ChangeLog
gcc/config/avr/avr.c

index 88d3eddaeea297f791fcb949a21785c51f361296..1d6f9a5d90952325a2e98f8473a9dd6cfcfcc5c3 100644 (file)
@@ -1,3 +1,10 @@
+2011-02-23  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/45261
+       * config/avr/avr.c (avr_option_override): Use error on bad options.
+       (avr_help): New function.
+       (TARGET_HELP): Define.
+
 2011-02-22  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/42240
index c6f60b4e8df755367d941dd5d27e6cefa233adb5..465de46225acf2646ff9fb26669c1271fab5f838 100644 (file)
@@ -97,6 +97,7 @@ static rtx avr_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
                             const_tree, bool);
 static void avr_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
                                      const_tree, bool);
+static void avr_help (void);
 
 /* Allocate registers from r25 to r8 for parameters for function calls.  */
 #define FIRST_CUM_REG 26
@@ -221,6 +222,9 @@ static const struct default_options avr_option_optimization_table[] =
 #undef TARGET_CANNOT_MODIFY_JUMPS_P
 #define TARGET_CANNOT_MODIFY_JUMPS_P avr_cannot_modify_jumps_p
 
+#undef TARGET_HELP
+#define TARGET_HELP avr_help
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 \f
 static void
@@ -236,10 +240,8 @@ avr_option_override (void)
 
   if (!t->name)
     {
-      fprintf (stderr, "unknown MCU '%s' specified\nKnown MCU names:\n",
-              avr_mcu_name);
-      for (t = avr_mcu_types; t->name; t++)
-       fprintf (stderr,"   %s\n", t->name);
+      error ("unrecognized argument to -mmcu= option: %qs", avr_mcu_name);
+      inform (input_location,  "See --target-help for supported MCUs");
     }
 
   avr_current_device = t;
@@ -252,6 +254,42 @@ avr_option_override (void)
   init_machine_status = avr_init_machine_status;
 }
 
+/* Implement TARGET_HELP */
+/* Report extra information for --target-help */
+
+static void
+avr_help (void)
+{
+  const struct mcu_type_s *t;
+  const char * const indent = "  ";
+  int len;
+
+  /* Give a list of MCUs that are accepted by -mmcu=* .
+     Note that MCUs supported by the compiler might differ from
+     MCUs supported by binutils. */
+
+  len = strlen (indent);
+  printf ("Known MCU names:\n%s", indent);
+
+  /* Print a blank-separated list of all supported MCUs */
+
+  for (t = avr_mcu_types; t->name; t++)
+    {
+      printf ("%s ", t->name);
+      len += 1 + strlen (t->name);
+
+      /* Break long lines */
+      
+      if (len > 66 && (t+1)->name)
+        {
+          printf ("\n%s", indent);
+          len = strlen (indent);
+        }
+    }
+
+  printf ("\n\n");
+}
+
 /*  return register class from register number.  */
 
 static const enum reg_class reg_class_tab[]={