[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#308948: gcc-4.0: Please add Ada support for the ppc64 architecture



Package: gcc-4.0
Severity: wishlist
Tags: patch

The attached patch makes Ada work on the ppc64 architecture. 
The patch changes the following:

* debian/patches/ppc64-ada.dpatch
  - Add gcc/ada/system-linux-ppc64.ads, which has been copied from 
    gcc/ada/system-linux-ppc.ads and changed to use 'Word_Size' 64
    instead of 32.
  - gcc/ada/Makefile.in: Use gcc/ada/system-linux-ppc64.ads on powerpc64.

* debian/rules.patch
  - Use ppc64-ada patch on ppc64.

* debian/rules.d/binary-ada.mk
  Place the symlinks libgnat.so, libgnat-4.0.so, libgnarl.so, libgnarl-4.0.so
  in '/usr/lib' instead of '/usr/lib/gcc/powerpc64-linux/4.0.1/adalib'.
  The files libgnat-4.0.so.1 and libgnarl-4.0.so.1, where these symlinks 
  point to, are already in '/usr/lib'.
  Without this change, it would not be possible to just specify '-lgnat' to
  link an Ada program. Instead, an additional ugly architecture-specific and
  gcc-version-specific linker option would have to be specified, e.g.
  '-L/usr/lib/gcc/powerpc64-linux/4.0.1/adalib'.

This patch has been used for quite a while by the ppc64/gcc4 archive on
alioth. The resulting gnat-4.0 compiler compiles itself without problems.
It also compiles almost all Debian Ada source packages when the 
(Build-)Depends are changed to allow building with gnat-4.0 and the 
Architecture lines are changed to 'any'.

Regards
Andreas Jochens

diff -urN ../tmp-orig/gcc-4.0-4.0.0/debian/patches/ppc64-ada.dpatch ./debian/patches/ppc64-ada.dpatch
--- ../tmp-orig/gcc-4.0-4.0.0/debian/patches/ppc64-ada.dpatch	1970-01-01 01:00:00.000000000 +0100
+++ ./debian/patches/ppc64-ada.dpatch	2005-05-08 09:23:23.000000000 +0200
@@ -0,0 +1,259 @@
+#! /bin/sh -e
+
+# DP: Add gcc/ada/system-linux-ppc64.ads and use it in gcc/ada/Makefile.in
+# DP: 
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -urN src.orig/gcc/ada/Makefile.in src/gcc/ada/Makefile.in
+--- src.orig/gcc/ada/Makefile.in	2005-05-02 16:39:32.000000000 +0200
++++ src/gcc/ada/Makefile.in	2005-05-02 16:36:37.000000000 +0200
+@@ -1346,6 +1346,31 @@
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
++ifeq ($(strip $(filter-out powerpc64% linux%,$(arch) $(osys))),)
++  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-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-taspri.ads<s-taspri-linux.ads \
++  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
++  s-parame.adb<s-parame-linux.adb \
++  system.ads<system-linux-ppc64.ads
++
++  TOOLS_TARGET_PAIRS =  \
++    mlib-tgt.adb<mlib-tgt-linux.adb \
++    indepsw.adb<indepsw-linux.adb
++
++  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 = \
+   a-intnam.ads<a-intnam-linux.ads \
+diff -urN src.orig/gcc/ada/system-linux-ppc64.ads src/gcc/ada/system-linux-ppc64.ads
+--- src.orig/gcc/ada/system-linux-ppc64.ads	1970-01-01 01:00:00.000000000 +0100
++++ src/gcc/ada/system-linux-ppc64.ads	2005-05-02 16:33:38.000000000 +0200
+@@ -0,0 +1,151 @@
++------------------------------------------------------------------------------
++--                                                                          --
++--                        GNAT RUN-TIME COMPONENTS                          --
++--                                                                          --
++--                               S Y S T E M                                --
++--                                                                          --
++--                                 S p e c                                  --
++--                          (GNU-Linux/PPC64 Version)                       --
++--                                                                          --
++--          Copyright (C) 1992-2004 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,  59 Temple Place - Suite 330,  Boston, --
++-- MA 02111-1307, 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 (System);
++--  Note that we take advantage of the implementation permission to
++--  make this unit Pure instead of Preelaborable, see RM 13.7(36)
++
++   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 := Integer'Last;
++
++   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;
++   Null_Address : constant Address;
++
++   Storage_Unit : constant := 8;
++   Word_Size    : constant := 64;
++   Memory_Size  : constant := 2 ** 64;
++
++   --  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;
++
++   --  Priority-related Declarations (RM D.1)
++
++   Max_Priority           : constant Positive := 30;
++   Max_Interrupt_Priority : constant Positive := 31;
++
++   subtype Any_Priority       is Integer      range  0 .. 31;
++   subtype Priority           is Any_Priority range  0 .. 30;
++   subtype Interrupt_Priority is Any_Priority range 31 .. 31;
++
++   Default_Priority : constant Priority := 15;
++
++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.
++
++   AAMP                      : constant Boolean := False;
++   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;
++   Functions_Return_By_DSP   : constant Boolean := False;
++   Machine_Overflows         : constant Boolean := False;
++   Machine_Rounds            : constant Boolean := True;
++   OpenVMS                   : constant Boolean := False;
++   Preallocated_Stacks       : constant Boolean := False;
++   Signed_Zeros              : constant Boolean := True;
++   Stack_Check_Default       : constant Boolean := False;
++   Stack_Check_Probes        : 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;
++   Suppress_Standard_Library : constant Boolean := False;
++   Use_Ada_Main_Program_Name : constant Boolean := False;
++   ZCX_By_Default            : constant Boolean := True;
++   GCC_ZCX_Support           : constant Boolean := True;
++   Front_End_ZCX_Support     : constant Boolean := False;
++
++   --  Obsolete entries, to be removed eventually (bootstrap issues!)
++
++   High_Integrity_Mode       : constant Boolean := False;
++   Long_Shifts_Inlined       : constant Boolean := True;
++
++end System;
+diff -urN tmp/gcc/ada/s-auxdec.ads src/gcc/ada/s-auxdec.ads
+--- tmp/gcc/ada/s-auxdec.ads	2004-06-11 12:47:36.000000000 +0200
++++ src/gcc/ada/s-auxdec.ads	2005-05-03 11:34:17.000000000 +0200
+@@ -108,13 +108,13 @@
+    pragma Warnings (Off);
+ 
+    type F_Float is digits 6;
+-   pragma Float_Representation (VAX_Float, F_Float);
++--   pragma Float_Representation (VAX_Float, F_Float);
+ 
+    type D_Float is digits 9;
+-   pragma Float_Representation (Vax_Float, D_Float);
++--   pragma Float_Representation (Vax_Float, D_Float);
+ 
+    type G_Float is digits 15;
+-   pragma Float_Representation (Vax_Float, G_Float);
++--   pragma Float_Representation (Vax_Float, G_Float);
+ 
+    --  Floating point type declarations for IEEE floating point data types
+ 
+--- tmp/gcc/ada/s-vaflop.ads	2003-10-21 15:42:18.000000000 +0200
++++ src/gcc/ada/s-vaflop.ads	2005-05-03 15:24:24.000000000 +0200
+@@ -40,15 +40,15 @@
+    --  Suppress warnings if not on Alpha/VAX
+ 
+    type D is digits 9;
+-   pragma Float_Representation (VAX_Float, D);
++--   pragma Float_Representation (VAX_Float, D);
+    --  D Float type on Vax
+ 
+    type G is digits 15;
+-   pragma Float_Representation (VAX_Float, G);
++--   pragma Float_Representation (VAX_Float, G);
+    --  G Float type on Vax
+ 
+    type F is digits 6;
+-   pragma Float_Representation (VAX_Float, F);
++--   pragma Float_Representation (VAX_Float, F);
+    --  F Float type on Vax
+ 
+    type S is digits 6;
diff -urN ../tmp-orig/gcc-4.0-4.0.0/debian/rules.patch ./debian/rules.patch
--- ../tmp-orig/gcc-4.0-4.0.0/debian/rules.patch	2005-05-07 10:00:50.000000000 +0200
+++ ./debian/rules.patch	2005-05-07 10:17:38.000000000 +0200
@@ -69,7 +69,7 @@
   debian_patches += amd64-biarch # amd64-multilib
 endif
 ifeq ($(DEB_TARGET_ARCH),ppc64)
-  debian_patches += ppc64-biarch
+  debian_patches += ppc64-biarch ppc64-ada
 endif
 
 ifeq ($(DEB_TARGET_GNU_CPU),alpha)
diff -urN ../tmp-orig/gcc-4.0-4.0.0/debian/rules.d/binary-ada.mk ./debian/rules.d/binary-ada.mk
--- ../tmp-orig/gcc-4.0-4.0.0/debian/rules.d/binary-ada.mk	2005-05-07 10:00:47.000000000 +0200
+++ ./debian/rules.d/binary-ada.mk	2005-05-07 10:17:37.000000000 +0200
@@ -106,8 +106,8 @@
 	for lib in lib{gnat,gnarl}; do \
 	  vlib=$$lib-$(GNAT_SONAME); \
 	  dh_link -p$(p_gnat) \
-	    /$(PF)/$(libdir)/$$vlib.so.1 /$(gcc_lib_dir)/adalib/$$vlib.so \
-	    /$(PF)/$(libdir)/$$vlib.so.1 /$(gcc_lib_dir)/adalib/$$lib.so; \
+	    /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$vlib.so \
+	    /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$lib.so; \
 	done
 endif
 	debian/dh_doclink -p$(p_gnat) $(p_base)




Reply to: