gnat1drv.adb (Gnat1drv): Test Target_Dependent_Info_Write_Name.
authorRobert Dewar <dewar@adacore.com>
Fri, 12 Apr 2013 12:44:46 +0000 (12:44 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 12 Apr 2013 12:44:46 +0000 (14:44 +0200)
2013-04-12  Robert Dewar  <dewar@adacore.com>

* gnat1drv.adb (Gnat1drv): Test Target_Dependent_Info_Write_Name.
* opt.ads (Target_Dependent_Info_Read): Add _Name, now an access
type (Target_Dependent_Info_Write): Add _Name, now an access type.
* set_targ.adb (Write_Target_Dependent_Values): Use name
from -gnatet switch stored in Target_Dependent_Info_Write_Name
(Read_Target_Dependent_Values): Use name from -gnateT switch
stored in Target_Dependent_Info_Read_Name.
* switch-c.adb: New form of -gnatet and -gnateT switches.
* usage.adb: New form of -gnatet and -gnateT switches with
file name.

From-SVN: r197898

gcc/ada/ChangeLog
gcc/ada/gnat1drv.adb
gcc/ada/opt.ads
gcc/ada/set_targ.adb
gcc/ada/switch-c.adb
gcc/ada/usage.adb

index 49f89b65a864d416cf4370592732e5d83192381d..e71c87783cdbe57fcaac9f1b6eae993023deab26 100644 (file)
@@ -1,3 +1,16 @@
+2013-04-12  Robert Dewar  <dewar@adacore.com>
+
+       * gnat1drv.adb (Gnat1drv): Test Target_Dependent_Info_Write_Name.
+       * opt.ads (Target_Dependent_Info_Read): Add _Name, now an access
+       type (Target_Dependent_Info_Write): Add _Name, now an access type.
+       * set_targ.adb (Write_Target_Dependent_Values): Use name
+       from -gnatet switch stored in Target_Dependent_Info_Write_Name
+       (Read_Target_Dependent_Values): Use name from -gnateT switch
+       stored in Target_Dependent_Info_Read_Name.
+       * switch-c.adb: New form of -gnatet and -gnateT switches.
+       * usage.adb: New form of -gnatet and -gnateT switches with
+       file name.
+
 2013-04-11  Eric Botcazou  <ebotcazou@adacore.com>
 
         * gcc-interface/decl.c (elaborate_expression_1): Skip only constant
index 4bfe7a63d253433cdb76ae5f309bd307f8da9f02..47337aa0724f07467622e274c14f0fcd2b8c56b8 100644 (file)
@@ -881,7 +881,7 @@ begin
 
       --  Generate target dependent output file if requested
 
-      if Target_Dependent_Info_Write then
+      if Target_Dependent_Info_Write_Name /= null then
          Set_Targ.Write_Target_Dependent_Values;
       end if;
 
index 330c8bfad012e2452e4b1c73c1513770d570f9dc..68429a81feacb4e094bd01ce58dc7d383c400f98 100644 (file)
@@ -1331,18 +1331,19 @@ package Opt is
    --  types and dispatching calls, assuming the underlying target supports
    --  it (e.g. in the JVM case).
 
-   Target_Dependent_Info_Read : Boolean := False;
+   Target_Dependent_Info_Read_Name : String_Ptr := null;
    --  GNAT
-   --  Set True to override the normal processing in Get_Targ and set the
-   --  necessary information by reading the target dependent information
-   --  file (see packages Get_Targ and Set_Targ for full details). Set True
-   --  by use of the -gnateT switch.
+   --  Set non-null to override the normal processing in Get_Targ and set the
+   --  necessary information by reading the target dependent information file
+   --  whose name is given here (see packages Get_Targ and Set_Targ for full
+   --  details). Set to non-null file name by use of the -gnateT switch.
 
-   Target_Dependent_Info_Write : Boolean := False;
+   Target_Dependent_Info_Write_Name : String_Ptr := null;
    --  GNAT
-   --  Set True to enable a call to Set_Targ.Write_Target_Dependent_Info which
-   --  writes a target independent information file (see packages Get_Targ and
-   --  Set_Targ for full details). Set True by use of the -gnatet switch.
+   --  Set non-null to enable a call to Set_Targ.Write_Target_Dependent_Info
+   --  which writes a target independent information file (see packages
+   --  Get_Targ and Set_Targ for full details) using the name given by
+   --  this switch. Set to non-null file name by use of the -gnatet switch.
 
    Task_Dispatching_Policy : Character := ' ';
    --  GNAT, GNATBIND
index 4b0c75c4b65ba1ab99c8442994401c14a5ce50e2..6699b418328ae85c818f7ae498ac74df047017b3 100755 (executable)
@@ -35,12 +35,9 @@ with Unchecked_Conversion;
 
 package body Set_Targ is
 
-   ---------------------------------------------
-   -- Data Used to Read/Write target.atp File --
-   ---------------------------------------------
-
-   File_Name : aliased constant String := "target.atp";
-   --  Name of file to read/write
+   --------------------------------------------------------
+   -- Data Used to Read/Write Target Dependent Info File --
+   --------------------------------------------------------
 
    --  Table of string names written to file
 
@@ -369,8 +366,9 @@ package body Set_Targ is
          AddC (ASCII.LF);
 
          if Buflen /= Write (Fdesc, Buffer'Address, Buflen) then
-            Delete_File (File_Name'Address, OK);
-            Fail ("disk full writing target.atp");
+            Delete_File (Target_Dependent_Info_Write_Name'Address, OK);
+            Fail ("disk full writing file "
+                  & Target_Dependent_Info_Write_Name.all);
          end if;
 
          Buflen := 0;
@@ -379,10 +377,11 @@ package body Set_Targ is
    --  Start of processing for Write_Target_Dependent_Values
 
    begin
-      Fdesc := Create_File (File_Name'Address, Text);
+      Fdesc :=
+        Create_File (Target_Dependent_Info_Write_Name.all'Address, Text);
 
       if Fdesc = Invalid_FD then
-         Fail ("cannot create target.atp");
+         Fail ("cannot create file " & Target_Dependent_Info_Write_Name.all);
       end if;
 
       --  Loop through values
@@ -459,7 +458,8 @@ package body Set_Targ is
       Close (Fdesc, OK);
 
       if not OK then
-         Fail ("disk full writing target.atp");
+         Fail ("disk full writing file "
+               & Target_Dependent_Info_Write_Name.all);
       end if;
    end Write_Target_Dependent_Values;
 
@@ -471,7 +471,7 @@ begin
    --  First step: see if the -gnateT switch is present. As we have noted,
    --  this has to be done very early, so can not depend on the normal circuit
    --  for reading switches and setting switches in Opt. The following code
-   --  will set Opt.Target_Dependent_Info_Read if an option starting -gnateT
+   --  will set Opt.Target_Dependent_Info_Read_Name if the switch -gnateT=name
    --  is present in the options string.
 
    declare
@@ -513,11 +513,14 @@ begin
          declare
             Argv_Ptr : constant Big_String_Ptr := save_argv (Arg);
             Argv_Len : constant Nat            := Len_Arg (Arg);
+
          begin
-            if Argv_Len = 7
-              and then Argv_Ptr (1 .. 7) = "-gnateT"
+            if Argv_Len > 8
+              and then Argv_Ptr (1 .. 8) = "-gnateT="
             then
-               Opt.Target_Dependent_Info_Read := True;
+               Opt.Target_Dependent_Info_Read_Name :=
+                 new String'(Argv_Ptr (9 .. Natural (Argv_Len)));
+
             elsif Argv_Len >= 8
               and then Argv_Ptr (1 .. 8) = "-gnatd.b"
             then
@@ -529,7 +532,7 @@ begin
 
    --  If the switch is not set, we get all values from the back end
 
-   if not Opt.Target_Dependent_Info_Read then
+   if Opt.Target_Dependent_Info_Read_Name = null then
 
       --  Set values by direct calls to the back end
 
@@ -560,7 +563,7 @@ begin
 
       Register_Back_End_Types (Register_Float_Type'Access);
 
-   --  Case of reading the target dependent values from target.atp
+   --  Case of reading the target dependent values from file
 
    --  This is bit more complex than might be expected, because it has to be
    --  done very early. All kinds of packages depend on these values, and we
@@ -569,7 +572,7 @@ begin
    --  too early to be using Osint directly.
 
    else
-      Read_File : declare
+      Read_Target_Dependent_Values : declare
          File_Desc : File_Descriptor;
          N         : Natural;
 
@@ -592,9 +595,9 @@ begin
          --  Checks that we have one or more spaces and skips them
 
          procedure FailN (S : String);
-         --  Calls Fail prefixing "target.atp: " to the start of the given
-         --  string, and " name" to the end where name is the currently
-         --  gathered name in Nam_Buf, surrounded by quotes.
+         --  Calls Fail adding " name in file xxx", where name is the currently
+         --  gathered name in Nam_Buf, surrounded by quotes, and xxx is the
+         --  name of the file.
 
          procedure Get_Name;
          --  Scan out name, leaving it in Nam_Buf with Nam_Len set. Calls
@@ -628,7 +631,8 @@ begin
 
          procedure FailN (S : String) is
          begin
-            Fail ("target.atp: " & S & " """ & Nam_Buf (1 .. Nam_Len) & '"');
+            Fail (S & " """ & Nam_Buf (1 .. Nam_Len) & """ in file "
+                  & Target_Dependent_Info_Read_Name.all);
          end FailN;
 
          --------------
@@ -700,19 +704,19 @@ begin
             end loop;
          end Skip_Spaces;
 
-      --  Start of processing for Read_File
+      --  Start of processing for Read_Target_Dependent_Values
 
       begin
-         File_Desc := Open_Read ("target.atp", Text);
+         File_Desc := Open_Read (Target_Dependent_Info_Read_Name.all, Text);
 
          if File_Desc = Invalid_FD then
-            Fail ("cannot read target.atp file");
+            Fail ("cannot read file " & Target_Dependent_Info_Read_Name.all);
          end if;
 
          Buflen := Read (File_Desc, Buffer'Address, Buffer'Length);
 
          if Buflen = Buffer'Length then
-            Fail ("target.atp file is too long");
+            Fail ("file is too long: " & Target_Dependent_Info_Read_Name.all);
          end if;
 
          --  Scan through file for properly formatted entries in first section
@@ -753,20 +757,23 @@ begin
 
          for J in DTR'Range loop
             if not DTR (J) then
-               Fail ("missing entry in target.atp for " & DTN (J).all);
+               Fail ("missing entry for " & DTN (J).all & " in file "
+                     & Target_Dependent_Info_Read_Name.all);
             end if;
          end loop;
 
          --  Now acquire FPT entries
 
          if N >= Buflen then
-            Fail ("target.atp is missing entries for FPT modes");
+            Fail ("missing entries for FPT modes in file "
+                  & Target_Dependent_Info_Read_Name.all);
          end if;
 
          if Buffer (N) = ASCII.LF then
             N := N + 1;
          else
-            Fail ("target.atp is missing blank line");
+            Fail ("missing blank line in file "
+                  & Target_Dependent_Info_Read_Name.all);
          end if;
 
          Num_FPT_Modes := 0;
@@ -810,6 +817,6 @@ begin
                N := N + 1;
             end;
          end loop;
-      end Read_File;
+      end Read_Target_Dependent_Values;
    end if;
 end Set_Targ;
index 4ebecc9430ff86d2830772b199ea966297c54827..9102507230ab8bb70d699bcfb730fddfc8e7d0b8 100644 (file)
@@ -597,7 +597,6 @@ package body Switch.C is
 
                      if Ptr >= Max or else Switch_Chars (Ptr) /= '=' then
                         Bad_Switch ("-gnateO");
-
                      else
                         Object_Path_File_Name :=
                           new String'(Switch_Chars (Ptr + 1 .. Max));
@@ -651,9 +650,25 @@ package body Switch.C is
                   --  -gnatet (write target dependent information)
 
                   when 't' =>
-                     Target_Dependent_Info_Write := True;
+                     if not First_Switch then
+                        Osint.Fail
+                          ("-gnatet must be first if combined with "
+                           & "other switches");
+                     end if;
+
+                     --  Check for '='
+
                      Ptr := Ptr + 1;
 
+                     if Ptr >= Max or else Switch_Chars (Ptr) /= '=' then
+                        Bad_Switch ("-gnatet");
+                     else
+                        Target_Dependent_Info_Write_Name :=
+                          new String'(Switch_Chars (Ptr + 1 .. Max));
+                     end if;
+
+                     return;
+
                   --  -gnateT (read target dependent information)
 
                   when 'T' =>
@@ -663,9 +678,23 @@ package body Switch.C is
                            & "other switches");
                      end if;
 
-                     Target_Dependent_Info_Read := True;
+                     --  Check for '='
+
                      Ptr := Ptr + 1;
 
+                     if Ptr >= Max or else Switch_Chars (Ptr) /= '=' then
+                        Bad_Switch ("-gnateT");
+                     else
+                        --  This parameter was stored by Set_Targ earlier
+
+                        pragma Assert
+                          (Target_Dependent_Info_Read_Name.all =
+                             Switch_Chars (Ptr + 1 .. Max));
+                        null;
+                     end if;
+
+                     return;
+
                   --  -gnateV (validity checks on parameters)
 
                   when 'V' =>
index 7df00c9b3893e0acd327916695c01e5d5c15118f..dd0f2af33e4fef2b532ee8d62a0a62944682cb96 100644 (file)
@@ -243,13 +243,13 @@ begin
 
    --  Line for -gnatet switch
 
-   Write_Switch_Char ("et");
-   Write_Line ("Write target dependent information file");
+   Write_Switch_Char ("et=?");
+   Write_Line ("Write target dependent information file ?, e.g. gnatet=tdf");
 
    --  Line for -gnateT switch
 
-   Write_Switch_Char ("eT");
-   Write_Line ("Read target dependent information file");
+   Write_Switch_Char ("eT=?");
+   Write_Line ("Read target dependent information file ?, e.g. gnateT=tdf");
 
    --  Line for -gnateV switch