On Sat, 2009-08-22 at 23:33 +0200, Laurent GUERBY wrote: > On Mon, 2009-08-17 at 12:00 +0200, Mikael Pettersson wrote: > > On Wed, 12 Aug 2009 23:08:00 +0200, Matthias Klose <d...@debian.org> wrote: > > >On 12.08.2009 23:07, Martin Guy wrote: > > >> On 8/12/09, Joel Sherrill<joel.sherr...@oarcorp.com> wrote: > > >>> So any ACATS results from any other ARM target would be > > >>> appreciated. > > >> > > >> I looked into gnat-arm for the new Debian port and the conclusion was > > >> that it has never been bootstrapped onto ARM. The closest I have seen > > >> is Adacore's GNATPro x86->xscale cross-compiler hosted on Windows and > > >> targetting Nucleus OS (gak!) > > >> > > >> The community feeling was that it would "just go" given a prodigal > > >> burst of cross-compiling, but I never got achieved sufficiently high > > >> blood pressure to try it... > > > > > >is there any arm-linx-gnueabi gnat binary that could be used to bootstrap > > >an > > >initial gnat-4.4 package for debian? > > > > > > Matthias > > > > Yes, see <http://user.it.uu.se/~mikpe/linux/arm-eabi-ada/>. > > Nice work! > > Looks like Ada exception propagation (setjmp/longjmp based) is broken at > least in some cases (see below), that might explain the high number of > ACATS failure. > > My understanding is that > > EH_MECHANISM=-gcc > > is not correct for sjlj exceptions so I removed this line from the patch > and I'm currently testing with trunk.
With this change plus the gcc/ada/gcc-interface/targtyps.c one I get very good native arm ACATS and gnat.dg results: http://gcc.gnu.org/ml/gcc-testresults/2009-08/msg03024.html << Native configuration is armv5tel-unknown-linux-gnueabi === acats tests === FAIL: c250001 FAIL: c37105a FAIL: c43205b === acats Summary === # of expected passes 2311 # of unexpected failures 3 === gnat tests === Running target unix FAIL: gnat.dg/test_raise_from_pure.adb execution test FAIL: gnat.dg/warn5.adb (test for excess errors) === gnat Summary === # of expected passes 682 # of unexpected failures 2 # of expected failures 5 >> It would be nice to have a ZCX port but so far the sjlj exceptions based port works fine. I'm attaching the patch for reference, I'm away at ICFP09 next week. Laurent c250001.a:1:01: warning: file contains no compilation units no compilation units found no source files written BUILD FAIL: c250001 (=> probably due to NFS use) ,.,. C37105A ACATS 2.5 09-08-29 00:53:53 ---- C37105A RECORDS WITH ONLY DISCRIMINANTS. * C37105A DISCRIMINANT-ONLY RECORDS DON'T WORK. **** C37105A FAILED ****************************. /home/guerby/build/gcc/xgcc -c -B/home/guerby/build/gcc/ -gnatws -O2 -I/home/guerby/build/gcc/testsuite/ada/acats/support c43205b.adb +===========================GNAT BUG DETECTED==============================+ | 4.5.0 20090822 (experimental) [trunk revision 151016] (armv5tel-unknown-linux-gnueabi) GCC error:| | tree check: expected integer_cst, have var_decl in int_const_binop, | | at fold-const.c:1668 | | Error detected around c43205b.adb:82:5 | | Please submit a bug report; see http://gcc.gnu.org/bugs.html. | | Use a subject line meaningful to you and us to track the bug. | | Include the entire contents of this bug box in the report. | | Include the exact gcc or gnatmake command that you entered. | | Also include sources listed below in gnatchop format | | (concatenated together with no headers between files). | +==========================================================================+ Please include these source files with error report Note that list may not be accurate in some cases, so please double check that the problem can still be reproduced with the set of files listed. Consider also -gnatd.n switch (see debug.adb). /home/guerby/build/gcc/ada/rts/system.ads c43205b.adb /home/guerby/build/gcc/testsuite/ada/acats/support/report.ads raised TYPES.UNRECOVERABLE_ERROR : comperr.adb:423 gnatmake: "c43205b.adb" compilation error FAIL: c43205b raised CONSTRAINT_ERROR : raise_from_pure.adb:5 explicit raise FAIL: gnat.dg/test_raise_from_pure.adb execution test warn5.adb:29:30: warning: source alignment (4) < alignment of "Element_Type" (8)^M output is: warn5.adb:29:30: warning: source alignment (4) < alignment of "Element_Type" (8)^M FAIL: gnat.dg/warn5.adb (test for excess errors) Excess errors: warn5.adb:29:30: warning: source alignment (4) < alignment of "Element_Type" (8)
Index: gcc/ada/xsinfo.adb =================================================================== --- gcc/ada/xsinfo.adb (revision 151016) +++ gcc/ada/xsinfo.adb (working copy) @@ -52,7 +52,7 @@ procedure XSinfo is - Done : exception; + -- Done : exception; Err : exception; A : VString := Nul; @@ -88,14 +88,14 @@ M : Match_Result; - procedure Getline; + function Getline return Boolean; -- Get non-comment, non-blank line. Also skips "for " rep clauses ------------- -- Getline -- ------------- - procedure Getline is + function Getline return Boolean is begin loop Line := Get_Line (InS); @@ -104,10 +104,10 @@ and then not Match (Line, Wsp_For) and then not Match (Line, Is_Cmnt) then - return; + return False; elsif Match (Line, " -- End functions (note") then - raise Done; + return True; end if; end loop; end Getline; @@ -146,14 +146,14 @@ -- Skip to package line loop - Getline; + if Getline then goto Done; end if; exit when Match (Line, "package"); end loop; -- Skip to first node kind line loop - Getline; + if Getline then goto Done; end if; exit when Match (Line, Typ_Nod); Put_Line (Ofile, Line); end loop; @@ -164,7 +164,7 @@ -- Loop through node kind codes loop - Getline; + if Getline then goto Done; end if; if Match (Line, Get_Nam) then Put_Line (Ofile, A & "#define N_" & Nam & ' ' & NKV); @@ -182,7 +182,7 @@ -- Loop through subtype declarations loop - Getline; + if Getline then goto Done; end if; if not Match (Line, Sub_Typ) then exit when Match (Line, " function"); @@ -190,7 +190,7 @@ else Put_Line (Ofile, A & "SUBTYPE (" & N & ", Node_Kind, "); - Getline; + if Getline then goto Done; end if; -- Normal case @@ -204,7 +204,7 @@ raise Err; end if; - Getline; + if Getline then goto Done; end if; if not Match (Line, Cont_N2) then raise Err; @@ -221,7 +221,7 @@ loop if Match (Line, Is_Func) then - Getline; + if Getline then goto Done; end if; if not Match (Line, Get_Arg) then raise Err; end if; @@ -236,11 +236,10 @@ Put_Line (Ofile, Line); end if; - Getline; + if Getline then goto Done; end if; end loop; -exception - when Done => + <<Done>> Put_Line (Ofile, ""); Set_Exit_Status (0); Index: gcc/ada/system-linux-armel.ads =================================================================== --- gcc/ada/system-linux-armel.ads (revision 0) +++ gcc/ada/system-linux-armel.ads (revision 0) @@ -0,0 +1,155 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- S Y S T E M -- +-- -- +-- S p e c -- +-- (GNU-Linux/ARMEL Version) -- +-- -- +-- Copyright (C) 1992-2007, Free Software Foundation, Inc. -- +-- -- +-- This specification is derived from the Ada Reference Manual for use with -- +-- GNAT. The copyright notice above, and the license provisions that follow -- +-- apply solely to the contents of the part following the private keyword. -- +-- -- +-- 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- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- +-- for more details. You should have received a copy of the GNU General -- +-- Public License distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +package System is + pragma Pure; + -- Note that we take advantage of the implementation permission to make + -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada + -- 2005, this is Pure in any case (AI-362). + + type Name is (SYSTEM_NAME_GNAT); + System_Name : constant Name := SYSTEM_NAME_GNAT; + + -- System-Dependent Named Numbers + + Min_Int : constant := Long_Long_Integer'First; + Max_Int : constant := Long_Long_Integer'Last; + + Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size; + Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1; + + Max_Base_Digits : constant := Long_Long_Float'Digits; + Max_Digits : constant := Long_Long_Float'Digits; + + Max_Mantissa : constant := 63; + Fine_Delta : constant := 2.0 ** (-Max_Mantissa); + + Tick : constant := 0.000_001; + + -- Storage-related Declarations + + type Address is private; + pragma Preelaborable_Initialization (Address); + Null_Address : constant Address; + + Storage_Unit : constant := 8; + Word_Size : constant := 32; + Memory_Size : constant := 2 ** 32; + + -- Address comparison + + function "<" (Left, Right : Address) return Boolean; + function "<=" (Left, Right : Address) return Boolean; + function ">" (Left, Right : Address) return Boolean; + function ">=" (Left, Right : Address) return Boolean; + function "=" (Left, Right : Address) return Boolean; + + pragma Import (Intrinsic, "<"); + pragma Import (Intrinsic, "<="); + pragma Import (Intrinsic, ">"); + pragma Import (Intrinsic, ">="); + pragma Import (Intrinsic, "="); + + -- Other System-Dependent Declarations + + type Bit_Order is (High_Order_First, Low_Order_First); + Default_Bit_Order : constant Bit_Order := Low_Order_First; + pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning + + -- Priority-related Declarations (RM D.1) + + -- 0 .. 98 corresponds to the system priority range 1 .. 99. + -- + -- If the scheduling policy is SCHED_FIFO or SCHED_RR the runtime makes use + -- of the entire range provided by the system. + -- + -- If the scheduling policy is SCHED_OTHER the only valid system priority + -- is 1 and other values are simply ignored. + + Max_Priority : constant Positive := 97; + Max_Interrupt_Priority : constant Positive := 98; + + subtype Any_Priority is Integer range 0 .. 98; + subtype Priority is Any_Priority range 0 .. 97; + subtype Interrupt_Priority is Any_Priority range 98 .. 98; + + Default_Priority : constant Priority := 48; + +private + + type Address is mod Memory_Size; + Null_Address : constant Address := 0; + + -------------------------------------- + -- System Implementation Parameters -- + -------------------------------------- + + -- These parameters provide information about the target that is used + -- by the compiler. They are in the private part of System, where they + -- can be accessed using the special circuitry in the Targparm unit + -- whose source should be consulted for more detailed descriptions + -- of the individual switch values. + + Backend_Divide_Checks : constant Boolean := False; + Backend_Overflow_Checks : constant Boolean := False; + Command_Line_Args : constant Boolean := True; + Configurable_Run_Time : constant Boolean := False; + Denorm : constant Boolean := True; + Duration_32_Bits : constant Boolean := False; + Exit_Status_Supported : constant Boolean := True; + Fractional_Fixed_Ops : constant Boolean := False; + Frontend_Layout : constant Boolean := False; + Machine_Overflows : constant Boolean := False; + Machine_Rounds : constant Boolean := True; + Preallocated_Stacks : constant Boolean := False; + Signed_Zeros : constant Boolean := True; + Stack_Check_Default : constant Boolean := False; + Stack_Check_Probes : constant Boolean := False; + Stack_Check_Limits : constant Boolean := False; + Support_64_Bit_Divides : constant Boolean := True; + Support_Aggregates : constant Boolean := True; + Support_Composite_Assign : constant Boolean := True; + Support_Composite_Compare : constant Boolean := True; + Support_Long_Shifts : constant Boolean := True; + Always_Compatible_Rep : constant Boolean := False; + Suppress_Standard_Library : constant Boolean := False; + Use_Ada_Main_Program_Name : constant Boolean := False; + ZCX_By_Default : constant Boolean := False; + GCC_ZCX_Support : constant Boolean := False; + +end System; Index: gcc/ada/gcc-interface/Makefile.in =================================================================== --- gcc/ada/gcc-interface/Makefile.in (revision 151016) +++ gcc/ada/gcc-interface/Makefile.in (working copy) @@ -1815,6 +1815,42 @@ LIBRARY_VERSION := $(LIB_VERSION) endif +# arm*-*-linux-gnueabi +ifeq ($(strip $(filter-out arm% linux-gnueabi,$(arch) $(osys)-$(word 4,$(targ)))),) + LIBGNAT_TARGET_PAIRS = \ + a-intnam.ads<a-intnam-linux.ads \ + s-inmaop.adb<s-inmaop-posix.adb \ + s-intman.adb<s-intman-posix.adb \ + s-linux.ads<s-linux.ads \ + s-osinte.adb<s-osinte-posix.adb \ + s-osinte.ads<s-osinte-linux.ads \ + s-osprim.adb<s-osprim-posix.adb \ + s-taprop.adb<s-taprop-linux.adb \ + s-tasinf.ads<s-tasinf-linux.ads \ + s-tasinf.adb<s-tasinf-linux.adb \ + s-taspri.ads<s-taspri-posix-noaltstack.ads \ + s-tpopsp.adb<s-tpopsp-posix-foreign.adb + + ifeq ($(strip $(filter-out arm%b,$(arch))),) + LIBGNAT_TARGET_PAIRS += \ + system.ads<system-linux-armeb.ads + else + LIBGNAT_TARGET_PAIRS += \ + system.ads<system-linux-armel.ads + endif + + TOOLS_TARGET_PAIRS = \ + mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ + indepsw.adb<indepsw-gnu.adb + + EXTRA_GNATRTL_TASKING_OBJS=s-linux.o + THREADSLIB = -lpthread + GNATLIB_SHARED = gnatlib-shared-dual + GMEM_LIB = gmemlib + PREFIX_OBJS = $(PREFIX_REAL_OBJS) + LIBRARY_VERSION := $(LIB_VERSION) +endif + ifeq ($(strip $(filter-out sparc% linux%,$(arch) $(osys))),) LIBGNAT_TARGET_PAIRS_COMMON = \ a-intnam.ads<a-intnam-linux.ads \ Index: gcc/ada/gcc-interface/targtyps.c =================================================================== --- gcc/ada/gcc-interface/targtyps.c (revision 151016) +++ gcc/ada/gcc-interface/targtyps.c (working copy) @@ -29,6 +29,7 @@ #include "system.h" #include "coretypes.h" #include "tm.h" +#include "tm_p.h" #include "tree.h" #include "ada.h" Index: gcc/ada/system-linux-armeb.ads =================================================================== --- gcc/ada/system-linux-armeb.ads (revision 0) +++ gcc/ada/system-linux-armeb.ads (revision 0) @@ -0,0 +1,155 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- S Y S T E M -- +-- -- +-- S p e c -- +-- (GNU-Linux/ARMEB Version) -- +-- -- +-- Copyright (C) 1992-2007, Free Software Foundation, Inc. -- +-- -- +-- This specification is derived from the Ada Reference Manual for use with -- +-- GNAT. The copyright notice above, and the license provisions that follow -- +-- apply solely to the contents of the part following the private keyword. -- +-- -- +-- 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- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- +-- for more details. You should have received a copy of the GNU General -- +-- Public License distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +package System is + pragma Pure; + -- Note that we take advantage of the implementation permission to make + -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada + -- 2005, this is Pure in any case (AI-362). + + type Name is (SYSTEM_NAME_GNAT); + System_Name : constant Name := SYSTEM_NAME_GNAT; + + -- System-Dependent Named Numbers + + Min_Int : constant := Long_Long_Integer'First; + Max_Int : constant := Long_Long_Integer'Last; + + Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size; + Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1; + + Max_Base_Digits : constant := Long_Long_Float'Digits; + Max_Digits : constant := Long_Long_Float'Digits; + + Max_Mantissa : constant := 63; + Fine_Delta : constant := 2.0 ** (-Max_Mantissa); + + Tick : constant := 0.000_001; + + -- Storage-related Declarations + + type Address is private; + pragma Preelaborable_Initialization (Address); + Null_Address : constant Address; + + Storage_Unit : constant := 8; + Word_Size : constant := 32; + Memory_Size : constant := 2 ** 32; + + -- Address comparison + + function "<" (Left, Right : Address) return Boolean; + function "<=" (Left, Right : Address) return Boolean; + function ">" (Left, Right : Address) return Boolean; + function ">=" (Left, Right : Address) return Boolean; + function "=" (Left, Right : Address) return Boolean; + + pragma Import (Intrinsic, "<"); + pragma Import (Intrinsic, "<="); + pragma Import (Intrinsic, ">"); + pragma Import (Intrinsic, ">="); + pragma Import (Intrinsic, "="); + + -- Other System-Dependent Declarations + + type Bit_Order is (High_Order_First, Low_Order_First); + Default_Bit_Order : constant Bit_Order := High_Order_First; + pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning + + -- Priority-related Declarations (RM D.1) + + -- 0 .. 98 corresponds to the system priority range 1 .. 99. + -- + -- If the scheduling policy is SCHED_FIFO or SCHED_RR the runtime makes use + -- of the entire range provided by the system. + -- + -- If the scheduling policy is SCHED_OTHER the only valid system priority + -- is 1 and other values are simply ignored. + + Max_Priority : constant Positive := 97; + Max_Interrupt_Priority : constant Positive := 98; + + subtype Any_Priority is Integer range 0 .. 98; + subtype Priority is Any_Priority range 0 .. 97; + subtype Interrupt_Priority is Any_Priority range 98 .. 98; + + Default_Priority : constant Priority := 48; + +private + + type Address is mod Memory_Size; + Null_Address : constant Address := 0; + + -------------------------------------- + -- System Implementation Parameters -- + -------------------------------------- + + -- These parameters provide information about the target that is used + -- by the compiler. They are in the private part of System, where they + -- can be accessed using the special circuitry in the Targparm unit + -- whose source should be consulted for more detailed descriptions + -- of the individual switch values. + + Backend_Divide_Checks : constant Boolean := False; + Backend_Overflow_Checks : constant Boolean := False; + Command_Line_Args : constant Boolean := True; + Configurable_Run_Time : constant Boolean := False; + Denorm : constant Boolean := True; + Duration_32_Bits : constant Boolean := False; + Exit_Status_Supported : constant Boolean := True; + Fractional_Fixed_Ops : constant Boolean := False; + Frontend_Layout : constant Boolean := False; + Machine_Overflows : constant Boolean := False; + Machine_Rounds : constant Boolean := True; + Preallocated_Stacks : constant Boolean := False; + Signed_Zeros : constant Boolean := True; + Stack_Check_Default : constant Boolean := False; + Stack_Check_Probes : constant Boolean := False; + Stack_Check_Limits : constant Boolean := False; + Support_64_Bit_Divides : constant Boolean := True; + Support_Aggregates : constant Boolean := True; + Support_Composite_Assign : constant Boolean := True; + Support_Composite_Compare : constant Boolean := True; + Support_Long_Shifts : constant Boolean := True; + Always_Compatible_Rep : constant Boolean := False; + Suppress_Standard_Library : constant Boolean := False; + Use_Ada_Main_Program_Name : constant Boolean := False; + ZCX_By_Default : constant Boolean := False; + GCC_ZCX_Support : constant Boolean := False; + +end System;