[packages/rpm/rpm.org] - updated x32 patch

baggins baggins at pld-linux.org
Sun Dec 29 15:11:20 CET 2019


commit 83a0601a28e9551ba71486b5d35bc9b9f4609bd8
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Sun Dec 29 14:57:11 2019 +0100

    - updated x32 patch

 rpm.spec  |   4 +-
 x32.patch | 392 +++++++++++++++++++++++++++-----------------------------------
 2 files changed, 173 insertions(+), 223 deletions(-)
---
diff --git a/rpm.spec b/rpm.spec
index 9710cba..8a61567 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -670,7 +670,7 @@ Dokumentacja API RPM-a oraz przewodniki w formacie HTML generowane ze
 #%patch64 -p1
 %patch81 -p1
 %patch83 -p1
-#%patch84 -p1
+%patch84 -p1
 
 install %{SOURCE2} pld.in
 install %{SOURCE8} scripts/php.prov.in
@@ -1038,7 +1038,7 @@ find %{_rpmlibdir} -name '*-linux' -type l | xargs rm -f
 %{_rpmlibdir}/platform/amd64*
 %{_rpmlibdir}/platform/ia32e*
 %{_rpmlibdir}/platform/x86_64*
-#%{_rpmlibdir}/platform/x32*
+%{_rpmlibdir}/platform/x32*
 %endif
 %ifarch alpha
 %{_rpmlibdir}/platform/alpha*
diff --git a/x32.patch b/x32.patch
index bb34415..ca28535 100644
--- a/x32.patch
+++ b/x32.patch
@@ -1,20 +1,7 @@
---- rpm-5.4.15/configure.ac~	2014-12-20 16:50:32.000000000 +0100
-+++ rpm-5.4.15/configure.ac	2014-12-20 16:54:38.036853187 +0100
-@@ -2200,8 +2200,9 @@
- case "${target_cpu}" in
- *86)		RPMCANONARCH=i386 ;;
- ia32e*)		RPMCANONARCH=ia32e ;;
--amd64*)		RPMCANONARCH=amd64 ;;
--x86_64*)	RPMCANONARCH=x86_64 ;;
-+amd64*)		RPMCANONCOLOR=7; RPMCANONARCH=amd64 ;;
-+x86_64*)	RPMCANONCOLOR=7; RPMCANONARCH=x86_64 ;;
-+x32)		RPMCANONARCH=x32 ;;
- alpha*)		RPMCANONARCH=alpha ;;
- sparc64*)	RPMCANONARCH=sparc64 ;;
- sparc*)		RPMCANONARCH=sparc ;;
---- rpm-5.4.15/build/rpmfc.c.orig	2014-12-20 16:50:32.000000000 +0100
-+++ rpm-5.4.15/build/rpmfc.c	2014-12-20 18:32:11.641808153 +0100
-@@ -581,6 +581,7 @@
+diff -ur rpm-4.15.1.orig/build/rpmfc.c rpm-4.15.1/build/rpmfc.c
+--- rpm-4.15.1.orig/build/rpmfc.c	2019-12-29 14:07:19.877313873 +0100
++++ rpm-4.15.1/build/rpmfc.c	2019-12-29 13:47:23.183804165 +0100
+@@ -595,6 +595,7 @@
  
    { "ELF 32-bit",		RPMFC_ELF32|RPMFC_INCLUDE },
    { "ELF 64-bit",		RPMFC_ELF64|RPMFC_INCLUDE },
@@ -22,22 +9,23 @@
  
    { "troff or preprocessor input",	RPMFC_INCLUDE },
    { "GNU Info",			RPMFC_INCLUDE },
-@@ -685,7 +686,11 @@
+@@ -696,7 +697,11 @@
  	if (strstr(fmstr, fct->token) == NULL)
  	    continue;
  
 -	fcolor |= fct->colors;
 +	// This is a nasty hack, but will have to do for now
 +	if ((fct->colors & RPMFC_ELF32) && (strstr(fmstr, "x86-64") != NULL))
