gnatlink.adb (Gnatlink): If gcc is not called with -shared-libgcc...
authorVincent Celier <celier@adacore.com>
Tue, 31 Oct 2006 17:59:58 +0000 (18:59 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 31 Oct 2006 17:59:58 +0000 (18:59 +0100)
2006-10-31  Vincent Celier  <celier@adacore.com>

* gnatlink.adb (Gnatlink): If gcc is not called with -shared-libgcc,
call it with -static-libgcc, as there are some platforms, such as
Darwin, where one of these two switches is compulsory to link.

From-SVN: r118277

gcc/ada/gnatlink.adb

index a2e63823846623f55ea6a6bdbce7051c732c6449..5e5f144790fef25d471821a9bd1cd668fef9d29e 100644 (file)
@@ -57,6 +57,11 @@ procedure Gnatlink is
                             new String'(Shared_Libgcc_String);
    --  Used to invoke gcc when the binder is invoked with -shared
 
+   Static_Libgcc_String : constant String := "-static-libgcc";
+   Static_Libgcc        : constant String_Access :=
+                            new String'(Static_Libgcc_String);
+   --  Used to invoke gcc when shared libs are not used
+
    package Gcc_Linker_Options is new Table.Table (
      Table_Component_Type => String_Access,
      Table_Index_Type     => Integer,
@@ -71,7 +76,7 @@ procedure Gnatlink is
      Table_Index_Type     => Integer,
      Table_Low_Bound      => 1,
      Table_Initial        => 4096,
-     Table_Increment      => 2,
+     Table_Increment      => 100,
      Table_Name           => "Gnatlink.Libpath");
    --  Comments needed ???
 
@@ -661,6 +666,7 @@ procedure Gnatlink is
       --  Last object file index in Linker_Objects table
 
       Status : int;
+      pragma Warnings (Off, Status);
       --  Used for various Interfaces.C_Streams calls
 
       Closing_Status : Boolean;
@@ -1803,6 +1809,17 @@ begin
 
                J := J + 1;
             end loop;
+
+            --  If gcc is not called with -shared-libgcc, call it with
+            --  -static-libgcc, as there are some platforms where one of these
+            --  two switches is compulsory to link.
+
+            if not Shared_Libgcc_Seen then
+               Linker_Options.Increment_Last;
+               Linker_Options.Table (Linker_Options.Last) := Static_Libgcc;
+               Num_Args := Num_Args + 1;
+            end if;
+
          end Clean_Link_Option_Set;
 
          --  Prepare arguments for call to linker