Your message dated Sun, 01 Dec 2024 17:54:38 -0600
with message-id <2698028.OBFZWjSADL@riemann>
and subject line Re: gmp: please add support for arm64ilp32
has caused the Debian Bug report #869691,
regarding gmp: please add support for arm64ilp32
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)
--
869691: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=869691
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Source: gmp
Version: 6.1.2+dfsg-1
Severity: wishlist
Tags: upstream patch
Attached is a patched providing very basic initial suport for
arm64ilp32, using the generic C support. To some degreee it is a
placeholder until a less hacky patch is developed, although it does
work and builds the packages.
ILP32 is a new ABI for arm64(aarch64) exactly equivalent to x32 on x86
(32-bit ints, longs and pointers in the ABI, but a 64-bit instruction set).
https://wiki.linaro.org/Platform/arm64-ilp32
The patching of configure.ac is crude and almost certainly wrong, as
I'm really not sure exacltly how it all fits together, but I hope it
makes fairly clear the sort of thing that is needed. It might actually
make sense to restructure the arm/arm64 support a little as it
currently seems to list a lot of possibilities then exclude some of
them.
aarch64 can support ILP32, and it should use the arm64 dirs, but I
couldn't get that to work. Because the ABI is 32-bit, the
epilogues/prologues of this code probably need munging to deal with
32-bit paramaters. That is a little bit beyond my area of expertise,
so I stuck with the generic code for now, especially as a compiler
person tells me it's quite likely to be faster anyway.
The triplet is aarch64-linux-gnu_ilp32 (much like x32), which should
default to that ABI (which is the active bit of code in the current
patch, and should work without the -mabi=ilp32 option - that is only
needed on a native arm64 system (aarch64-linux-gnu) aka 'LP64' ABI,
building for the non-default ILP32 ABI.
I'd be very happy to work with someone who understands the details to
make a proper non-hacky patch for this. Perhaps I should just talk to
upstream?
A dh_autoreconf is needed to get the configure.ac changes into the
configure that gets run. This gives some warnings, so some more work
there might be a good idea, although it seems to work OK. I just
realised that this patch doesn't include a build-dep for that
(dh-autoreconf). That needs fixing.
There are also a set of symbols changes for libgmp10. Most match with
the arm64 exceptions, but 3 are extra. I'm not sure if this is due to
using 'generic' rather than 'arm64' functions?
So apologies for this being a bit rough, but I thought it best to file
before I forgot what I did.
-- System Information:
Debian Release: 8.9
APT prefers oldstable-updates
APT policy: (500, 'oldstable-updates'), (500, 'oldstable')
Architecture: amd64 (x86_64)
Kernel: Linux 3.16.0-4-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
diff -Nru gmp-6.1.2+dfsg/debian/libgmp10.symbols gmp-6.1.2+dfsg/debian/libgmp10.symbols
--- gmp-6.1.2+dfsg/debian/libgmp10.symbols 2017-07-25 14:59:42.000000000 +0100
+++ gmp-6.1.2+dfsg/debian/libgmp10.symbols 2016-12-21 05:39:47.000000000 +0000
@@ -215,7 +215,7 @@
(arch=any-i386)__gmpn_add_n_pentium@Base 2:5.1.1
__gmpn_add_n_sub_n@Base 2:5.1.1
(arch=any-i386)__gmpn_add_n_x86@Base 2:5.1.1
- (arch=!hppa !nios2 !mips !mipsel !tilegx !m68k !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_add_nc@Base 0
+ (arch=!arm64ilp32 !hppa !nios2 !mips !mipsel !tilegx !m68k !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_add_nc@Base 0
(arch=any-i386)__gmpn_add_nc_atom@Base 2:5.1.1
(arch=any-i386)__gmpn_add_nc_k6@Base 2:5.1.1
(arch=any-i386)__gmpn_add_nc_k7@Base 2:5.1.1
@@ -224,9 +224,9 @@
(arch=any-i386)__gmpn_add_nc_pentium@Base 2:5.1.1
(arch=any-i386)__gmpn_add_nc_x86@Base 2:5.1.1
(arch=any-amd64)__gmpn_addaddmul_1msb0@Base 0
- (arch=!arm64 !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !sparc !sparc64 !sh4)__gmpn_addlsh1_n@Base 0
+ (arch=!arm64 !arm64ilp32 !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !sparc !sparc64 !sh4)__gmpn_addlsh1_n@Base 0
(arch=any-i386)__gmpn_addlsh1_n_init@Base 2:5.1.1
- (arch=!arm64 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !s390x !sh4 !sparc !sparc64)__gmpn_addlsh2_n@Base 0
+ (arch=!arm64 !arm64ilp32 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !s390x !sh4 !sparc !sparc64)__gmpn_addlsh2_n@Base 0
(arch=any-i386)__gmpn_addlsh2_n_init@Base 2:5.1.1
(arch=any-amd64)__gmpn_addlsh_n@Base 0
__gmpn_addmul_1@Base 0
@@ -394,7 +394,7 @@
__gmpn_hgcd_reduce_itch@Base 2:5.1.1
__gmpn_hgcd_step@Base 2:5.1.1
__gmpn_invert@Base 0
- (arch=!hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !sparc !sparc64 !sh4 !any-i386)__gmpn_invert_limb@Base 0
+ (arch=!arm64ilp32 !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !sparc !sparc64 !sh4 !any-i386)__gmpn_invert_limb@Base 0
__gmpn_invertappr@Base 0
__gmpn_ior_n@Base 0
__gmpn_iorn_n@Base 0
@@ -507,7 +507,7 @@
(arch=any-i386)__gmpn_mul_1_pentium@Base 2:5.1.1
(arch=any-i386)__gmpn_mul_1_pentium_mmx@Base 2:5.1.1
(arch=any-i386)__gmpn_mul_1_x86@Base 2:5.1.1
- (arch=!arm64 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_mul_1c@Base 0
+ (arch=!arm64 !arm64ilp32 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_mul_1c@Base 0
(arch=any-i386)__gmpn_mul_1c_atom_sse2@Base 2:5.1.1
(arch=any-i386)__gmpn_mul_1c_k6@Base 2:5.1.1
(arch=any-i386)__gmpn_mul_1c_k7@Base 2:5.1.1
@@ -571,13 +571,13 @@
__gmpn_redc_n@Base 0
__gmpn_remove@Base 0
__gmpn_rootrem@Base 0
- (arch=!alpha !arm64 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !sh4 !sparc !sparc64 !any-i386)__gmpn_rsblsh1_n@Base 0
- (arch=!alpha !arm64 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsblsh2_n@Base 0
- (arch=!alpha !arm64 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !ppc64 !ppc64el !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsblsh_n@Base 0
- (arch=!alpha !arm64 !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsh1add_n@Base 0
- (arch=!alpha !arm64 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !ppc64 !ppc64el !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsh1add_nc@Base 0
- (arch=!alpha !arm64 !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsh1sub_n@Base 0
- (arch=!alpha !arm64 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !ppc64 !ppc64el !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsh1sub_nc@Base 0
+ (arch=!alpha !arm64 !arm64ilp32 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !sh4 !sparc !sparc64 !any-i386)__gmpn_rsblsh1_n@Base 0
+ (arch=!alpha !arm64 !arm64ilp32 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsblsh2_n@Base 0
+ (arch=!alpha !arm64 !arm64ilp32 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !ppc64 !ppc64el !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsblsh_n@Base 0
+ (arch=!alpha !arm64 !arm64ilp32 !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsh1add_n@Base 0
+ (arch=!alpha !arm64 !arm64ilp32 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !ppc64 !ppc64el !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsh1add_nc@Base 0
+ (arch=!alpha !arm64 !arm64ilp32 !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsh1sub_n@Base 0
+ (arch=!alpha !arm64 !arm64ilp32 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !powerpc !powerpcspe !ppc64 !ppc64el !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_rsh1sub_nc@Base 0
__gmpn_rshift@Base 0
(arch=any-i386)__gmpn_rshift_atom@Base 2:5.1.1
(arch=any-i386)__gmpn_rshift_init@Base 2:5.1.1
@@ -629,7 +629,7 @@
(arch=any-i386)__gmpn_sqr_basecase_pentium4_sse2@Base 2:5.1.1
(arch=any-i386)__gmpn_sqr_basecase_pentium@Base 2:5.1.1
(arch=any-i386)__gmpn_sqr_basecase_x86@Base 2:5.1.1
- (arch=!arm64 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !ppc64 !ppc64el !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_sqr_diag_addlsh1@Base 2:6.0.0
+ (arch=!arm64 !arm64ilp32 !armel !armhf !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !ppc64 !ppc64el !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_sqr_diag_addlsh1@Base 2:6.0.0
__gmpn_sqrlo@Base 2:6.1.0
__gmpn_sqrlo_basecase@Base 2:6.1.0
__gmpn_sqrmod_bnm1@Base 0
@@ -649,7 +649,7 @@
(arch=any-i386)__gmpn_sub_n_pentium4_sse2@Base 2:5.1.1
(arch=any-i386)__gmpn_sub_n_pentium@Base 2:5.1.1
(arch=any-i386)__gmpn_sub_n_x86@Base 2:5.1.1
- (arch=!hppa !nios2 !mips !mipsel !tilegx !m68k !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_sub_nc@Base 0
+ (arch=!arm64ilp32 !hppa !nios2 !mips !mipsel !tilegx !m68k !s390x !sh4 !sparc !sparc64 !any-i386)__gmpn_sub_nc@Base 0
(arch=any-i386)__gmpn_sub_nc_atom@Base 2:5.1.1
(arch=any-i386)__gmpn_sub_nc_k6@Base 2:5.1.1
(arch=any-i386)__gmpn_sub_nc_k7@Base 2:5.1.1
@@ -657,7 +657,7 @@
(arch=any-i386)__gmpn_sub_nc_pentium4_sse2@Base 2:5.1.1
(arch=any-i386)__gmpn_sub_nc_pentium@Base 2:5.1.1
(arch=any-i386)__gmpn_sub_nc_x86@Base 2:5.1.1
- (arch=!arm64 !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !sh4 !sparc !sparc64)__gmpn_sublsh1_n@Base 0
+ (arch=!arm64 !arm64ilp32 !hppa !nios2 !mips !mipsel !mips64 !mips64el !tilegx !m68k !sh4 !sparc !sparc64)__gmpn_sublsh1_n@Base 0
(arch=any-i386)__gmpn_sublsh1_n_init@Base 2:5.1.1
(arch=alpha ppc64 ppc64el)__gmpn_sublsh2_n@Base 2:5.1.1
__gmpn_submul_1@Base 0
diff -Nru gmp-6.1.2+dfsg/debian/patches/add-arm64ilp32-generic-support.patch gmp-6.1.2+dfsg/debian/patches/add-arm64ilp32-generic-support.patch
--- gmp-6.1.2+dfsg/debian/patches/add-arm64ilp32-generic-support.patch 1970-01-01 01:00:00.000000000 +0100
+++ gmp-6.1.2+dfsg/debian/patches/add-arm64ilp32-generic-support.patch 2016-12-21 05:39:47.000000000 +0000
@@ -0,0 +1,57 @@
+Description: Add arm64ilp32 support, using generic C
+ Most of this patch is probably unnecessary. I have not fully tested what
+ the minimum/correct fix needed to make this work is. This does at least
+ make it build, and can be refined by someone with clue. It should also be
+ possible to use the existing arm64 assembly with minor prolog/epilog changes,
+ but that requires deeper understanding of the codebase.
+ .
+Author: Wookey <woo...@debian.org>
+Last-Update: 2017-07-25
+
+--- gmp-6.1.2+dfsg.orig/configure.ac
++++ gmp-6.1.2+dfsg/configure.ac
+@@ -592,16 +592,19 @@ case $host in
+
+
+ arm*-*-* | aarch64*-*-*)
+- abilist="32"
++ abilist="64 ilp32 32"
+ gcc_cflags="$gcc_cflags $fomit_frame_pointer"
+ gcc_cflags_optlist="arch fpmode neon tune"
+ gcc_64_cflags_optlist="arch tune"
++ gcc_ilp32_cflags_optlist="arch tune"
+ gcc_testlist="gcc-arm-umodsi"
+ gcc_64_testlist=""
+ CALLING_CONVENTIONS_OBJS='arm32call.lo arm32check.lo'
+ CALLING_CONVENTIONS_OBJS_64=""
+ cclist_64="gcc cc"
++ cclist_ilp32="gcc cc"
+ any_32_testlist="sizeof-long-4"
++ any_ilp32_testlist="sizeof-long-4"
+ any_64_testlist="sizeof-long-8"
+
+ # This is needed for clang, which is not content with flags like -mfpu=neon
+@@ -737,13 +740,22 @@ case $host in
+ gcc_cflags_tune="-mtune=xgene1"
+ ;;
+ aarch64*)
+- abilist="64 32"
++ abilist="64 ilp32 32"
+ path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm"
++ path_ilp32="generic"
+ path_64="arm64"
+ gcc_cflags_arch="-march=armv8-a"
++ gcc_ilp32_cflags="-mabi=ilp32"
+ gcc_cflags_neon="-mfpu=neon"
+ gcc_cflags_tune=""
+ ;;
++ aarch64*_ilp32)
++ abilist="ilp32"
++ path="generic"
++ gcc_cflags_arch="-march=armv8-a"
++ gcc_cflags="-mabi=ilp32"
++ gcc_cflags_tune=""
++ ;;
+ *)
+ path="arm"
+ gcc_cflags_arch="-march=armv4"
diff -Nru gmp-6.1.2+dfsg/debian/patches/series gmp-6.1.2+dfsg/debian/patches/series
--- gmp-6.1.2+dfsg/debian/patches/series 2017-07-25 14:58:32.000000000 +0100
+++ gmp-6.1.2+dfsg/debian/patches/series 2016-12-21 05:39:47.000000000 +0000
@@ -0,0 +1 @@
+add-arm64ilp32-generic-support.patch
diff -Nru gmp-6.1.2+dfsg/debian/rules gmp-6.1.2+dfsg/debian/rules
--- gmp-6.1.2+dfsg/debian/rules 2017-07-25 15:39:52.000000000 +0100
+++ gmp-6.1.2+dfsg/debian/rules 2016-12-21 05:39:47.000000000 +0000
@@ -62,6 +62,10 @@
confflags += ABI=x32
endif
+ifneq (,$(findstring $(DEB_HOST_ARCH), ilp32))
+ confflags += ABI=ilp32
+endif
+
ifneq (,$(filter $(DEB_HOST_ARCH), mips64 mips64el))
confflags += ABI=64
endif
@@ -91,6 +95,7 @@
configure: configure-stamp
configure-stamp:
mkdir -p build
+ dh_autoreconf
cd build && ../configure $(confflags_ma) \
AR=$(AR) CC="$(CC)" CFLAGS="$(CFLAGS)" \
CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)"
@@ -107,6 +112,7 @@
dh_testdir
dh_testroot
rm -rf build build-stamp
+ dh_autoreconf_clean
dh_clean
install-prep:
--- End Message ---
--- Begin Message ---
On Tue, 25 Jul 2017 18:37:08 +0100 Wookey <woo...@debian.org> wrote:
> Source: gmp
> Version: 6.1.2+dfsg-1
> Severity: wishlist
> Tags: upstream patch
>
> Attached is a patched providing very basic initial suport for
> arm64ilp32, using the generic C support. To some degreee it is a
> placeholder until a less hacky patch is developed, although it does
> work and builds the packages.
>
> ILP32 is a new ABI for arm64(aarch64) exactly equivalent to x32 on x86
> (32-bit ints, longs and pointers in the ABI, but a 64-bit instruction set).
> https://wiki.linaro.org/Platform/arm64-ilp32
>
> The patching of configure.ac is crude and almost certainly wrong, as
> I'm really not sure exacltly how it all fits together, but I hope it
> makes fairly clear the sort of thing that is needed. It might actually
> make sense to restructure the arm/arm64 support a little as it
> currently seems to list a lot of possibilities then exclude some of
> them.
>
> aarch64 can support ILP32, and it should use the arm64 dirs, but I
> couldn't get that to work. Because the ABI is 32-bit, the
> epilogues/prologues of this code probably need munging to deal with
> 32-bit paramaters. That is a little bit beyond my area of expertise,
> so I stuck with the generic code for now, especially as a compiler
> person tells me it's quite likely to be faster anyway.
>
> The triplet is aarch64-linux-gnu_ilp32 (much like x32), which should
> default to that ABI (which is the active bit of code in the current
> patch, and should work without the -mabi=ilp32 option - that is only
> needed on a native arm64 system (aarch64-linux-gnu) aka 'LP64' ABI,
> building for the non-default ILP32 ABI.
>
> I'd be very happy to work with someone who understands the details to
> make a proper non-hacky patch for this. Perhaps I should just talk to
> upstream?
Yes, that would be best. I'm not in a position to offer support and I'm not
sure a Debian-only solution is desirable.
-Steve
signature.asc
Description: This is a digitally signed message part.
--- End Message ---
--
debian-science-maintainers mailing list
debian-science-maintainers@alioth-lists.debian.net
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/debian-science-maintainers