-+	  fcolor |= RPMFC_ELFX32|RPMFC_INCLUDE;
++	    fcolor |= RPMFC_ELFX32|RPMFC_INCLUDE;
 +	else
-+	  fcolor |= fct->colors;
++	    fcolor |= fct->colors;
  	if (fcolor & RPMFC_INCLUDE)
- 	    return fcolor;
+ 	    break;
      }
---- rpm-5.4.15/build/rpmfc.h.orig	2014-12-20 17:51:48.584934979 +0100
-+++ rpm-5.4.15/build/rpmfc.h	2014-12-20 17:56:14.690160030 +0100
-@@ -20,8 +20,9 @@
+diff -ur rpm-4.15.1.orig/build/rpmfc.h rpm-4.15.1/build/rpmfc.h
+--- rpm-4.15.1.orig/build/rpmfc.h	2019-06-26 16:17:31.397985717 +0200
++++ rpm-4.15.1/build/rpmfc.h	2019-12-29 13:45:05.936980833 +0100
+@@ -26,8 +26,9 @@
      RPMFC_BLACK			= 0,
      RPMFC_ELF32			= (1 <<  0),
      RPMFC_ELF64			= (1 <<  1),
@@ -47,200 +35,162 @@
 +#define	RPMFC_ELF	(RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFX32|RPMFC_ELFMIPSN32)
  	/* (1 << 3) leaks into package headers, reserved */
  
