Index: gcc/ada/gnatbind.adb =================================================================== --- gcc/ada/gnatbind.adb +++ gcc/ada/gnatbind.adb @@ -346,6 +346,11 @@ then Add_Lib_Search_Dir (Argv (4 .. Argv'Last)); + -- -freestanding + + elsif Argv (2 .. Argv'Last) = "freestanding" then + Opt.Freestanding := True; + -- -nostdlib elsif Argv (2 .. Argv'Last) = "nostdlib" then Index: gcc/ada/bindgen.adb =================================================================== --- gcc/ada/bindgen.adb.orig Thu Dec 13 10:20:52 2007 +++ gcc/ada/bindgen.adb Wed Feb 13 20:47:32 2008 @@ -1480,6 +1480,10 @@ WBI (" procedure Ada_Main_Program;"); end if; + if Opt.Freestanding then + WBI (" pragma No_Return (Ada_Main_Program);"); + end if; + Set_String (" pragma Import (Ada, Ada_Main_Program, """); Get_Name_String (Units.Table (First_Unit_Entry).Uname); Set_Main_Program_Name; @@ -1506,7 +1510,7 @@ -- with a pragma Volatile in order to tell the compiler to preserve -- this variable at any level of optimization. - if Bind_Main_Program then + if Bind_Main_Program and then not Opt.Freestanding then WBI (" Ensure_Reference : aliased System.Address := " & "Ada_Main_Program_Name'Address;"); @@ -1570,7 +1574,9 @@ WBI (" " & Ada_Init_Name.all & ";"); if not No_Main_Subprogram then - WBI (" Break_Start;"); + if not Opt.Freestanding then + WBI (" Break_Start;"); + end if; if ALIs.Table (ALIs.First).Main_Program = Proc then WBI (" Ada_Main_Program;"); @@ -2349,6 +2355,10 @@ end if; end if; + if Opt.Freestanding then + WBI (" pragma No_Return (" & Get_Main_Name & ");"); + end if; + WBI (" pragma Export (C, " & Get_Main_Name & ", """ & Get_Main_Name & """);"); end if; @@ -2650,7 +2660,7 @@ -- circumstances to a symbol duplication during the link (for instance -- when a C program uses 2 Ada libraries) - if Bind_Main_Program then + if Bind_Main_Program and then not Opt.Freestanding then WBI (""); WBI ("char __gnat_version[] = ""GNAT Version: " & Gnat_Version_String & """;"); @@ -2933,7 +2943,7 @@ -- Start of processing for Gen_Versions_Ada begin - if Bind_For_Library then + if Bind_For_Library or else Opt.Freestanding then -- When building libraries, the version number of each unit can -- not be computed, since the binder does not know the full list --- gcc/ada/opt.ads.orig Wed Feb 13 20:14:03 2008 +++ gcc/ada/opt.ads Wed Feb 13 20:16:05 2008 @@ -509,6 +509,13 @@ -- GNATMAKE, GPRMAKE, GPRBUILD -- Set to force recompilations even when the objects are up-to-date. + Freestanding : Boolean := False; + -- GNATBIND + -- Set to True if no environment exists. This is typically the + -- case in embedded systems without an operating system. The main + -- program does not read command line parameters nor does it + -- return. + Full_Path_Name_For_Brief_Errors : Boolean := False; -- PROJECT MANAGER -- When True, in Brief_Output mode, each error message line