Subject: [alpine-aports] [PATCH 1/3] main/gcc: add arch specific configure options for MIPS

From: Nils Andreas Svee <[email-masked]>
Date: Thu, 21 Dec 2017 21:11:39 +0100

---
 main/gcc/APKBUILD | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/main/gcc/APKBUILD b/main/gcc/APKBUILD
index 83243c2c28..1bb77b6eed 100644
--- a/main/gcc/APKBUILD
+++ b/main/gcc/APKBUILD
@@ -235,7 +235,10 @@ build() {
 	armv5-*-*-*eabi)	_arch_configure="--with-arch=armv5te --with-tune=arm926ej-s --with-float=soft --with-abi=aapcs-linux";;
 	armv6-*-*-*eabihf)	_arch_configure="--with-arch=armv6zk --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=hard --with-abi=aapcs-linux";;
 	armv7-*-*-*eabihf)	_arch_configure="--with-arch=armv7-a --with-tune=generic-armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-abi=aapcs-linux --with-mode=thumb";;
-	mipsel-*-*-*)		_arch_configure="--with-arch-32=mips2 --with-tune-32=mips32 --with-fp-32=32 --with-mips-plt --with-float=hard --with-abi=32";;
+	mips-*-*-*)		_arch_configure="--with-arch=mips32 --with-mips-plt --with-float=soft --with-abi=32";;
+	mips64-*-*-*)		_arch_configure="--with-arch=mips3 --with-tune=mips64 --with-mips-plt --with-float=soft --with-abi=64";;
+	mips64el-*-*-*)		_arch_configure="--with-arch=mips3 --with-tune=mips64 --with-mips-plt --with-float=soft --with-abi=64";;
+	mipsel-*-*-*)		_arch_configure="--with-arch=mips32 --with-mips-plt --with-float=soft --with-abi=32";;
 	powerpc-*-*-*)		_arch_configure="--enable-secureplt --enable-decimal-float=no";;
 	powerpc64*-*-*-*)	_arch_configure="--with-abi=elfv2 --enable-secureplt --enable-decimal-float=no --enable-targets=powerpcle-linux";;
 	i486-*-*-*)		_arch_configure="--with-arch=i486 --with-tune=generic --enable-cld";;
-- 
2.15.1

---
Unsubscribe:  [email-masked]
Help:         [email-masked]
---

---

From: Nils Andreas Svee <[email-masked]>
Date: Thu, 21 Dec 2017 21:11:40 +0100

---
 main/gcc/APKBUILD              |  6 ++++--
 main/gcc/gcc-pure64-mips.patch | 47 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 2 deletions(-)
 create mode 100644 main/gcc/gcc-pure64-mips.patch

diff --git a/main/gcc/APKBUILD b/main/gcc/APKBUILD
index 1bb77b6eed..5386f595dd 100644
--- a/main/gcc/APKBUILD
+++ b/main/gcc/APKBUILD
@@ -186,7 +186,8 @@ source="ftp://gcc.gnu.org/pub/gcc/releases/gcc-${_pkgbase:-$pkgver}/gcc-${_pkgba
 	320-libffi-gnulinux.patch
 
 	fix-rs6000-pie.patch
-	fix-linux-header-use-in-libgcc.patch	
+	fix-linux-header-use-in-libgcc.patch
+	gcc-pure64-mips.patch
 	"
 
 # we build out-of-tree
@@ -637,4 +638,5 @@ fa44c8158111627aa0e91c43e7cc3aa38642c2041c96532dd4f0932dae4d6f92ea2850b683abcf10
 385bc2fa50204f678964e5148c6170f572701dab920fbec8301f505bda34d182cde0adb7da042fee71719e12fb59f59181897f9b1bb4f4716ff59aad46ca1998  310-build-gcj-s390x.patch
 f4ef08454e28c8732db69115e4998ec153399e8d229dd27f923dbdcf57b68128a65640d026cc7f45b58ba8764ab1eb575d4eb6d6dfc550a87a183f8b94e76181  320-libffi-gnulinux.patch
 01c71cd5881fc07ea3b9b980697e89b3ca0fe98502958ceafc3fca18b2604c844e2f457feab711baf8e03f00a5383b0e38aac7eb954034e306f43d4a37f165ed  fix-rs6000-pie.patch
