[Ada] darwin fix wrt -static/shared-libgcc
Arnaud Charlet
charlet@adacore.com
Tue Oct 31 19:50:00 GMT 2006
Manually tested on darwin.
Tested on i686-linux, committed on trunk.
On darwin, -shared-libgcc or -static-libgcc must be explicitly provided
at link time with GCC 4 for any program to work. This fix makes sure
that if -shared-libgcc is not used to link, -static-libgcc is used.
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.
-------------- next part --------------
Index: gnatlink.adb
===================================================================
--- gnatlink.adb (revision 118179)
+++ gnatlink.adb (working copy)
@@ -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
More information about the Gcc-patches
mailing list