[Ada] Add a gnatbind option to generate C code
authorArnaud Charlet <charlet@adacore.com>
Wed, 3 Jul 2019 08:14:00 +0000 (08:14 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 3 Jul 2019 08:14:00 +0000 (08:14 +0000)
2019-07-03  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* bindgen.adb (Gen_Main): Disable generation of reference to
Ada_Main_Program_Name for CCG.
* bindusg.adb (Display): Add -G to the command-line usage for
gnatbind.
* opt.ads (Generate_C_Code): Update comment.
* switch-b.adb (Scan_Binder_Switches): Add handling for -G.

From-SVN: r272965

gcc/ada/ChangeLog
gcc/ada/bindgen.adb
gcc/ada/bindusg.adb
gcc/ada/opt.ads
gcc/ada/switch-b.adb

index d1b11cee9e2fd7991a467ccbb0c2f92b64bdf664..755c9fb2bf792ffc1f249557d487dcf362fbf9de 100644 (file)
@@ -1,3 +1,12 @@
+2019-07-03  Arnaud Charlet  <charlet@adacore.com>
+
+       * bindgen.adb (Gen_Main): Disable generation of reference to
+       Ada_Main_Program_Name for CCG.
+       * bindusg.adb (Display): Add -G to the command-line usage for
+       gnatbind.
+       * opt.ads (Generate_C_Code): Update comment.
+       * switch-b.adb (Scan_Binder_Switches): Add handling for -G.
+
 2019-07-03  Arnaud Charlet  <charlet@adacore.com>
 
        * sem_ch7.adb (Has_Referencer): Do not consider inlined
index b5637a49c4a59687b7ee4fcd5e24533d36274e80..9efc873c3e44a1765a9bbfd6ca3fb7c836246db8 100644 (file)
@@ -1805,13 +1805,18 @@ package body Bindgen is
       --  referenced elsewhere in the generated program, but is needed by
       --  the debugger (that's why it is generated in the first place). The
       --  reference stops Ada_Main_Program_Name from being optimized away by
-      --  smart linkers, such as the AiX linker.
+      --  smart linkers.
 
       --  Because this variable is unused, we make this variable "aliased"
       --  with a pragma Volatile in order to tell the compiler to preserve
       --  this variable at any level of optimization.
 
-      if Bind_Main_Program and not CodePeer_Mode then
+      --  CodePeer and CCG do not need this extra code on the other hand.
+
+      if Bind_Main_Program
+        and then not CodePeer_Mode
+        and then not Generate_C_Code
+      then
          WBI ("      Ensure_Reference : aliased System.Address := " &
               "Ada_Main_Program_Name'Address;");
          WBI ("      pragma Volatile (Ensure_Reference);");
index d4ac1b36598b15ab6d1144429a0663fd49cb7afb..8c51d116feed162cf486610391a2bc1b79c9daee 100644 (file)
@@ -133,6 +133,11 @@ package body Bindusg is
       Write_Line
         ("  -F        Force checking of elaboration Flags");
 
+      --  Line for -G switch
+
+      Write_Line
+        ("  -G        Generate binder file suitable for CCG");
+
       --  Line for -h switch
 
       Write_Line
index 4ee5fdbf2bcf81bcb118e71fcca92ffad523e6d7..16b5cbae00a64e2fe88a8dd16d97b36c332aa465 100644 (file)
@@ -746,9 +746,9 @@ package Opt is
    --  file name with extension stripped.
 
    Generate_C_Code : Boolean := False;
-   --  GNAT
+   --  GNAT, GNATBIND
    --  If True, the Cprint circuitry to generate C code output is activated.
-   --  Set True by use of -gnateg or -gnatd.V.
+   --  Set True by use of -gnateg or -gnatd.V for GNAT, and -G for GNATBIND.
 
    Generate_CodePeer_Messages : Boolean := False;
    --  GNAT
index 2f8831b36f74b5912fdf52cc19ae49a89529b591..fdba595166ece7226904ce388e8c68d103ae33cb 100644 (file)
@@ -294,6 +294,12 @@ package body Switch.B is
                Debugger_Level := 2;
             end if;
 
+         --  Processing for G switch
+
+         when 'G' =>
+            Ptr := Ptr + 1;
+            Generate_C_Code := True;
+
          --  Processing for h switch
 
          when 'h' =>