switch.adb (Is_Internal_GCC_Switch, [...]): Bodies of ...

* switch.adb (Is_Internal_GCC_Switch, Switch_Last): Bodies of ...
        * switch.ads (Is_Internal_GCC_Switch, Switch_Last): New functions.
        Add -auxbase variants to the list of recognized internal switches.
        * back_end.adb (Scan_Back_End_Switches): Use the new functions and
        adjust comments.
        * lib.ads: Make comment on internal GCC switches more general.
        * gcc-interface/lang-specs.h (specs for Ada): Pass -auxbase variants
        as for C.

From-SVN: r147830
This commit is contained in:
Olivier Hainque 2009-05-24 09:14:53 +00:00 committed by Olivier Hainque
parent a70d634247
commit 6e00e54643
6 changed files with 71 additions and 27 deletions

View File

@ -1,3 +1,14 @@
2009-05-24 Olivier Hainque <hainque@adacore.com>
* switch.adb (Is_Internal_GCC_Switch, Switch_Last): Bodies of ...
* switch.ads (Is_Internal_GCC_Switch, Switch_Last): New functions.
Add -auxbase variants to the list of recognized internal switches.
* back_end.adb (Scan_Back_End_Switches): Use the new functions and
adjust comments.
* lib.ads: Make comment on internal GCC switches more general.
* gcc-interface/lang-specs.h (specs for Ada): Pass -auxbase variants
as for C.
2009-05-23 Eric Botcazou <ebotcazou@adacore.com> 2009-05-23 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/misc.c (gnat_get_subrange_bounds): Fix thinko. * gcc-interface/misc.c (gnat_get_subrange_bounds): Fix thinko.

View File

@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1992-2008, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
@ -158,12 +158,10 @@ package body Back_End is
-- entire string should consist of valid switch characters, except that -- entire string should consist of valid switch characters, except that
-- an optional terminating NUL character is allowed. -- an optional terminating NUL character is allowed.
-- --
-- Back end switches have already been checked and processed by GCC -- Back end switches have already been checked and processed by GCC in
-- in toplev.c, so no errors can occur and control will always return. -- toplev.c, so no errors can occur and control will always return. The
-- The switches must still be scanned to skip the arguments of the -- switches must still be scanned to skip "-o" or internal GCC switches
-- "-o" or the (undocumented) "-dumpbase" switch, by incrementing -- with their argument.
-- the Next_Arg variable. The "-dumpbase" switch is used to set the
-- basename for GCC dumpfiles.
------------- -------------
-- Len_Arg -- -- Len_Arg --
@ -186,21 +184,13 @@ package body Back_End is
procedure Scan_Back_End_Switches (Switch_Chars : String) is procedure Scan_Back_End_Switches (Switch_Chars : String) is
First : constant Positive := Switch_Chars'First + 1; First : constant Positive := Switch_Chars'First + 1;
Last : Natural := Switch_Chars'Last; Last : constant Natural := Switch_Last (Switch_Chars);
begin begin
if Last >= First -- Skip -o or internal GCC switches together with their argument
and then Switch_Chars (Last) = ASCII.NUL
then
Last := Last - 1;
end if;
-- For switches -o, -dumpbase, --param, skip following argument and if Switch_Chars (First .. Last) = "o"
-- do not store either the switch or the following argument. or else Is_Internal_GCC_Switch (Switch_Chars)
if Switch_Chars (First .. Last) = "o" or else
Switch_Chars (First .. Last) = "dumpbase" or else
Switch_Chars (First .. Last) = "-param"
then then
Next_Arg := Next_Arg + 1; Next_Arg := Next_Arg + 1;

View File

@ -35,6 +35,7 @@
gnat1 %{I*} %{k8:-gnatk8} %{Wall:-gnatwa} %{w:-gnatws} %{!Q:-quiet}\ gnat1 %{I*} %{k8:-gnatk8} %{Wall:-gnatwa} %{w:-gnatws} %{!Q:-quiet}\
%{nostdinc*} %{nostdlib*}\ %{nostdinc*} %{nostdlib*}\
-dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\ -dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\
%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} \
%{O*} %{W*} %{w} %{p} %{pg:-p} %{a} %{d*} %{f*}\ %{O*} %{W*} %{w} %{p} %{pg:-p} %{a} %{d*} %{f*}\
%{coverage:-fprofile-arcs -ftest-coverage} " %{coverage:-fprofile-arcs -ftest-coverage} "
#if CONFIG_DUAL_EXCEPTIONS #if CONFIG_DUAL_EXCEPTIONS

