From 83a0601a28e9551ba71486b5d35bc9b9f4609bd8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Sun, 29 Dec 2019 14:57:11 +0100 Subject: [PATCH 1/1] - 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,@RPMCANONARCH@,$CANONARCH,g" \ + -e "s,@RPMCANONCOLOR@,$CANONCOLOR," \ + -e "s,@RPMRC_GNU@,$RPMRC_GNU," \ ++ -e "s,@TARGETCPU@,$TARGETCPU," \ + -e "s,@LIB@,$LIB," \ + -e "s,@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@-%{_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; + } + -- 2.43.0