]> git.pld-linux.org Git - packages/rpm.git/commitdiff
- updated x32 patch
authorJan Rękorajski <baggins@pld-linux.org>
Sun, 29 Dec 2019 13:57:11 +0000 (14:57 +0100)
committerJan Rękorajski <baggins@pld-linux.org>
Sun, 29 Dec 2019 13:57:11 +0000 (14:57 +0100)
rpm.spec
x32.patch

index 9710cba5560351952d5e1f0846d2b64915189824..8a61567350afc8eee46013a0981ad395591ac336 100644 (file)
--- 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*
index bb34415f4bfd759b8592a2b49f62244bcf41febe..ca28535a56ddd771a970c94fb822eaa681f10713 100644 (file)
--- 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 },
  
    { "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),
 +#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;
+ }
This page took 0.104385 seconds and 4 git commands to generate.