-     RPMFC_DESKTOP_FILE		= (1 <<  4),
-diff -ur rpm-5.4.15/lib/rpmds.c rpm-5.4.15.x32/lib/rpmds.c
---- rpm-5.4.15/lib/rpmds.c	2014-12-20 19:35:31.114557975 +0100
-+++ rpm-5.4.15.x32/lib/rpmds.c	2014-12-20 19:34:54.958087185 +0100
-@@ -2922,19 +2922,26 @@
-  * @retval t		soname dependency
-  * @param s		elf string (NULL uses "")
-  * @param isElf64	is this an ELF64 symbol?
-+ * @param isX32		is this an X32 symbol?
-  */
- #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
--static char * sonameDep(/*@returned@*/ char * t, const char * s, int isElf64)
-+static char * sonameDep(/*@returned@*/ char * t, const char * s, int isElf64, int isX32)
- 	/*@modifies t @*/
- {
-     *t = '\0';
- #if !defined(__alpha__) && !defined(__sun)
-     if (isElf64) {
- 	if (s[strlen(s)-1] != ')')
- 	(void) stpcpy( stpcpy(t, s), "()(64bit)");
-     else
- 	    (void) stpcpy( stpcpy(t, s), "(64bit)");
-     }else
-+	if (isX32) {
-+	  if (s[strlen(s)-1] != ')')
-+	    (void) stpcpy( stpcpy(t, s), "()(x32bit)");
-+	  else
-+	    (void) stpcpy( stpcpy(t, s), "(x32bit)");
-+	} else
- #endif
- 	(void) stpcpy(t, s);
-     return t;
-@@ -2967,6 +2975,7 @@
-     char * t;
-     int xx;
-     int isElf64;
-+    int isX32;
-     int isDSO;
-     int gotSONAME = 0;
-     int gotDEBUG = 0;
-@@ -3009,6 +3018,7 @@
- /*@=evalorder@*/
- 
-     isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64;
-+    isX32 = (ehdr->e_ident[EI_CLASS] == ELFCLASS32) && (ehdr->e_machine == EM_X86_64);
-     isDSO = ehdr->e_type == ET_DYN;
- 
-     /*@-uniondef @*/
-@@ -3110,7 +3120,7 @@
- 
- 			    /* Add next provide dependency. */
- 			    ds = rpmdsSingle(RPMTAG_PROVIDES,
--					sonameDep(t, buf, isElf64),
-+					sonameDep(t, buf, isElf64, isX32),
- 					"", RPMSENSE_FIND_PROVIDES);
- 			    xx = add(context, ds);
- 			    (void)rpmdsFree(ds);
-@@ -3163,7 +3173,7 @@
- 
- 			    /* Add next require dependency. */
- 			    ds = rpmdsSingle(RPMTAG_REQUIRENAME,
--					sonameDep(t, buf, isElf64),
-+					sonameDep(t, buf, isElf64, isX32),
- 					"", RPMSENSE_FIND_REQUIRES);
- 			    xx = add(context, ds);
- 			    (void)rpmdsFree(ds);
-@@ -3205,7 +3215,7 @@
- assert(s != NULL);
- 			buf[0] = '\0';
- 			ds = rpmdsSingle(RPMTAG_REQUIRENAME,
--				sonameDep(buf, s, isElf64),
-+				sonameDep(buf, s, isElf64, isX32),
- 				"", RPMSENSE_FIND_REQUIRES);
- 			xx = add(context, ds);
- 			(void)rpmdsFree(ds);
-@@ -3220,7 +3230,7 @@
- 			/* Add next provide dependency. */
- 			buf[0] = '\0';
- 			ds = rpmdsSingle(RPMTAG_PROVIDENAME,
--				sonameDep(buf, s, isElf64),
-+				sonameDep(buf, s, isElf64, isX32),
- 				"", RPMSENSE_FIND_PROVIDES);
- 			xx = add(context, ds);
- 			(void)rpmdsFree(ds);
-@@ -3256,7 +3266,7 @@
- 	/* Add next provide dependency. */
- 	buf[0] = '\0';
- 	ds = rpmdsSingle(RPMTAG_PROVIDENAME,
--		sonameDep(buf, s, isElf64), "", RPMSENSE_FIND_PROVIDES);
-+		sonameDep(buf, s, isElf64, isX32), "", RPMSENSE_FIND_PROVIDES);
- 	xx = add(context, ds);
- 	(void)rpmdsFree(ds);
- 	ds = NULL;
-diff -ur rpm-5.4.15/build/parseSpec.c rpm-5.4.15-fixed/build/parseSpec.c
---- rpm-5.4.15/build/parseSpec.c	2015-04-02 20:52:18.192956656 +0200
-+++ rpm-5.4.15-fixed/build/parseSpec.c	2015-04-02 20:49:57.416291008 +0200
-@@ -707,10 +708,25 @@
- 
-     /* Check for description in each package and add arch and os */
-   {
--    const char *platform = rpmExpand("%{_target_platform}", NULL);
--    const char *platformNoarch = NULL;
-+    const char *platform = NULL;
-     const char *arch = rpmExpand("%{_target_cpu}", NULL);
-     const char *os = rpmExpand("%{_target_os}", NULL);
-+#ifdef RPM_VENDOR_PLD
-+/*
-+ * This is a hack for x32 compatibility, on x32 _target_platform
-+ * does not use _target_cpu, it must use hardcoded x86-64.
-+ * This results in noarch packages using platform x86_64-pld-linux-gnux32
-+ * and being unusable on ix86.
-+ */
-+    const char *platformNoarch = xstrdup("noarch-pld-linux");
-+    if (strcmp(arch,"noarch"))
-+        platform = rpmExpand("%{_target_platform}", NULL);
-+    else
-+        platform = xstrdup("noarch-pld-linux");
-+#else
-+    const char *platformNoarch = NULL;
-+    platform = rpmExpand("%{_target_platform}", NULL);
-+#endif
- 
-     for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
- 	he->tag = RPMTAG_OS;
-diff -ur rpm-5.4.15/autodeps/linux.prov rpm-5.4.15.x32/autodeps/linux.prov
---- rpm-5.4.15/autodeps/linux.prov	2010-03-18 10:54:56.000000000 +0100
-+++ rpm-5.4.15.x32/autodeps/linux.prov	2014-12-20 19:18:57.339941715 +0100
-@@ -16,8 +16,12 @@
- 
- #
- # --- Alpha does not mark 64bit dependencies
-+# --- Only x86_64 has x32bit dependencies
-+markx32=""
- case `uname -m` in
-   alpha*)	mark64="" ;;
-+  x86_64)	markx32="()(x32bit)"
-+  		mark64="()(64bit)" ;;
-   *)		mark64="()(64bit)" ;;
- esac
- 
-@@ -28,6 +32,10 @@
- 
-     lib64=`if file -L $f 2>/dev/null | \
- 	grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
-+    libx32=`if file -L $f 2>/dev/null | \
-+	grep "ELF 32-bit.*x86-64" > /dev/null; \
-+	then echo "$markx32"; fi`
-+    lib64="$lib64$libx32"
-     if [ "$soname" != "" ]; then
- 	if [ ! -L $f ]; then
- 	    echo $soname$lib64
-diff -ur rpm-5.4.15/autodeps/linux.req rpm-5.4.15.x32/autodeps/linux.req
---- rpm-5.4.15/autodeps/linux.req	2010-03-18 10:54:56.000000000 +0100
-+++ rpm-5.4.15.x32/autodeps/linux.req	2014-12-20 19:20:04.622910545 +0100
-@@ -38,8 +38,12 @@
- 
- #
- # --- Alpha does not mark 64bit dependencies
-+# --- Only x86_64 has x32bit dependencies
-+markx32=""
- case `uname -m` in
-   alpha*)	mark64="" ;;
-+  x86_64)	markx32="()(x32bit)"
-+  		mark64="()(64bit)" ;;
-   *)		mark64="()(64bit)" ;;
- esac
- 
-@@ -50,6 +54,9 @@
-     [ -r $f -a -x $f ] || continue
-     lib64=`if file -L $f 2>/dev/null | \
- 	grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
-+    libx32=`if file -L $f 2>/dev/null | \
-+	grep "ELF 32-bit.*x86-64" >/dev/null; then echo "$markx32"; fi`
-+    lib64="$lib64$libx32"
-     ldd $f | awk '/=>/ {
- 	if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) {
- 	    gsub(/'\''"/,"\\&",$1);
-@@ -64,6 +71,9 @@
-     [ -r $f ] || continue
-     lib64=`if file -L $f 2>/dev/null | \
- 	grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
-+    libx32=`if file -L $f 2>/dev/null | \
-+	grep "ELF 32-bit.*x86-64" >/dev/null; then echo "$markx32"; fi`
-+    lib64="$lib64$libx32"
-     ldd $f | awk '/=>/ {
- 	if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) {
- 	    gsub(/'\''"/,"\\&",$1);
-@@ -98,6 +108,9 @@
-     [ -r $f ] || continue
-     lib64=`if file -L $f 2>/dev/null | \
- 	grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
-+    libx32=`if file -L $f 2>/dev/null | \
-+	grep "ELF 32-bit.*x86-64" >/dev/null; then echo "$markx32"; fi`
-+    lib64="$lib64$libx32"
-     $OBJDUMP -p $f | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; }
- 	/^$/ { START=0; }
- 	/^Dynamic Section:$/ { START=1; }
+     RPMFC_WHITE			= (1 << 29),
+diff -ur rpm-4.15.1.orig/configure.ac rpm-4.15.1/configure.ac
+--- rpm-4.15.1.orig/configure.ac	2019-12-29 14:07:19.813977936 +0100
++++ rpm-4.15.1/configure.ac	2019-12-29 14:27:41.381850928 +0100
+@@ -1050,6 +1050,9 @@
+ 	host_os=`echo "${host_os}" | sed 's/-gnueabi$//'`
+ 	host_os_gnu=-gnueabi
+ fi
++if echo "$host_os" | grep '.*-gnux32' > /dev/null ; then
++	host_os=`echo "${host_os}" | sed 's/-gnux32$//'`
++fi
+ if echo "$host_os" | grep '.*-gnu' > /dev/null ; then
+ 	host_os=`echo "${host_os}" | sed 's/-gnu$//'`
+ fi
+diff -ur rpm-4.15.1.orig/include/rpm/rpmfc.h rpm-4.15.1/include/rpm/rpmfc.h
+--- rpm-4.15.1.orig/include/rpm/rpmfc.h	2019-12-29 14:10:54.518828249 +0100
++++ rpm-4.15.1/include/rpm/rpmfc.h	2019-12-29 13:50:08.747881304 +0100
+@@ -26,8 +26,9 @@
+     RPMFC_BLACK			= 0,
+     RPMFC_ELF32			= (1 <<  0),
+     RPMFC_ELF64			= (1 <<  1),
++    RPMFC_ELFX32		= (1 <<  2),
+     RPMFC_ELFMIPSN32		= (1 <<  2),
+-#define	RPMFC_ELF	(RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFMIPSN32)
++#define	RPMFC_ELF	(RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFX32|RPMFC_ELFMIPSN32)
+ 	/* (1 << 3) leaks into package headers, reserved */
+ 
+     RPMFC_WHITE			= (1 << 29),
+diff -ur rpm-4.15.1.orig/installplatform rpm-4.15.1/installplatform
+--- rpm-4.15.1.orig/installplatform	2019-06-26 16:17:31.404985707 +0200
++++ rpm-4.15.1/installplatform	2019-12-29 14:52:09.331085139 +0100
+@@ -21,6 +21,7 @@
+ 
+   ARCH_INSTALL_POST='%{nil}'
+   LIB=lib
++  TARGETCPU="%{_target_cpu}"
+ 
+   # XXX FIXME: incomplete and quite likely wrong too in places,
+   # consult various arch folks for correct names etc.
+@@ -82,7 +83,15 @@
+ 	ISANAME=x86
+ 	ISABITS=64
+ 	CANONARCH=x86_64
++	CANONCOLOR=7
++	;;
++    x32)
++	ISANAME=x86
++	ISABITS=32
++	CANONARCH=x32
+ 	CANONCOLOR=3
++	RPMRC_GNU="${RPMRC_GNU}x32"
++	TARGETCPU="x86_64"
+ 	;;
+     ia64)
+ 	ISANAME=ia
+@@ -190,10 +199,14 @@
+   # skip architectures for which we dont have full config parameters
+   [ -z "$CANONARCH" ] && continue
+ 
+-  if [ "$OS" = "linux" ] && [ "$CANONCOLOR" = 3 ]; then
++  if [ "$OS" = "linux" ] && [ "$CANONARCH" = "x86_64" ]; then
+       LIB=${LIB}64
+   fi
+ 
++  if [ "$OS" = "linux" ] && [ "$CANONARCH" = "x32" ]; then
++      LIB=${LIB}x32
++  fi
++
+   PPD="${DESTDIR}/${platformdir}/${ARCH}-${OS}"
+   [ -d $PPD ] || mkdir -p $PPD
+ 
+@@ -202,6 +215,7 @@
+ 	-e "s, at RPMCANONARCH@,$CANONARCH,g" \
+ 	-e "s, at RPMCANONCOLOR@,$CANONCOLOR," \
+ 	-e "s, at RPMRC_GNU@,$RPMRC_GNU," \
++	-e "s, at TARGETCPU@,$TARGETCPU," \
+ 	-e "s, at LIB@,$LIB," \
+ 	-e "s, at ARCH_INSTALL_POST@,$ARCH_INSTALL_POST," \
+ 	-e '/\${\w*:-/!s,\${,%{_,' \
+diff -ur rpm-4.15.1.orig/platform.in rpm-4.15.1/platform.in
+--- rpm-4.15.1.orig/platform.in	2019-11-13 10:19:29.371710954 +0100
++++ rpm-4.15.1/platform.in	2019-12-29 14:47:30.886959421 +0100
+@@ -8,7 +8,7 @@
+ %_vendor		@RPMCANONVENDOR@
+ %_os			@RPMCANONOS@
+ %_gnu			@RPMRC_GNU@
+-%_target_platform	%{_target_cpu}-%{_vendor}-%{_target_os}
++%_target_platform	@TARGETCPU at -%{_vendor}-%{_target_os}%{?_gnu}
+ %optflags		@RPMRC_OPTFLAGS@
+ 
+ %__isa_name		@ISANAME@
+diff -ur rpm-4.15.1.orig/rpmrc.in rpm-4.15.1/rpmrc.in
+--- rpm-4.15.1.orig/rpmrc.in	2019-11-13 10:19:29.418711227 +0100
++++ rpm-4.15.1/rpmrc.in	2019-12-29 14:51:20.293119352 +0100
+@@ -24,6 +24,7 @@
+ optflags: x86_64 -O2 -g
+ optflags: amd64 -O2 -g
+ optflags: ia32e -O2 -g
++optflags: x32 -O2 -g -mtune=generic -march=x86-64
+ 
+ optflags: alpha -O2 -g -mieee
+ optflags: alphaev5 -O2 -g -mieee -mtune=ev5
+@@ -155,6 +156,8 @@
+ 
+ archcolor: riscv64 2
+ 
++archcolor: x32 4
++
+ #############################################################
+ # Canonical arch names and numbers
+ 
+@@ -170,6 +173,7 @@
+ arch_canon:	amd64:	amd64	1
+ arch_canon:	ia32e:	ia32e	1
+ arch_canon:	em64t:	em64t	1
++arch_canon:	x32: x32	1
+ 
+ arch_canon:	alpha:	alpha	2
+ arch_canon:	alphaev5: alphaev5	2
+@@ -379,6 +383,8 @@
+ buildarchtranslate: amd64: x86_64
+ buildarchtranslate: ia32e: x86_64
+ 
++buildarchtranslate: x32: x32
++
+ buildarchtranslate: sh3: sh3
+ buildarchtranslate: sh4: sh4
+ buildarchtranslate: sh4a: sh4
+@@ -490,6 +496,8 @@
+ arch_compat: amd64: x86_64 em64t athlon noarch
+ arch_compat: ia32e: x86_64 em64t athlon noarch
+ 
++arch_compat: x32: x32 noarch
++
+ arch_compat: sh3: noarch
+ arch_compat: sh4: noarch
+ arch_compat: sh4a: sh4
+@@ -628,6 +636,8 @@
+ buildarch_compat: amd64: x86_64
+ buildarch_compat: ia32e: x86_64
+ 
++buildarch_compat: x32: noarch
++
+ buildarch_compat: sh3: noarch
+ buildarch_compat: sh4: noarch
+ buildarch_compat: sh4a: sh4
+diff -ur rpm-4.15.1.orig/tools/elfdeps.c rpm-4.15.1/tools/elfdeps.c
+--- rpm-4.15.1.orig/tools/elfdeps.c	2019-06-26 16:17:31.462985619 +0200
++++ rpm-4.15.1/tools/elfdeps.c	2019-12-29 14:22:05.339471071 +0100
+@@ -94,6 +94,9 @@
+ 	    break;
+ 	}
+     }
++    if ((ehdr->e_ident[EI_CLASS] == ELFCLASS32) && (ehdr->e_machine == EM_X86_64)) {
++	marker = "(x32bit)";
++    }
+     return marker;
+ }
+ 
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/rpm.git/commitdiff/af0cc49988eb254fbdb6283ec2080854be2c9d8b



More information about the pld-cvs-commit mailing list