View File

@ -734,9 +734,9 @@ private
Table_Name => "Linker_Option_Lines"); Table_Name => "Linker_Option_Lines");
-- The following table records the compilation switches used to compile -- The following table records the compilation switches used to compile
-- the main unit. The table includes only switches and excludes -quiet, -- the main unit. The table includes only switches. It excludes -o
-- -dumpbase, and -o switches, since the latter are typically artifacts -- switches as well as artifacts of the gcc/gnat1 interface such as
-- of the gcc/gnat1 interface. -- -quiet, -dumpbase, or -auxbase.
-- This table is set as part of the compiler argument scanning in -- This table is set as part of the compiler argument scanning in
-- Back_End. It can also be reset in -gnatc mode from the data in an -- Back_End. It can also be reset in -gnatc mode from the data in an

View File

@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1992-2008, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
@ -138,6 +138,22 @@ package body Switch is
and then Switch_Chars (Ptr + 2 .. Ptr + 4) = "RTS")); and then Switch_Chars (Ptr + 2 .. Ptr + 4) = "RTS"));
end Is_Front_End_Switch; end Is_Front_End_Switch;
----------------------------
-- Is_Internal_GCC_Switch --
----------------------------
function Is_Internal_GCC_Switch (Switch_Chars : String) return Boolean is
First : constant Natural := Switch_Chars'First + 1;
Last : constant Natural := Switch_Last (Switch_Chars);
begin
return Is_Switch (Switch_Chars)
and then
(Switch_Chars (First .. Last) = "-param" or else
Switch_Chars (First .. Last) = "dumpbase" or else
Switch_Chars (First .. Last) = "auxbase-strip" or else
Switch_Chars (First .. Last) = "auxbase");
end Is_Internal_GCC_Switch;
--------------- ---------------
-- Is_Switch -- -- Is_Switch --
--------------- ---------------
@ -148,6 +164,22 @@ package body Switch is
and then Switch_Chars (Switch_Chars'First) = '-'; and then Switch_Chars (Switch_Chars'First) = '-';
end Is_Switch; end Is_Switch;
-----------------
-- Switch_last --
-----------------
function Switch_Last (Switch_Chars : String) return Natural is
Last : constant Natural := Switch_Chars'Last;
begin
if Last >= Switch_Chars'First
and then Switch_Chars (Last) = ASCII.NUL
then
return Last - 1;
else
return Last;
end if;
end Switch_Last;
----------------- -----------------
-- Nat_Present -- -- Nat_Present --
----------------- -----------------

View File

@ -6,7 +6,7 @@
-- -- -- --
-- S p e c -- -- S p e c --
-- -- -- --
-- Copyright (C) 1992-2008, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
@ -72,11 +72,21 @@ package Switch is
-- Returns True iff Switch_Chars represents a front-end switch, i.e. it -- Returns True iff Switch_Chars represents a front-end switch, i.e. it
-- starts with -I, -gnat or -?RTS. -- starts with -I, -gnat or -?RTS.
private function Is_Internal_GCC_Switch (Switch_Chars : String) return Boolean;
-- Returns True iff Switch_Chars represents an internal GCC switch to be
-- followed by a single argument, such as -dumpbase, --param or -auxbase.
-- Eventhough passed by the "gcc" driver, these need not be stored in ALI
-- files and may safely be ignored by non GCC back-ends.
function Switch_Last (Switch_Chars : String) return Natural;
-- Index in Switch_Chars of the last relevant character for later string
-- comparison purposes. This is typically 'Last, minus one if there is a
-- terminating ASCII.NUL.
private
-- This section contains some common routines used by the tool dependent -- This section contains some common routines used by the tool dependent
-- child packages (there is one such child package for each tool that -- child packages (there is one such child package for each tool that uses
-- uses Switches to scan switches - Compiler/gnatbind/gnatmake/. -- Switches to scan switches - Compiler/gnatbind/gnatmake/.
Switch_Max_Value : constant := 999_999; Switch_Max_Value : constant := 999_999;
-- Maximum value permitted in switches that take a value -- Maximum value permitted in switches that take a value