-34a818d5be67eb1f34e44a80b83c28a9b9c17d37fc9fac639f490d6bb5b53ebe3318140d09c236a17d7c98f5a7792ae3d6cefccda8067a5e942d6305b9d1f87c  fix-linux-header-use-in-libgcc.patch"
+34a818d5be67eb1f34e44a80b83c28a9b9c17d37fc9fac639f490d6bb5b53ebe3318140d09c236a17d7c98f5a7792ae3d6cefccda8067a5e942d6305b9d1f87c  fix-linux-header-use-in-libgcc.patch
+86be3338cc9c33089608bc4c5e3b7918c4e500a345c338f361b18c342119a6ed69af5495d72950de7106d760f003528b46ad14795e805f8a3331e206dcb234e3  gcc-pure64-mips.patch"
diff --git a/main/gcc/gcc-pure64-mips.patch b/main/gcc/gcc-pure64-mips.patch
new file mode 100644
index 0000000000..d78f283810
--- /dev/null
+++ b/main/gcc/gcc-pure64-mips.patch
@@ -0,0 +1,47 @@
+From b8c4e45d052adc247341066f748421743704b481 Mon Sep 17 00:00:00 2001
+From: Nils Andreas Svee <[email-masked]>
+Date: Thu, 21 Dec 2017 03:14:33 +0100
+Subject: [PATCH] Pure 64-bit MIPS
+
+---
+ gcc/config/mips/mips.h    | 8 ++++----
+ gcc/config/mips/t-linux64 | 6 +++---
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
+index 803ab98e7..afd74752f 100644
+--- a/gcc/config/mips/mips.h
++++ b/gcc/config/mips/mips.h
+@@ -3330,11 +3330,11 @@ struct GTY(())  machine_function {
+ /* If we are *not* using multilibs and the default ABI is not ABI_32 we
+    need to change these from /lib and /usr/lib.  */
+ #if MIPS_ABI_DEFAULT == ABI_N32
+-#define STANDARD_STARTFILE_PREFIX_1 "/lib32/"
+-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib32/"
++#define STANDARD_STARTFILE_PREFIX_1 "/lib/"
++#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/"
+ #elif MIPS_ABI_DEFAULT == ABI_64
+-#define STANDARD_STARTFILE_PREFIX_1 "/lib64/"
+-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib64/"
++#define STANDARD_STARTFILE_PREFIX_1 "/lib/"
++#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/"
+ #endif
+ 
+ /* Load store bonding is not supported by micromips and fix_24k.  The
+diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64
+index 16c8adf85..bb46204db 100644
+--- a/gcc/config/mips/t-linux64
++++ b/gcc/config/mips/t-linux64
+@@ -21,6 +21,6 @@ MULTILIB_DIRNAMES = n32 32 64
+ MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
+ MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft)
+ MULTILIB_OSDIRNAMES = \
+-	../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
+-	../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
+-	../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
++        ../lib \
++        ../lib32 \
++        ../lib
+-- 
+2.15.1
+
-- 
2.15.1

---

---

From: Nils Andreas Svee <[email-masked]>
Date: Thu, 21 Dec 2017 21:11:41 +0100

---
 main/gcc/APKBUILD         |   4 +-
 main/gcc/ada-mips64.patch | 224 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 227 insertions(+), 1 deletion(-)
 create mode 100644 main/gcc/ada-mips64.patch

diff --git a/main/gcc/APKBUILD b/main/gcc/APKBUILD
index 5386f595dd..68776c0564 100644
--- a/main/gcc/APKBUILD
+++ b/main/gcc/APKBUILD
@@ -188,6 +188,7 @@ source="ftp://gcc.gnu.org/pub/gcc/releases/gcc-${_pkgbase:-$pkgver}/gcc-${_pkgba
 	fix-rs6000-pie.patch
 	fix-linux-header-use-in-libgcc.patch
 	gcc-pure64-mips.patch
+	ada-mips64.patch
 	"
 
 # we build out-of-tree
@@ -639,4 +640,5 @@ fa44c8158111627aa0e91c43e7cc3aa38642c2041c96532dd4f0932dae4d6f92ea2850b683abcf10
 f4ef08454e28c8732db69115e4998ec153399e8d229dd27f923dbdcf57b68128a65640d026cc7f45b58ba8764ab1eb575d4eb6d6dfc550a87a183f8b94e76181  320-libffi-gnulinux.patch
 01c71cd5881fc07ea3b9b980697e89b3ca0fe98502958ceafc3fca18b2604c844e2f457feab711baf8e03f00a5383b0e38aac7eb954034e306f43d4a37f165ed  fix-rs6000-pie.patch
 34a818d5be67eb1f34e44a80b83c28a9b9c17d37fc9fac639f490d6bb5b53ebe3318140d09c236a17d7c98f5a7792ae3d6cefccda8067a5e942d6305b9d1f87c  fix-linux-header-use-in-libgcc.patch
-86be3338cc9c33089608bc4c5e3b7918c4e500a345c338f361b18c342119a6ed69af5495d72950de7106d760f003528b46ad14795e805f8a3331e206dcb234e3  gcc-pure64-mips.patch"
+86be3338cc9c33089608bc4c5e3b7918c4e500a345c338f361b18c342119a6ed69af5495d72950de7106d760f003528b46ad14795e805f8a3331e206dcb234e3  gcc-pure64-mips.patch
+f09273975f76f98967ebbc2e9c61d7c720fdc5b220bf90a6eb31a040539422cf76069945f186e0996ba3cc2556031170a073a32fd9d78b5326ad5d250d7a26e8  ada-mips64.patch"
diff --git a/main/gcc/ada-mips64.patch b/main/gcc/ada-mips64.patch
new file mode 100644
index 0000000000..fe944b2949
--- /dev/null
+++ b/main/gcc/ada-mips64.patch
@@ -0,0 +1,224 @@
+From 5bbd6ca3755e2a199de98d2b270d8a6f616aa6a6 Mon Sep 17 00:00:00 2001
+From: Nils Andreas Svee <[email-masked]>
+Date: Thu, 21 Dec 2017 16:46:12 +0100
+Subject: [PATCH] ada-mips64
+
+---
+ gcc/ada/gcc-interface/Makefile.in |  29 ++++++--
+ gcc/ada/system-linux-mips64.ads   | 147 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 171 insertions(+), 5 deletions(-)
+ create mode 100644 gcc/ada/system-linux-mips64.ads
+
+diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in
+index 598b262d9..1844a6962 100644
+--- a/gcc/ada/gcc-interface/Makefile.in
++++ b/gcc/ada/gcc-interface/Makefile.in
+@@ -1854,9 +1854,9 @@ ifeq ($(strip $(filter-out cygwin% mingw32% pe,$(target_os))),)
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
+-# Mips Linux
+-ifeq ($(strip $(filter-out mips linux%,$(target_cpu) $(target_os))),)
+-  LIBGNAT_TARGET_PAIRS = \
++# Mips and Mips64 Linux
++ifeq ($(strip $(filter-out mips mips64 linux%,$(target_cpu) $(target_os))),)
++  LIBGNAT_TARGET_PAIRS_COMMON = \
+   a-intnam.ads<a-intnam-linux.ads \
+   s-inmaop.adb<s-inmaop-posix.adb \
+   s-intman.adb<s-intman-posix.adb \
+@@ -1867,10 +1867,29 @@ ifeq ($(strip $(filter-out mips linux%,$(target_cpu) $(target_os))),)
+   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.ads \
++  s-taspri.ads<s-taspri-posix-noaltstack.ads \
+   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
++  g-sercom.adb<g-sercom-linux.adb
++
++  LIBGNAT_TARGET_PAIRS_32 = \
+   system.ads<system-linux-mips.ads
+ 
++  LIBGNAT_TARGET_PAIRS_64 = \
++  system.ads<system-linux-mips64.ads
++
++  ifeq ($(strip $(filter-out mips64,$(target_cpu))),)
++    LIBGNAT_TARGET_PAIRS = \
++    $(LIBGNAT_TARGET_PAIRS_COMMON) $(LIBGNAT_TARGET_PAIRS_64)
++  else
++    LIBGNAT_TARGET_PAIRS = \
++    $(LIBGNAT_TARGET_PAIRS_COMMON) $(LIBGNAT_TARGET_PAIRS_32)
++  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
+   EH_MECHANISM=-gcc
+   THREADSLIB = -lpthread
+   GNATLIB_SHARED = gnatlib-shared-dual
+@@ -1901,7 +1920,7 @@ ifeq ($(strip $(filter-out mipsel mips64el linux%,$(target_cpu) $(target_os))),)
+   LIBGNAT_TARGET_PAIRS_64 = \
+   system.ads<system-linux-mips64el.ads
+ 
+-  ifneq (,$(or $(filter mips64el%, $(shell $(GCC_FOR_TARGET) $(GNATLIBCFLAGS) -print-multiarch)), $(filter ../lib64, $(shell $(GCC_FOR_TARGET) $(GNATLIBCFLAGS) -print-multi-os-directory))))
++  ifeq ($(strip $(filter-out mips64el,$(target_cpu))),)
+     LIBGNAT_TARGET_PAIRS = \
+     $(LIBGNAT_TARGET_PAIRS_COMMON) $(LIBGNAT_TARGET_PAIRS_64)
+   else
+diff --git a/gcc/ada/system-linux-mips64.ads b/gcc/ada/system-linux-mips64.ads
+new file mode 100644
+index 000000000..054379acd
+--- /dev/null
++++ b/gcc/ada/system-linux-mips64.ads
+@@ -0,0 +1,147 @@
++------------------------------------------------------------------------------
++--                                                                          --
++--                        GNAT RUN-TIME COMPONENTS                          --
++--                                                                          --
++--                               S Y S T E M                                --
++--                                                                          --
++--                                 S p e c                                  --
++--                       (GNU-Linux/MIPS64 Version)                       --
++--                                                                          --
++--          Copyright (C) 1992-2016, 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 3,  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.                                     --
++--                                                                          --
++-- As a special exception under Section 7 of GPL version 3, you are granted --
++-- additional permissions described in the GCC Runtime Library Exception,   --
++-- version 3.1, as published by the Free Software Foundation.               --
++--                                                                          --
++-- You should have received a copy of the GNU General Public License and    --
++-- a copy of the GCC Runtime Library Exception along with this program;     --
++-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
++-- <http://www.gnu.org/licenses/>.                                          --
++--                                                                          --
++-- 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).
++
++   pragma No_Elaboration_Code_All;
++   --  Allow the use of that restriction in units that WITH this unit
++
++   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;
++   pragma Preelaborable_Initialization (Address);
++   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;
++   pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++   --  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.
++
++   Backend_Divide_Checks     : constant Boolean := False;
++   Backend_Overflow_Checks   : constant Boolean := True;
++   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 := True;
++   Stack_Check_Limits        : constant Boolean := False;
++   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;
++   Frontend_Exceptions       : constant Boolean := False;
++   ZCX_By_Default            : constant Boolean := True;
++
++end System;
+-- 
+2.15.1
+
-- 
2.15.1

---

---

From: Natanael Copa <[email-masked]>
Date: Mon, 25 Dec 2017 14:09:39 +0100

Hi!

Thank you for your work on mips!

On Thu, 21 Dec 2017 21:11:41 +0100

>  	fix-linux-header-use-in-libgcc.patch

I looks like this was applied, but the ada-mips64.patch checksum does
not correspond. Can you please verify that the ada-mips64.patch is the
one you intended to submit?

-nc

---

---

From: Nils Andreas Svee <[email-masked]>
Date: Tue, 26 Dec 2017 18:14:00 +0100

That is indeed the correct patch. Looks like I in a weak moment changed the header, without updating the checksum.

Sorry about that.

Best Regards
Nils

---