* switch.adb (Is_Internal_GCC_Switch, Switch_Last): Bodies of ...
authorhainque <hainque@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 24 May 2009 09:14:53 +0000 (09:14 +0000)
committerhainque <hainque@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 24 May 2009 09:14:53 +0000 (09:14 +0000)
        * switch.ads (Is_Internal_GCC_Switch, Switch_Last): New functions.
        Add -auxbase variants to the list of recognized internal switches.
        * back_end.adb (Scan_Back_End_Switches): Use the new functions and
        adjust comments.
        * lib.ads: Make comment on internal GCC switches more general.
        * gcc-interface/lang-specs.h (specs for Ada): Pass -auxbase variants
        as for C.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147830 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/back_end.adb
gcc/ada/gcc-interface/lang-specs.h
gcc/ada/lib.ads
gcc/ada/switch.adb
gcc/ada/switch.ads

index 27665e4..6a652be 100644 (file)
@@ -1,3 +1,14 @@
+2009-05-24  Olivier Hainque  <hainque@adacore.com>
+
+       * switch.adb (Is_Internal_GCC_Switch, Switch_Last): Bodies of ...
+       * switch.ads (Is_Internal_GCC_Switch, Switch_Last): New functions.
+       Add -auxbase variants to the list of recognized internal switches.
+       * back_end.adb (Scan_Back_End_Switches): Use the new functions and
+       adjust comments.
+       * lib.ads: Make comment on internal GCC switches more general.
+       * gcc-interface/lang-specs.h (specs for Ada): Pass -auxbase variants
+       as for C.       
+       
 2009-05-23  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/misc.c (gnat_get_subrange_bounds): Fix thinko.
index baf3ffd..a15d9ec 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -158,12 +158,10 @@ package body Back_End is
       --  entire string should consist of valid switch characters, except that
       --  an optional terminating NUL character is allowed.
       --
-      --  Back end switches have already been checked and processed by GCC
-      --  in toplev.c, so no errors can occur and control will always return.
-      --  The switches must still be scanned to skip the arguments of the
-      --  "-o" or the (undocumented) "-dumpbase" switch, by incrementing
-      --  the Next_Arg variable. The "-dumpbase" switch is used to set the
-      --  basename for GCC dumpfiles.
+      --  Back end switches have already been checked and processed by GCC in
+      --  toplev.c, so no errors can occur and control will always return. The
+      --  switches must still be scanned to skip "-o" or internal GCC switches
+      --  with their argument.
 
       -------------
       -- Len_Arg --
@@ -186,21 +184,13 @@ package body Back_End is
 
       procedure Scan_Back_End_Switches (Switch_Chars : String) is
          First : constant Positive := Switch_Chars'First + 1;
-         Last  : Natural := Switch_Chars'Last;
+         Last  : constant Natural  := Switch_Last (Switch_Chars);
 
       begin
-         if Last >= First
-           and then Switch_Chars (Last) = ASCII.NUL
-         then
-            Last := Last - 1;
-         end if;
-
-         --  For switches -o, -dumpbase, --param, skip following argument and
-         --  do not store either the switch or the following argument.
+         --  Skip -o or internal GCC switches together with their argument
 
-         if Switch_Chars (First .. Last) = "o"        or else
-            Switch_Chars (First .. Last) = "dumpbase" or else
-            Switch_Chars (First .. Last) = "-param"
+         if Switch_Chars (First .. Last) = "o"
+           or else Is_Internal_GCC_Switch (Switch_Chars)
          then
             Next_Arg := Next_Arg + 1;
 
index c07547f..1afba37 100644 (file)
@@ -35,6 +35,7 @@
  gnat1 %{I*} %{k8:-gnatk8} %{Wall:-gnatwa} %{w:-gnatws} %{!Q:-quiet}\
     %{nostdinc*} %{nostdlib*}\
     -dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\
+    %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} \
     %{O*} %{W*} %{w} %{p} %{pg:-p} %{a} %{d*} %{f*}\
     %{coverage:-fprofile-arcs -ftest-coverage} "
 #if CONFIG_DUAL_EXCEPTIONS
index 50be722..145d16d 100644 (file)
@@ -734,9 +734,9 @@ private
      Table_Name           => "Linker_Option_Lines");
 
    --  The following table records the compilation switches used to compile
-   --  the main unit. The table includes only switches and excludes -quiet,
-   --  -dumpbase, and -o switches, since the latter are typically artifacts
-   --  of the gcc/gnat1 interface.
+   --  the main unit. The table includes only switches. It excludes -o
+   --  switches as well as artifacts of the gcc/gnat1 interface such as
+   --  -quiet, -dumpbase, or -auxbase.
 
    --  This table is set as part of the compiler argument scanning in
    --  Back_End. It can also be reset in -gnatc mode from the data in an
index f318de7..cb5c4d1 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -138,6 +138,22 @@ package body Switch is
                       and then Switch_Chars (Ptr + 2 .. Ptr + 4) = "RTS"));
    end Is_Front_End_Switch;
 
+   ----------------------------
+   -- Is_Internal_GCC_Switch --
+   ----------------------------
+
+   function Is_Internal_GCC_Switch (Switch_Chars : String) return Boolean is
+      First : constant Natural := Switch_Chars'First + 1;
+      Last  : constant Natural := Switch_Last (Switch_Chars);
+   begin
+      return Is_Switch (Switch_Chars)
+        and then
+          (Switch_Chars (First .. Last) = "-param"        or else
+           Switch_Chars (First .. Last) = "dumpbase"      or else
+           Switch_Chars (First .. Last) = "auxbase-strip" or else
+           Switch_Chars (First .. Last) = "auxbase");
+   end Is_Internal_GCC_Switch;
+
    ---------------
    -- Is_Switch --
    ---------------
@@ -149,6 +165,22 @@ package body Switch is
    end Is_Switch;
 
    -----------------
+   -- Switch_last --
+   -----------------
+
+   function Switch_Last (Switch_Chars : String) return Natural is
+      Last : constant Natural := Switch_Chars'Last;
+   begin
+      if Last >= Switch_Chars'First
+        and then Switch_Chars (Last) = ASCII.NUL
+      then
+         return Last - 1;
+      else
+         return Last;
+      end if;
+   end Switch_Last;
+
+   -----------------
    -- Nat_Present --
    -----------------
 
index 9b6c7ea..027bf83 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -72,11 +72,21 @@ package Switch is
    --  Returns True iff Switch_Chars represents a front-end switch, i.e. it
    --  starts with -I, -gnat or -?RTS.
 
-private
+   function Is_Internal_GCC_Switch (Switch_Chars : String) return Boolean;
+   --  Returns True iff Switch_Chars represents an internal GCC switch to be
+   --  followed by a single argument, such as -dumpbase, --param or -auxbase.
+   --  Eventhough passed by the "gcc" driver, these need not be stored in ALI
+   --  files and may safely be ignored by non GCC back-ends.
+
+   function Switch_Last (Switch_Chars : String) return Natural;
+   --  Index in Switch_Chars of the last relevant character for later string
+   --  comparison purposes. This is typically 'Last, minus one if there is a
+   --  terminating ASCII.NUL.
 
+private
    --  This section contains some common routines used by the tool dependent
-   --  child packages (there is one such child package for each tool that
-   --  uses Switches to scan switches - Compiler/gnatbind/gnatmake/.
+   --  child packages (there is one such child package for each tool that uses
+   --  Switches to scan switches - Compiler/gnatbind/gnatmake/.
 
    Switch_Max_Value : constant := 999_999;
    --  Maximum value permitted in switches that take a value