From e62ffc17a901396c3933f16059d77f6e56b6a701 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Sun, 19 Nov 2017 22:36:25 +0000 Subject: [PATCH] PR ada/83016 * gnatlink.adb (Process_Args): Accept multiple switches for --LINK. (Usage): Adjust. * gcc-interface/Makefile.in (GCC_LINK): Remove $(ADA_INCLUDES). (common-tools): Pass $(CC) as --GCC= and $(GCC_LINK) as --LINK= in the invocations of $(GNATLINK). (../../gnatdll$(exeext)): Likewise. (../../vxaddr2line$(exeext)): Likewise. (gnatmake-re): Likewise. (gnatlink-re): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254940 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 15 ++++++++++++++- gcc/ada/gcc-interface/Makefile.in | 30 ++++++++++++++++-------------- gcc/ada/gnatlink.adb | 36 ++++++++++++++++++++++++++++-------- 3 files changed, 58 insertions(+), 23 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 28cfd17112b..1d829f2040a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,16 @@ +2017-11-20 Eric Botcazou + + PR ada/83016 + * gnatlink.adb (Process_Args): Accept multiple switches for --LINK. + (Usage): Adjust. + * gcc-interface/Makefile.in (GCC_LINK): Remove $(ADA_INCLUDES). + (common-tools): Pass $(CC) as --GCC= and $(GCC_LINK) as --LINK= in + the invocations of $(GNATLINK). + (../../gnatdll$(exeext)): Likewise. + (../../vxaddr2line$(exeext)): Likewise. + (gnatmake-re): Likewise. + (gnatlink-re): Likewise. + 2017-11-16 Doug Rupp * gcc-interface/Makefile.in: Merge Aarch64 and ARM "ifeq" blocks. @@ -32,7 +45,7 @@ * doc/gnat_ugn/gnat_utility_programs.rst (GNAT UGN): Add gnatsymbolize documentation. - * gnat_ugn.texi: Regenerate. + * gnat_ugn.texi: Regenerate. 2017-11-16 Steve Baird diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in index db67dcbf187..a6da00ec92c 100644 --- a/gcc/ada/gcc-interface/Makefile.in +++ b/gcc/ada/gcc-interface/Makefile.in @@ -2111,7 +2111,7 @@ TOOLS_FLAGS_TO_PASS= \ "GNATLINK=$(GNATLINK)" \ "GNATBIND=$(GNATBIND)" -GCC_LINK=$(CXX) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) $(LDFLAGS) +GCC_LINK=$(CXX) $(GCC_LINK_FLAGS) $(LDFLAGS) # Build directory for the tools. Let's copy the target-dependent # sources using the same mechanism as for gnatlib. The other sources are @@ -2183,40 +2183,42 @@ common-tools: ../stamp-tools gnatchop gnatcmd gnatkr gnatls gnatprep gnatxref gnatfind gnatname \ gnatclean -bargs $(ADA_INCLUDES) $(GNATBIND_FLAGS) $(GNATLINK) -v gnatcmd -o ../../gnat$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) $(GNATLINK) -v gnatchop -o ../../gnatchop$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) $(GNATLINK) -v gnatkr -o ../../gnatkr$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) $(GNATLINK) -v gnatls -o ../../gnatls$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) $(GNATLINK) -v gnatprep -o ../../gnatprep$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) $(GNATLINK) -v gnatxref -o ../../gnatxref$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) $(GNATLINK) -v gnatfind -o ../../gnatfind$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) $(GNATLINK) -v gnatname -o ../../gnatname$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) $(GNATLINK) -v gnatclean -o ../../gnatclean$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) ../../gnatdll$(exeext): ../stamp-tools $(GNATMAKE) -c $(ADA_INCLUDES) gnatdll --GCC="$(CC) $(ALL_ADAFLAGS)" $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatdll - $(GNATLINK) -v gnatdll -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + $(GNATLINK) -v gnatdll -o $@ \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) ../../vxaddr2line$(exeext): ../stamp-tools $(GNATMAKE) -c $(ADA_INCLUDES) vxaddr2line --GCC="$(CC) $(ALL_ADAFLAGS)" $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) vxaddr2line - $(GNATLINK) -v vxaddr2line -o $@ --GCC="$(GCC_LINK)" ../targext.o $(CLIB) + $(GNATLINK) -v vxaddr2line -o $@ \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" ../targext.o $(CLIB) gnatmake-re: ../stamp-tools $(GNATMAKE) -j0 $(ADA_INCLUDES) -u sdefault --GCC="$(CC) $(MOST_ADA_FLAGS)" $(GNATMAKE) -j0 -c $(ADA_INCLUDES) gnatmake --GCC="$(CC) $(ALL_ADAFLAGS)" $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatmake $(GNATLINK) -v gnatmake -o ../../gnatmake$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) # Note the use of the "mv" command in order to allow gnatlink to be linked with # with the former version of gnatlink itself which cannot override itself. @@ -2226,7 +2228,7 @@ gnatlink-re: ../stamp-tools gnatmake-re $(GNATMAKE) -j0 -c $(ADA_INCLUDES) gnatlink --GCC="$(CC) $(ALL_ADAFLAGS)" $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlink $(GNATLINK) -v gnatlink -o ../../gnatlinknew$(exeext) \ - --GCC="$(GCC_LINK)" $(TOOLS_LIBS) + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) $(MV) ../../gnatlinknew$(exeext) ../../gnatlink$(exeext) # Needs to be built with CC=gcc diff --git a/gcc/ada/gnatlink.adb b/gcc/ada/gnatlink.adb index 5e290eb639f..4b7f21d97e1 100644 --- a/gcc/ada/gnatlink.adb +++ b/gcc/ada/gnatlink.adb @@ -529,15 +529,35 @@ procedure Gnatlink is Exit_With_Error ("Missing argument for --LINK="); end if; - Linker_Path := - System.OS_Lib.Locate_Exec_On_Path (Arg (8 .. Arg'Last)); + declare + L_Args : constant Argument_List_Access := + Argument_String_To_List (Arg (8 .. Arg'Last)); + begin + -- The linker program is the first argument + + Linker_Path := + System.OS_Lib.Locate_Exec_On_Path (L_Args.all (1).all); + + if Linker_Path = null then + Exit_With_Error + ("Could not locate linker: " & L_Args.all (1).all); + end if; + + -- The other arguments are passed as-is to the linker + + for J in 2 .. L_Args.all'Last loop + Gcc_Linker_Options.Increment_Last; + Gcc_Linker_Options.Table + (Gcc_Linker_Options.Last) := + new String'(L_Args.all (J).all); + end loop; + end; - if Linker_Path = null then - Exit_With_Error - ("Could not locate linker: " & Arg (8 .. Arg'Last)); + elsif Arg'Length >= 6 and then Arg (1 .. 6) = "--GCC=" then + if Arg'Length = 6 then + Exit_With_Error ("Missing argument for --GCC="); end if; - elsif Arg'Length > 6 and then Arg (1 .. 6) = "--GCC=" then declare Program_Args : constant Argument_List_Access := Argument_String_To_List @@ -1413,8 +1433,8 @@ procedure Gnatlink is Write_Line (" -M Create map file mainprog.map"); end if; - Write_Line (" --GCC=comp Use comp as the compiler"); - Write_Line (" --LINK=nam Use 'nam' for the linking rather than 'gcc'"); + Write_Line (" --GCC=comp Use 'comp' as the compiler rather than 'gcc'"); + Write_Line (" --LINK=lnk Use 'lnk' as the linker rather than 'gcc'"); Write_Eol; Write_Line (" [non-Ada-objects] list of non Ada object files"); Write_Line (" [linker-options] other options for the linker"); -- 2.11.4.GIT