Compare commits
6 Commits
Author | SHA1 | Date |
---|---|---|
|
f33b262d88 | |
|
6bebc4518f | |
|
7e51c238f3 | |
|
69d1f81c9b | |
|
af499afec3 | |
|
3c5d396fc8 |
|
@ -10,33 +10,5 @@
|
|||
/rpm-4.11.1-rc1.tar.bz2
|
||||
/rpm-4.11.1-rc2.tar.bz2
|
||||
/rpm-4.11.1.tar.bz2
|
||||
/rpm-4.11.2-rc1.tar.bz2
|
||||
/rpm-4.11.2-rc2.tar.bz2
|
||||
/rpm-4.11.2.tar.bz2
|
||||
/rpm-4.11.90-git12844.tar.bz2
|
||||
/rpm-4.12.0-beta1.tar.bz2
|
||||
/rpm-4.12.0-rc1.tar.bz2
|
||||
/rpm-4.12.0.tar.bz2
|
||||
/rpm-4.12.0.1.tar.bz2
|
||||
/rpm-4.12.90.tar.bz2
|
||||
/rpm-4.13.0-rc1.tar.bz2
|
||||
/rpm-4.13.0-rc2.tar.bz2
|
||||
/rpm-4.13.0.tar.bz2
|
||||
/rpm-4.13.0.1.tar.bz2
|
||||
/rpm-4.13.90-git14002.tar.bz2
|
||||
/rpm-4.14.0-rc1.tar.bz2
|
||||
/rpm-4.14.0-rc2.tar.bz2
|
||||
/rpm-4.14.0.tar.bz2
|
||||
/rpm-4.14.1.tar.bz2
|
||||
/rpm-4.14.2-rc1.tar.bz2
|
||||
/rpm-4.14.2-rc2.tar.bz2
|
||||
/rpm-4.14.2.tar.bz2
|
||||
/rpm-4.14.2.1.tar.bz2
|
||||
/rpm-4.14.90-git14653.tar.bz2
|
||||
/rpm-4.15.0-beta.tar.bz2
|
||||
/rpm-4.15.0-rc1.tar.bz2
|
||||
/rpm-4.15.0.tar.bz2
|
||||
/rpm-4.15.1.tar.bz2
|
||||
/rpm-4.15.90-git14971.tar.bz2
|
||||
/rpm-4.16.0-beta1.tar.bz2
|
||||
/rpm-4.16.0-beta3.tar.bz2
|
||||
/rpm-4.11.3.tar.bz2
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
From 2426c2a066e44f4d9a342585e76cdbdb0a8a2db1 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Robinson <pbrobinson@gmail.com>
|
||||
Date: Wed, 23 Oct 2019 20:22:19 +0100
|
||||
Subject: [PATCH] Revert "Improve ARM detection"
|
||||
|
||||
This reverts commit 8c3a7b8fa92b49a811fe36b60857b12f5d7db8a8.
|
||||
|
||||
This is the final piece in fixing rhbz 1691430. It's a clean revert
|
||||
so let's do that for F-31 and we can discuss the details later.
|
||||
|
||||
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
lib/rpmrc.c | 37 +++++++++----------------------------
|
||||
1 file changed, 9 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/lib/rpmrc.c b/lib/rpmrc.c
|
||||
index 0806e1b07..cada3f788 100644
|
||||
--- a/lib/rpmrc.c
|
||||
+++ b/lib/rpmrc.c
|
||||
@@ -82,7 +82,6 @@ struct rpmOption {
|
||||
static struct rpmat_s {
|
||||
const char *platform;
|
||||
uint64_t hwcap;
|
||||
- uint64_t hwcap2;
|
||||
} rpmat;
|
||||
|
||||
typedef struct defaultEntry_s {
|
||||
@@ -951,9 +950,6 @@ static int is_geode(void)
|
||||
|
||||
|
||||
#if defined(__linux__)
|
||||
-#ifndef AT_HWCAP2 /* glibc < 2.18 */
|
||||
-#define AT_HWCAP2 26
|
||||
-#endif
|
||||
/**
|
||||
* Populate rpmat structure with auxv values
|
||||
*/
|
||||
@@ -967,7 +963,6 @@ static void read_auxv(void)
|
||||
if (!rpmat.platform)
|
||||
rpmat.platform = "";
|
||||
rpmat.hwcap = getauxval(AT_HWCAP);
|
||||
- rpmat.hwcap2 = getauxval(AT_HWCAP2);
|
||||
#else
|
||||
rpmat.platform = "";
|
||||
int fd = open("/proc/self/auxv", O_RDONLY);
|
||||
@@ -989,9 +984,6 @@ static void read_auxv(void)
|
||||
case AT_HWCAP:
|
||||
rpmat.hwcap = auxv.a_un.a_val;
|
||||
break;
|
||||
- case AT_HWCAP2:
|
||||
- rpmat.hwcap2 = auxv.a_un.a_val;
|
||||
- break;
|
||||
}
|
||||
}
|
||||
close(fd);
|
||||
@@ -1225,27 +1217,16 @@ static void defaultMachine(rpmrcCtx ctx, const char ** arch, const char ** os)
|
||||
# if !defined(HWCAP_ARM_VFPv3)
|
||||
# define HWCAP_ARM_VFPv3 (1 << 13)
|
||||
# endif
|
||||
-# if !defined(HWCAP2_AES)
|
||||
-# define HWCAP2_AES (1 << 0)
|
||||
-# endif
|
||||
- /*
|
||||
- * un.machine is armvXE, where X is version number and E is
|
||||
- * endianness (b or l)
|
||||
- */
|
||||
- if (rstreqn(un.machine, "armv", 4)) {
|
||||
- char endian = un.machine[strlen(un.machine)-1];
|
||||
- char *modifier = un.machine + 5;
|
||||
- /* keep armv7, armv8, armv9, armv10, ... */
|
||||
- while(risdigit(*modifier))
|
||||
- modifier++;
|
||||
- if (rpmat.hwcap & HWCAP_ARM_VFPv3)
|
||||
- *modifier++ = 'h';
|
||||
- if (rpmat.hwcap2 & HWCAP2_AES)
|
||||
- *modifier++ = 'c';
|
||||
+ if (rstreq(un.machine, "armv7l")) {
|
||||
+ if (rpmat.hwcap & HWCAP_ARM_VFPv3) {
|
||||
if (rpmat.hwcap & HWCAP_ARM_NEON)
|
||||
- *modifier++ = 'n';
|
||||
- *modifier++ = endian;
|
||||
- *modifier++ = 0;
|
||||
+ strcpy(un.machine, "armv7hnl");
|
||||
+ else
|
||||
+ strcpy(un.machine, "armv7hl");
|
||||
+ }
|
||||
+ } else if (rstreq(un.machine, "armv6l")) {
|
||||
+ if (rpmat.hwcap & HWCAP_ARM_VFP)
|
||||
+ strcpy(un.machine, "armv6hl");
|
||||
}
|
||||
# endif /* arm*-linux */
|
||||
|
||||
--
|
||||
2.23.0
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
From f2bc669cd0a080792522dd1bb7f50ef7025f16f0 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Wielaard <mark@klomp.org>
|
||||
Date: Sat, 21 Jul 2018 10:13:04 +0200
|
||||
Subject: [PATCH] find-debuginfo.sh: decompress DWARF compressed ELF sections
|
||||
|
||||
debugedit and dwz do not support DWARF compressed ELF sections, let's
|
||||
just decompress those before extracting debuginfo.
|
||||
|
||||
Tested-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
|
||||
---
|
||||
scripts/find-debuginfo.sh | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/scripts/find-debuginfo.sh b/scripts/find-debuginfo.sh
|
||||
index 90a44942d..7b01bc036 100755
|
||||
--- a/scripts/find-debuginfo.sh
|
||||
+++ b/scripts/find-debuginfo.sh
|
||||
@@ -357,6 +357,9 @@ do_file()
|
||||
get_debugfn "$f"
|
||||
[ -f "${debugfn}" ] && return
|
||||
|
||||
+ echo "explicitly decompress any DWARF compressed ELF sections in $f"
|
||||
+ eu-elfcompress -q -p -t none "$f"
|
||||
+
|
||||
echo "extracting debug info from $f"
|
||||
# See also cpio SOURCEFILE copy. Directories must match up.
|
||||
debug_base_name="$RPM_BUILD_DIR"
|
||||
--
|
||||
2.18.0
|
||||
|
34
STAGE2-rpm
34
STAGE2-rpm
|
@ -1,34 +0,0 @@
|
|||
#requires popt
|
||||
#requires nss-softokn
|
||||
#requires nss
|
||||
#requires file
|
||||
#requires libarchive
|
||||
#requires libdb4
|
||||
#requires redhat-rpm-config
|
||||
#requires lua
|
||||
#requires autoconf
|
||||
#requires pkgconfig
|
||||
|
||||
|
||||
(cd $SRC/rpm-*/ && autoreconf -vif)
|
||||
|
||||
mcd $BUILDDIR/rpm
|
||||
|
||||
$SRC/rpm-*/configure $TCONFIGARGS \
|
||||
--build=${TARGET} \
|
||||
--host=${TARGET} \
|
||||
--target=${TARGET} \
|
||||
CPPFLAGS="-I/usr/include/nspr -I/usr/include/nss3 -DPACKAGE -DPACKAGE_VERSION" \
|
||||
--libdir=/usr/lib${SUFFIX} \
|
||||
--with-external-db \
|
||||
--disable-static \
|
||||
--with-lua \
|
||||
--localstatedir=/var
|
||||
|
||||
make $J
|
||||
make $J install
|
||||
|
||||
mkdir -p /etc/rpm
|
||||
mkdir -p /var/lib/rpm
|
||||
|
||||
rpm --initdb
|
|
@ -0,0 +1,4 @@
|
|||
# Make libfoo.so symlinks require the soname-provide of the target library
|
||||
%__libsymlink_requires %{_rpmconfigdir}/elfdeps --provides --soname-only
|
||||
%__libsymlink_magic ^symbolic link to `.*lib.*\.so\..*'$
|
||||
%__libsymlink_exclude_path ^.*[[:digit:]]$
|
|
@ -0,0 +1,101 @@
|
|||
--- rpm-4.10.0/scripts/find-debuginfo.sh 2012-03-20 09:07:25.000000000 +0100
|
||||
+++ rpm-4.10.0/scripts/find-debuginfo.sh.jj 2012-06-19 12:32:33.147503858 +0200
|
||||
@@ -4,6 +4,8 @@
|
||||
#
|
||||
# Usage: find-debuginfo.sh [--strict-build-id] [-g] [-r]
|
||||
# [-o debugfiles.list]
|
||||
+# [--run-dwz] [--dwz-low-mem-die-limit N]
|
||||
+# [--dwz-max-die-limit N]
|
||||
# [[-l filelist]... [-p 'pattern'] -o debuginfo.list]
|
||||
# [builddir]
|
||||
#
|
||||
@@ -20,6 +22,10 @@
|
||||
# The -p argument is an grep -E -style regexp matching the a file name,
|
||||
# and must not use anchors (^ or $).
|
||||
#
|
||||
+# The --run-dwz flag instructs find-debuginfo.sh to run the dwz utility
|
||||
+# if available, and --dwz-low-mem-die-limit and --dwz-max-die-limit
|
||||
+# provide detailed limits. See dwz(1) -l and -L option for details.
|
||||
+#
|
||||
# All file names in switches are relative to builddir (. if not given).
|
||||
#
|
||||
|
||||
@@ -32,6 +38,11 @@ strip_r=false
|
||||
# Barf on missing build IDs.
|
||||
strict=false
|
||||
|
||||
+# DWZ parameters.
|
||||
+run_dwz=false
|
||||
+dwz_low_mem_die_limit=
|
||||
+dwz_max_die_limit=
|
||||
+
|
||||
BUILDDIR=.
|
||||
out=debugfiles.list
|
||||
nout=0
|
||||
@@ -40,6 +51,17 @@ while [ $# -gt 0 ]; do
|
||||
--strict-build-id)
|
||||
strict=true
|
||||
;;
|
||||
+ --run-dwz)
|
||||
+ run_dwz=true
|
||||
+ ;;
|
||||
+ --dwz-low-mem-die-limit)
|
||||
+ dwz_low_mem_die_limit=$2
|
||||
+ shift
|
||||
+ ;;
|
||||
+ --dwz-max-die-limit)
|
||||
+ dwz_max_die_limit=$2
|
||||
+ shift
|
||||
+ ;;
|
||||
-g)
|
||||
strip_g=true
|
||||
;;
|
||||
@@ -266,6 +288,37 @@ while read nlinks inum f; do
|
||||
fi
|
||||
done || exit
|
||||
|
||||
+# Invoke the DWARF Compressor utility.
|
||||
+if $run_dwz && type dwz >/dev/null 2>&1 \
|
||||
+ && [ -d "${RPM_BUILD_ROOT}/usr/lib/debug" ]; then
|
||||
+ dwz_files="`cd "${RPM_BUILD_ROOT}/usr/lib/debug"; find -type f -name \*.debug`"
|
||||
+ if [ -n "${dwz_files}" ]; then
|
||||
+ dwz_multifile_name="${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}-${RPM_PACKAGE_RELEASE}.${RPM_ARCH}"
|
||||
+ dwz_multifile_suffix=
|
||||
+ dwz_multifile_idx=0
|
||||
+ while [ -f "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz/${dwz_multifile_name}${dwz_multifile_suffix}" ]; do
|
||||
+ let ++dwz_multifile_idx
|
||||
+ dwz_multifile_suffix=".${dwz_multifile_idx}"
|
||||
+ done
|
||||
+ dwz_multfile_name="${dwz_multifile_name}${dwz_multifile_suffix}"
|
||||
+ dwz_opts="-h -q -r -m .dwz/${dwz_multifile_name}"
|
||||
+ mkdir -p "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz"
|
||||
+ [ -n "${dwz_low_mem_die_limit}" ] \
|
||||
+ && dwz_opts="${dwz_opts} -l ${dwz_low_mem_die_limit}"
|
||||
+ [ -n "${dwz_max_die_limit}" ] \
|
||||
+ && dwz_opts="${dwz_opts} -L ${dwz_max_die_limit}"
|
||||
+ ( cd "${RPM_BUILD_ROOT}/usr/lib/debug" && dwz $dwz_opts $dwz_files )
|
||||
+ # Remove .dwz directory if empty
|
||||
+ rmdir "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz" 2>/dev/null
|
||||
+ if [ -f "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz/${dwz_multifile_name}" ]; then
|
||||
+ id="`readelf -Wn "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz/${dwz_multifile_name}" \
|
||||
+ 2>/dev/null | sed -n 's/^ Build ID: \([0-9a-f]\+\)/\1/p'`"
|
||||
+ [ -n "$id" ] \
|
||||
+ && make_id_link "$id" "/usr/lib/debug/.dwz/${dwz_multifile_name}" .debug
|
||||
+ fi
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
# For each symlink whose target has a .debug file,
|
||||
# make a .debug symlink to that file.
|
||||
find "$RPM_BUILD_ROOT" ! -path "${debugdir}/*" -type l -print |
|
||||
--- rpm-4.10.0/macros.in 2012-03-20 09:07:25.000000000 +0100
|
||||
+++ rpm-4.10.0/macros.in.jj 2012-06-19 12:32:33.147503858 +0200
|
||||
@@ -176,7 +176,7 @@
|
||||
# the script. See the script for details.
|
||||
#
|
||||
%__debug_install_post \
|
||||
- %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
|
||||
+ %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_dwz_opts} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
|
||||
%{nil}
|
||||
|
||||
# Template for debug information sub-package.
|
|
@ -0,0 +1,98 @@
|
|||
--- rpm-4.10.0/macros.in 2012-06-11 11:16:21.216952339 +0200
|
||||
+++ rpm-4.10.0/macros.in.minidebug 2012-06-11 11:16:23.686912455 +0200
|
||||
@@ -175,7 +175,7 @@
|
||||
# the script. See the script for details.
|
||||
#
|
||||
%__debug_install_post \
|
||||
- %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_dwz_opts} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
|
||||
+ %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_include_minidebuginfo:-m} %{?_find_debuginfo_dwz_opts} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
|
||||
%{nil}
|
||||
|
||||
# Template for debug information sub-package.
|
||||
@@ -418,6 +418,12 @@ package or when debugging this package.\
|
||||
#%_missing_build_ids_terminate_build 1
|
||||
|
||||
#
|
||||
+# Include minimal debug information in build binaries.
|
||||
+# Requires _enable_debug_packages.
|
||||
+#
|
||||
+#%_include_minidebuginfo 1
|
||||
+
|
||||
+#
|
||||
# Use internal dependency generator rather than external helpers?
|
||||
%_use_internal_dependency_generator 1
|
||||
|
||||
--- rpm-4.10.0/scripts/find-debuginfo.sh 2012-06-11 11:16:09.698138273 +0200
|
||||
+++ rpm-4.10.0/scripts/find-debuginfo.sh.minidebug 2012-06-11 11:16:13.399078526 +0200
|
||||
@@ -2,7 +2,7 @@
|
||||
#find-debuginfo.sh - automagically generate debug info and file list
|
||||
#for inclusion in an rpm spec file.
|
||||
#
|
||||
-# Usage: find-debuginfo.sh [--strict-build-id] [-g] [-r]
|
||||
+# Usage: find-debuginfo.sh [--strict-build-id] [-g] [-r] [-m]
|
||||
# [-o debugfiles.list]
|
||||
# [--run-dwz] [--dwz-low-mem-die-limit N]
|
||||
# [--dwz-max-die-limit N]
|
||||
@@ -29,6 +29,9 @@ strip_g=false
|
||||
# with -r arg, pass --reloc-debug-sections to eu-strip.
|
||||
strip_r=false
|
||||
|
||||
+# with -m arg, add minimal debuginfo to binary.
|
||||
+include_minidebug=false
|
||||
+
|
||||
# Barf on missing build IDs.
|
||||
strict=false
|
||||
|
||||
@@ -43,6 +46,9 @@ while [ $# -gt 0 ]; do
|
||||
-g)
|
||||
strip_g=true
|
||||
;;
|
||||
+ -m)
|
||||
+ include_minidebug=true
|
||||
+ ;;
|
||||
-o)
|
||||
if [ -z "${lists[$nout]}" -a -z "${ptns[$nout]}" ]; then
|
||||
out=$2
|
||||
@@ -105,6 +111,32 @@ strip_to_debug()
|
||||
chmod 444 "$1" || exit
|
||||
}
|
||||
|
||||
+add_minidebug()
|
||||
+{
|
||||
+ local debuginfo="$1"
|
||||
+ local binary="$2"
|
||||
+
|
||||
+ local dynsyms=`mktemp`
|
||||
+ local funcsyms=`mktemp`
|
||||
+ local keep_symbols=`mktemp`
|
||||
+ local mini_debuginfo=`mktemp`
|
||||
+
|
||||
+ # Extract the dynamic symbols from the main binary, there is no need to also have these
|
||||
+ # in the normal symbol table
|
||||
+ nm -D "$binary" --format=posix --defined-only | awk '{ print $1 }' | sort > "$dynsyms"
|
||||
+ # Extract all the text (i.e. function) symbols from the debuginfo
|
||||
+ nm "$debuginfo" --format=posix --defined-only | awk '{ if ($2 == "T" || $2 == "t") print $1 }' | sort > "$funcsyms"
|
||||
+ # Keep all the function symbols not already in the dynamic symbol table
|
||||
+ comm -13 "$dynsyms" "$funcsyms" > "$keep_symbols"
|
||||
+ # Copy the full debuginfo, keeping only a minumal set of symbols and removing some unnecessary sections
|
||||
+ objcopy -S --remove-section .gdb_index --remove-section .comment --keep-symbols="$keep_symbols" "$debuginfo" "$mini_debuginfo" &> /dev/null
|
||||
+ #Inject the compressed data into the .gnu_debugdata section of the original binary
|
||||
+ xz "$mini_debuginfo"
|
||||
+ mini_debuginfo="${mini_debuginfo}.xz"
|
||||
+ objcopy --add-section .gnu_debugdata="$mini_debuginfo" "$binary"
|
||||
+ rm -f "$dynsyms" "$funcsyms" "$keep_symbols" "$mini_debuginfo"
|
||||
+}
|
||||
+
|
||||
# Make a relative symlink to $1 called $3$2
|
||||
shopt -s extglob
|
||||
link_relative()
|
||||
@@ -260,6 +292,9 @@ while read nlinks inum f; do
|
||||
chmod u-w "$f"
|
||||
fi
|
||||
|
||||
+ $include_minidebug && add_minidebug "${debugfn}" "$f"
|
||||
+
|
||||
+
|
||||
if [ -n "$id" ]; then
|
||||
make_id_link "$id" "$dn/$(basename $f)"
|
||||
make_id_link "$id" "/usr/lib/debug$dn/$bn" .debug
|
|
@ -0,0 +1,125 @@
|
|||
diff -up rpm-4.10.90.git11978/lib/depends.c.rpmlib-filesystem-check rpm-4.10.90.git11978/lib/depends.c
|
||||
--- rpm-4.10.90.git11978/lib/depends.c.rpmlib-filesystem-check 2012-11-01 09:40:26.000000000 +0200
|
||||
+++ rpm-4.10.90.git11978/lib/depends.c 2012-11-05 10:53:42.294733695 +0200
|
||||
@@ -537,6 +537,109 @@ static int rpmdbProvides(rpmts ts, depCa
|
||||
return rc;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Temporary support for live-conversion of the filesystem hierarchy
|
||||
+ * mailto: kay@redhat.com, harald@redhat.com
|
||||
+ * https://fedoraproject.org/wiki/Features/UsrMove
|
||||
+ *
|
||||
+ * X-CheckUnifiedSystemdir:
|
||||
+ * /bin, /sbin, /lib, /lib64 --> /usr
|
||||
+ *
|
||||
+ * X-CheckUnifiedBindir:
|
||||
+ * /usr/sbin -> /usr/bin
|
||||
+ *
|
||||
+ * X-CheckMultiArchLibdir:
|
||||
+ * /usr/lib64 /usr/lib/<platform tuple> (e.g. x86_64-linux-gnu)
|
||||
+ *
|
||||
+ * This code is not needed for new installations, it can be removed after
|
||||
+ * updates from older systems are no longer supported: Fedora 19 / RHEL 8.
|
||||
+ */
|
||||
+
|
||||
+static int CheckLink(const char *dir, const char *root)
|
||||
+{
|
||||
+ char *d = NULL;
|
||||
+ struct stat sbuf;
|
||||
+ int rc = 0;
|
||||
+
|
||||
+ if (!root)
|
||||
+ root = "/";
|
||||
+
|
||||
+ rasprintf(&d, "%s%s", root, dir);
|
||||
+ if (!d) {
|
||||
+ rc = -1;
|
||||
+ goto exit;
|
||||
+ }
|
||||
+
|
||||
+ /* directory or symlink does not exist, all is fine */
|
||||
+ if (lstat(d, &sbuf) < 0) {
|
||||
+ rc = 1;
|
||||
+ goto exit;
|
||||
+ }
|
||||
+
|
||||
+ /* if it is a symlink, all is fine */
|
||||
+ if (S_ISLNK(sbuf.st_mode))
|
||||
+ rc = 1;
|
||||
+
|
||||
+exit:
|
||||
+ free(d);
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
+static int CheckFilesystemHierarchy(rpmds * dsp, const char *root)
|
||||
+{
|
||||
+ static const char *dirs[] = { "bin", "sbin", "lib", "lib64" };
|
||||
+ int check;
|
||||
+ int i;
|
||||
+ rpmds ds;
|
||||
+ rpmstrPool pool = rpmdsPool(*dsp);
|
||||
+ int rc = 0;
|
||||
+
|
||||
+ for (i = 0; i < sizeof(dirs) / sizeof(dirs[0]); i++) {
|
||||
+ check = CheckLink(dirs[i], root);
|
||||
+ if (check < 0) {
|
||||
+ rc = -1;
|
||||
+ goto exit;
|
||||
+ }
|
||||
+
|
||||
+ if (check == 0)
|
||||
+ goto exit;
|
||||
+ }
|
||||
+ ds = rpmdsSinglePool(pool, RPMTAG_PROVIDENAME,
|
||||
+ "rpmlib(X-CheckUnifiedSystemdir)", "1",
|
||||
+ RPMSENSE_EQUAL);
|
||||
+ rpmdsMerge(dsp, ds);
|
||||
+ rpmdsFree(ds);
|
||||
+
|
||||
+ check = CheckLink("usr/lib64", root);
|
||||
+ if (check < 0) {
|
||||
+ rc = -1;
|
||||
+ goto exit;
|
||||
+ }
|
||||
+ if (check > 0) {
|
||||
+ ds = rpmdsSinglePool(pool, RPMTAG_PROVIDENAME,
|
||||
+ "rpmlib(X-CheckMultiArchLibdir)", "1",
|
||||
+ RPMSENSE_EQUAL);
|
||||
+ rpmdsMerge(dsp, ds);
|
||||
+ rpmdsFree(ds);
|
||||
+ }
|
||||
+
|
||||
+ check = CheckLink("usr/sbin", root);
|
||||
+ if (check < 0) {
|
||||
+ rc = -1;
|
||||
+ goto exit;
|
||||
+ }
|
||||
+ if (check > 0) {
|
||||
+ ds = rpmdsSinglePool(pool, RPMTAG_PROVIDENAME,
|
||||
+ "rpmlib(X-CheckUnifiedBindir)", "1",
|
||||
+ RPMSENSE_EQUAL);
|
||||
+ rpmdsMerge(dsp, ds);
|
||||
+ rpmdsFree(ds);
|
||||
+ }
|
||||
+
|
||||
+exit:
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* Check dep for an unsatisfied dependency.
|
||||
* @param ts transaction set
|
||||
@@ -560,8 +663,10 @@ retry:
|
||||
* Check those dependencies now.
|
||||
*/
|
||||
if (dsflags & RPMSENSE_RPMLIB) {
|
||||
- if (tsmem->rpmlib == NULL)
|
||||
+ if (tsmem->rpmlib == NULL) {
|
||||
rpmdsRpmlibPool(rpmtsPool(ts), &(tsmem->rpmlib), NULL);
|
||||
+ CheckFilesystemHierarchy(&(tsmem->rpmlib), rpmtsRootDir(ts));
|
||||
+ }
|
||||
|
||||
if (tsmem->rpmlib != NULL && rpmdsSearch(tsmem->rpmlib, dep) >= 0) {
|
||||
rpmdsNotify(dep, "(rpmlib provides)", rc);
|
|
@ -0,0 +1,394 @@
|
|||
--- rpm-4.11.1-rc1-orig/Makefile.am 2013-06-07 12:19:21.000000000 +0200
|
||||
+++ rpm-4.11.1-rc1/Makefile.am 2013-06-24 18:34:06.342894002 +0200
|
||||
@@ -162,6 +162,10 @@ rpmlibexec_PROGRAMS += elfdeps
|
||||
elfdeps_SOURCES = tools/elfdeps.c
|
||||
elfdeps_LDADD = rpmio/librpmio.la
|
||||
elfdeps_LDADD += @WITH_LIBELF_LIB@ @WITH_POPT_LIB@
|
||||
+
|
||||
+rpmlibexec_PROGRAMS += sepdebugcrcfix
|
||||
+sepdebugcrcfix_SOURCES = tools/sepdebugcrcfix.c
|
||||
+sepdebugcrcfix_LDADD = @WITH_LIBELF_LIB@
|
||||
endif
|
||||
endif
|
||||
|
||||
--- rpm-4.11.1-rc1-orig/scripts/find-debuginfo.sh 2013-06-24 17:20:55.407538301 +0200
|
||||
+++ rpm-4.11.1-rc1/scripts/find-debuginfo.sh 2013-06-24 18:34:41.270897302 +0200
|
||||
@@ -114,10 +114,12 @@ done
|
||||
LISTFILE="$BUILDDIR/$out"
|
||||
SOURCEFILE="$BUILDDIR/debugsources.list"
|
||||
LINKSFILE="$BUILDDIR/debuglinks.list"
|
||||
+ELFBINSFILE="$BUILDDIR/elfbins.list"
|
||||
|
||||
> "$SOURCEFILE"
|
||||
> "$LISTFILE"
|
||||
> "$LINKSFILE"
|
||||
+> "$ELFBINSFILE"
|
||||
|
||||
debugdir="${RPM_BUILD_ROOT}/usr/lib/debug"
|
||||
|
||||
@@ -316,6 +318,7 @@ while read nlinks inum f; do
|
||||
|
||||
$include_minidebug && add_minidebug "${debugfn}" "$f"
|
||||
|
||||
+ echo "./${f#$RPM_BUILD_ROOT}" >> "$ELFBINSFILE"
|
||||
|
||||
if [ -n "$id" ]; then
|
||||
make_id_link "$id" "$dn/$(basename $f)"
|
||||
@@ -354,6 +357,10 @@ if $run_dwz && type dwz >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
|
||||
+# dwz invalidates .gnu_debuglink CRC32 in the main files.
|
||||
+cat "$ELFBINSFILE" |
|
||||
+(cd "$RPM_BUILD_ROOT"; xargs -d '\n' /usr/lib/rpm/sepdebugcrcfix usr/lib/debug)
|
||||
+
|
||||
# For each symlink whose target has a .debug file,
|
||||
# make a .debug symlink to that file.
|
||||
find "$RPM_BUILD_ROOT" ! -path "${debugdir}/*" -type l -print |
|
||||
--- rpm-4.11.1-rc1-orig/tools/sepdebugcrcfix.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ rpm-4.11.1-rc1/tools/sepdebugcrcfix.c 2013-06-24 18:31:54.927881439 +0200
|
||||
@@ -0,0 +1,344 @@
|
||||
+/* Copyright (C) 2013 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 3 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+/* Version 2013-06-24. */
|
||||
+
|
||||
+#define _GNU_SOURCE
|
||||
+#include <string.h>
|
||||
+#include <fcntl.h>
|
||||
+#include <errno.h>
|
||||
+#include <sys/types.h>
|
||||
+#include <unistd.h>
|
||||
+#include <sys/mman.h>
|
||||
+#include <endian.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <error.h>
|
||||
+#include <libelf.h>
|
||||
+#include <gelf.h>
|
||||
+#include <bfd.h>
|
||||
+
|
||||
+#define _(x) x
|
||||
+#define static_assert(expr) \
|
||||
+ extern int never_defined_just_used_for_checking[(expr) ? 1 : -1]
|
||||
+#ifndef min
|
||||
+# define min(a, b) ((a) < (b) ? (a) : (b))
|
||||
+#endif
|
||||
+
|
||||
+static_assert (sizeof (unsigned long) >= sizeof (uint32_t));
|
||||
+
|
||||
+typedef int bool;
|
||||
+static const bool false = 0, true = 1;
|
||||
+
|
||||
+/* This is bfd_calc_gnu_debuglink_crc32 from bfd/opncls.c. */
|
||||
+static unsigned long
|
||||
+ calc_gnu_debuglink_crc32 (unsigned long crc,
|
||||
+ const unsigned char *buf,
|
||||
+ bfd_size_type len)
|
||||
+{
|
||||
+ static const unsigned long crc32_table[256] =
|
||||
+ {
|
||||
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
|
||||
+ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
|
||||
+ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
|
||||
+ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
|
||||
+ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
|
||||
+ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
|
||||
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
|
||||
+ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
|
||||
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
|
||||
+ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
|
||||
+ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
|
||||
+ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
|
||||
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
|
||||
+ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
|
||||
+ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
|
||||
+ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
|
||||
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
|
||||
+ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
|
||||
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
|
||||
+ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
|
||||
+ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
|
||||
+ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
|
||||
+ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
|
||||
+ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
|
||||
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
|
||||
+ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
|
||||
+ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
|
||||
+ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
|
||||
+ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
|
||||
+ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
|
||||
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
|
||||
+ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
|
||||
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
|
||||
+ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
|
||||
+ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
|
||||
+ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
|
||||
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
|
||||
+ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
|
||||
+ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
|
||||
+ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
|
||||
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
|
||||
+ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
|
||||
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
|
||||
+ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
|
||||
+ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
|
||||
+ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
|
||||
+ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
|
||||
+ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
||||
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
|
||||
+ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
|
||||
+ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
|
||||
+ 0x2d02ef8d
|
||||
+ };
|
||||
+ const unsigned char *end;
|
||||
+
|
||||
+ crc = ~crc & 0xffffffff;
|
||||
+ for (end = buf + len; buf < end; ++ buf)
|
||||
+ crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
|
||||
+ return ~crc & 0xffffffff;
|
||||
+}
|
||||
+
|
||||
+static size_t updated_count, matched_count, failed_count;
|
||||
+
|
||||
+static const char *usr_lib_debug;
|
||||
+
|
||||
+static bool
|
||||
+crc32 (const char *fname, const char *base_fname, uint32_t *crcp)
|
||||
+{
|
||||
+ char *reldir = strdup (base_fname);
|
||||
+ if (reldir == NULL)
|
||||
+ error (1, 0, _("out of memory"));
|
||||
+ char *s = reldir + strlen (reldir);
|
||||
+ while (s > reldir && s[-1] != '/')
|
||||
+ *--s = '\0';
|
||||
+ char *debugname;
|
||||
+ if (asprintf (&debugname, "%s/%s/%s", usr_lib_debug, reldir, fname) <= 0)
|
||||
+ error (1, 0, _("out of memory"));
|
||||
+ free (reldir);
|
||||
+ int fd = open (debugname, O_RDONLY);
|
||||
+ if (fd == -1)
|
||||
+ {
|
||||
+ error (0, errno, _("cannot open \"%s\""), debugname);
|
||||
+ return false;
|
||||
+ }
|
||||
+ off64_t size = lseek64 (fd, 0, SEEK_END);
|
||||
+ if (size == -1)
|
||||
+ {
|
||||
+ error (0, errno, _("cannot get size of \"%s\""), debugname);
|
||||
+ return false;
|
||||
+ }
|
||||
+ off_t offset = 0;
|
||||
+ uint32_t crc = 0;
|
||||
+ void *buf = NULL;
|
||||
+ while (offset < size)
|
||||
+ {
|
||||
+ const size_t maplen = min (0x10000, size - offset);
|
||||
+ void *map = NULL;
|
||||
+ if (buf == NULL)
|
||||
+ {
|
||||
+ map = mmap (NULL, maplen, PROT_READ, MAP_PRIVATE | MAP_POPULATE,
|
||||
+ fd, offset);
|
||||
+ if (map == MAP_FAILED)
|
||||
+ {
|
||||
+ error (0, errno, _("cannot map 0x%llx bytes at offset 0x%llx "
|
||||
+ "of file \"%s\""),
|
||||
+ (unsigned long long) maplen, (unsigned long long) offset,
|
||||
+ debugname);
|
||||
+ map = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ if (map == NULL)
|
||||
+ {
|
||||
+ if (buf == NULL)
|
||||
+ {
|
||||
+ buf = malloc (maplen);
|
||||
+ if (buf == NULL)
|
||||
+ error (1, 0, _("out of memory"));
|
||||
+ }
|
||||
+ ssize_t got = pread (fd, buf, maplen, offset);
|
||||
+ if (got != maplen)
|
||||
+ {
|
||||
+ error (0, errno, _("cannot read 0x%llx bytes at offset 0x%llx "
|
||||
+ "of file \"%s\""),
|
||||
+ (unsigned long long) maplen, (unsigned long long) offset,
|
||||
+ debugname);
|
||||
+ free (buf);
|
||||
+ free (debugname);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+ crc = calc_gnu_debuglink_crc32 (crc, map ?: buf, maplen);
|
||||
+ if (map && munmap (map, maplen) != 0)
|
||||
+ error (1, errno, _("cannot unmap 0x%llx bytes at offset 0x%llx "
|
||||
+ "of file \"%s\""),
|
||||
+ (unsigned long long) maplen, (unsigned long long) offset,
|
||||
+ debugname);
|
||||
+ offset += maplen;
|
||||
+ }
|
||||
+ free (buf);
|
||||
+ if (close (fd) != 0)
|
||||
+ {
|
||||
+ error (0, errno, _("cannot close \"%s\""), debugname);
|
||||
+ free (debugname);
|
||||
+ return false;
|
||||
+ }
|
||||
+ free (debugname);
|
||||
+ *crcp = crc;
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+static bool
|
||||
+process (Elf *elf, int fd, const char *fname)
|
||||
+{
|
||||
+ GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (elf, &ehdr_mem);
|
||||
+ if (ehdr == NULL)
|
||||
+ {
|
||||
+ error (0, 0, _("cannot get ELF header of \"%s\""), fname);
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (ehdr->e_ident[EI_DATA] != ELFDATA2LSB
|
||||
+ && ehdr->e_ident[EI_DATA] != ELFDATA2MSB)
|
||||
+ {
|
||||
+ error (0, 0, _("invalid ELF endianity of \"%s\""), fname);
|
||||
+ return false;
|
||||
+ }
|
||||
+ Elf_Scn *scn = NULL;
|
||||
+ const char scnname[] = ".gnu_debuglink";
|
||||
+ while ((scn = elf_nextscn (elf, scn)) != NULL)
|
||||
+ {
|
||||
+ GElf_Shdr shdr_mem, *shdr = gelf_getshdr (scn, &shdr_mem);
|
||||
+ if (shdr == NULL)
|
||||
+ {
|
||||
+ error (0, 0, _("cannot get section # %zu in \"%s\""),
|
||||
+ elf_ndxscn (scn), fname);
|
||||
+ continue;
|
||||
+ }
|
||||
+ const char *sname = elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name);
|
||||
+ if (sname == NULL)
|
||||
+ {
|
||||
+ error (0, 0, _("cannot get name of section # %zu in \"%s\""),
|
||||
+ elf_ndxscn (scn), fname);
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (strcmp (sname, scnname) != 0)
|
||||
+ continue;
|
||||
+ Elf_Data *data = elf_getdata (scn, NULL);
|
||||
+ if (data == NULL)
|
||||
+ {
|
||||
+ error (0, 0, _("cannot get data of section \"%s\" # %zu in \"%s\""),
|
||||
+ scnname, elf_ndxscn (scn), fname);
|
||||
+ continue;
|
||||
+ }
|
||||
+ if ((data->d_size & 3) != 0)
|
||||
+ {
|
||||
+ error (0, 0, _("invalid size of section \"%s\" # %zu in \"%s\""),
|
||||
+ scnname, elf_ndxscn (scn), fname);
|
||||
+ continue;
|
||||
+ }
|
||||
+ const uint8_t *zerop = memchr (data->d_buf, '\0', data->d_size);
|
||||
+ const uint8_t *crcp = (zerop == NULL
|
||||
+ ? NULL
|
||||
+ : (const uint8_t *) ((uintptr_t) (zerop + 1 + 3)
|
||||
+ & -4));
|
||||
+ if (crcp + 4 != (uint8_t *) data->d_buf + data->d_size)
|
||||
+ {
|
||||
+ error (0, 0, _("invalid format of section \"%s\" # %zu in \"%s\""),
|
||||
+ scnname, elf_ndxscn (scn), fname);
|
||||
+ continue;
|
||||
+ }
|
||||
+ uint32_t had_crc_targetendian = *(const uint32_t *) crcp;
|
||||
+ uint32_t had_crc = (ehdr->e_ident[EI_DATA] == ELFDATA2LSB
|
||||
+ ? le32toh (had_crc_targetendian)
|
||||
+ : be32toh (had_crc_targetendian));
|
||||
+ uint32_t crc;
|
||||
+ if (! crc32 (data->d_buf, fname, &crc))
|
||||
+ return false;
|
||||
+ if (crc == had_crc)
|
||||
+ {
|
||||
+ matched_count++;
|
||||
+ return true;
|
||||
+ }
|
||||
+ updated_count++;
|
||||
+ off64_t seekto = (shdr->sh_offset + data->d_off
|
||||
+ + (crcp - (const uint8_t *) data->d_buf));
|
||||
+ uint32_t crc_targetendian = (ehdr->e_ident[EI_DATA] == ELFDATA2LSB
|
||||
+ ? htole32 (crc) : htobe32 (crc));
|
||||
+ ssize_t wrote = pwrite (fd, &crc_targetendian, sizeof (crc_targetendian),
|
||||
+ seekto);
|
||||
+ if (wrote != sizeof (crc_targetendian))
|
||||
+ {
|
||||
+ error (0, 0, _("cannot write new CRC to 0x%llx "
|
||||
+ "inside section \"%s\" # %zu in \"%s\""),
|
||||
+ (unsigned long long) seekto, scnname, elf_ndxscn (scn), fname);
|
||||
+ return false;
|
||||
+ }
|
||||
+ return true;
|
||||
+ }
|
||||
+ error (0, 0, _("cannot find section \"%s\" in \"%s\""), scnname, fname);
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (int argc, char **argv)
|
||||
+{
|
||||
+ if (argc < 2)
|
||||
+ error (1, 0, _("usr/lib/debug [<relative filenames>...]"));
|
||||
+ usr_lib_debug = argv[1];
|
||||
+ if (elf_version (EV_CURRENT) == EV_NONE)
|
||||
+ error (1, 0, _("error initializing libelf: %s"), elf_errmsg (-1));
|
||||
+ for (int argi = 2; argi < argc; argi++)
|
||||
+ {
|
||||
+ const char *fname = argv[argi];
|
||||
+ int fd = open64 (fname, O_RDWR);
|
||||
+ if (fd == -1)
|
||||
+ {
|
||||
+ error (0, errno, _("cannot open \"%s\""), fname);
|
||||
+ failed_count++;
|
||||
+ continue;
|
||||
+ }
|
||||
+ bool failed = false;
|
||||
+ Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
|
||||
+ if (elf == NULL)
|
||||
+ {
|
||||
+ error (0, 0, _("cannot open \"%s\" as ELF: %s"), fname,
|
||||
+ elf_errmsg (-1));
|
||||
+ failed = true;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (! process (elf, fd, fname))
|
||||
+ failed = true;
|
||||
+ if (elf_end (elf) != 0)
|
||||
+ {
|
||||
+ error (0, 0, _("cannot close \"%s\" as ELF: %s"), fname,
|
||||
+ elf_errmsg (-1));
|
||||
+ failed = true;
|
||||
+ }
|
||||
+ }
|
||||
+ if (close (fd) != 0)
|
||||
+ {
|
||||
+ error (0, errno, _("cannot close \"%s\""), fname);
|
||||
+ failed = true;
|
||||
+ }
|
||||
+ if (failed)
|
||||
+ failed_count++;
|
||||
+ }
|
||||
+ printf ("%s: Updated %zu CRC32s, %zu CRC32s did match.\n", argv[0],
|
||||
+ updated_count, matched_count);
|
||||
+ if (failed_count)
|
||||
+ printf ("%s: Failed for %zu files.\n", argv[0], failed_count);
|
||||
+ return failed_count == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
+}
|
|
@ -0,0 +1,17 @@
|
|||
diff -up rpm-4.11.2/build/parseReqs.c.double-sep-warning rpm-4.11.2/build/parseReqs.c
|
||||
--- rpm-4.11.2/build/parseReqs.c.double-sep-warning 2014-02-18 08:59:32.692891895 +0200
|
||||
+++ rpm-4.11.2/build/parseReqs.c 2014-02-18 09:00:17.572769945 +0200
|
||||
@@ -166,8 +166,11 @@ rpmRC parseRCPOT(rpmSpec spec, Package p
|
||||
if (rpmCharCheck(spec, EVR, ve-v, ".-_+:%{}~")) goto exit;
|
||||
|
||||
/* While ':' and '-' are valid, only one of each is valid. */
|
||||
- if (checkSep(EVR, '-', &emsg) || checkSep(EVR, ':', &emsg))
|
||||
- goto exit;
|
||||
+ if (checkSep(EVR, '-', &emsg) || checkSep(EVR, ':', &emsg)) {
|
||||
+ rpmlog(RPMLOG_WARNING, _("line %d: %s: %s\n"),
|
||||
+ spec->lineNum, emsg, spec->line);
|
||||
+ emsg = _free(emsg);
|
||||
+ }
|
||||
|
||||
re = ve; /* ==> next token after EVR string starts here */
|
||||
} else
|
|
@ -0,0 +1,61 @@
|
|||
diff -up rpm-4.11.3/macros.in.armhfp rpm-4.11.3/macros.in
|
||||
--- rpm-4.11.3/macros.in.armhfp 2014-09-05 16:09:00.595885788 +0300
|
||||
+++ rpm-4.11.3/macros.in 2014-09-05 16:09:00.602885768 +0300
|
||||
@@ -999,7 +999,7 @@ done \
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# arch macro for all supported ARM processors
|
||||
-%arm armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv7l
|
||||
+%arm armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv7l armv7hl armv7hnl
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# arch macro for all supported Sparc processors
|
||||
diff -up rpm-4.11.3/rpmrc.in.armhfp rpm-4.11.3/rpmrc.in
|
||||
--- rpm-4.11.3/rpmrc.in.armhfp 2014-09-05 16:09:00.590885802 +0300
|
||||
+++ rpm-4.11.3/rpmrc.in 2014-09-05 16:09:00.602885768 +0300
|
||||
@@ -68,6 +68,8 @@ optflags: armv5tel -O2 -g -march=armv5te
|
||||
optflags: armv5tejl -O2 -g -march=armv5te
|
||||
optflags: armv6l -O2 -g -march=armv6
|
||||
optflags: armv7l -O2 -g -march=armv7
|
||||
+optflags: armv7hl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16
|
||||
+optflags: armv7hnl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=neon
|
||||
|
||||
optflags: m68k -O2 -g -fomit-frame-pointer
|
||||
|
||||
@@ -185,6 +187,8 @@ arch_canon: armv5tel: armv5tel 12
|
||||
arch_canon: armv5tejl: armv5tejl 12
|
||||
arch_canon: armv6l: armv6l 12
|
||||
arch_canon: armv7l: armv7l 12
|
||||
+arch_canon: armv7hl: armv7hl 12
|
||||
+arch_canon: armv7hnl: armv7hnl 12
|
||||
|
||||
arch_canon: m68kmint: m68kmint 13
|
||||
arch_canon: atarist: m68kmint 13
|
||||
@@ -298,6 +302,8 @@ buildarchtranslate: armv5tel: armv5tel
|
||||
buildarchtranslate: armv5tejl: armv5tejl
|
||||
buildarchtranslate: armv6l: armv6l
|
||||
buildarchtranslate: armv7l: armv7l
|
||||
+buildarchtranslate: armv7hl: armv7hl
|
||||
+buildarchtranslate: armv7hnl: armv7hnl
|
||||
|
||||
buildarchtranslate: m68k: m68k
|
||||
|
||||
@@ -392,6 +398,8 @@ arch_compat: armv5tel: armv4tl
|
||||
arch_compat: armv4tl: armv4l
|
||||
arch_compat: armv4l: armv3l
|
||||
arch_compat: armv3l: noarch
|
||||
+arch_compat: armv7hnl: armv7hl
|
||||
+arch_compat: armv7hl: noarch
|
||||
|
||||
arch_compat: m68k: noarch
|
||||
|
||||
@@ -505,6 +513,9 @@ buildarch_compat: armv4tl: armv4l
|
||||
buildarch_compat: armv4l: armv3l
|
||||
buildarch_compat: armv3l: noarch
|
||||
|
||||
+buildarch_compat: armv7hnl: armv7hl
|
||||
+buildarch_compat: armv7hl: noarch
|
||||
+
|
||||
buildarch_compat: hppa2.0: hppa1.2
|
||||
buildarch_compat: hppa1.2: hppa1.1
|
||||
buildarch_compat: hppa1.1: hppa1.0
|
|
@ -0,0 +1,22 @@
|
|||
--- rpm-4.11.1/lib/fsm.c.orig 2014-11-13 13:38:56.742934031 +0100
|
||||
+++ rpm-4.11.1/lib/fsm.c 2014-11-13 13:42:13.036380024 +0100
|
||||
@@ -726,12 +726,17 @@
|
||||
{
|
||||
FD_t wfd = NULL;
|
||||
const struct stat * st = &fsm->sb;
|
||||
- rpm_loff_t left = st->st_size;
|
||||
+ rpm_loff_t left = rpmfiFSizeIndex(fsmGetFi(fsm), fsm->ix);
|
||||
const unsigned char * fidigest = NULL;
|
||||
pgpHashAlgo digestalgo = 0;
|
||||
int rc = 0;
|
||||
|
||||
- wfd = Fopen(fsm->path, "w.ufdio");
|
||||
+ /* Create the file with 000 permissions. */
|
||||
+ {
|
||||
+ mode_t old_umask = umask(0777);
|
||||
+ wfd = Fopen(fsm->path, "w.ufdio");
|
||||
+ umask(old_umask);
|
||||
+ }
|
||||
if (Ferror(wfd)) {
|
||||
rc = CPIOERR_OPEN_FAILED;
|
||||
goto exit;
|
|
@ -0,0 +1,12 @@
|
|||
--- rpm-4.11.1.orig/lib/cpio.c 2014-11-28 12:21:50.444158675 +0100
|
||||
+++ rpm-4.11.1/lib/cpio.c 2014-11-28 12:22:53.776453253 +0100
|
||||
@@ -296,6 +296,9 @@
|
||||
st->st_rdev = makedev(major, minor);
|
||||
|
||||
GET_NUM_FIELD(hdr.namesize, nameSize);
|
||||
+ if (nameSize <= 0 || nameSize > 4096) {
|
||||
+ return CPIOERR_BAD_HEADER;
|
||||
+ }
|
||||
|
||||
*path = xmalloc(nameSize + 1);
|
||||
read = Fread(*path, nameSize, 1, cpio->fd);
|
|
@ -0,0 +1,27 @@
|
|||
From f6771b6722f0df097f9c61fc1b487f6f0ee402e8 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Festi <ffesti@redhat.com>
|
||||
Date: Tue, 30 Jul 2013 16:35:21 +0200
|
||||
Subject: [PATCH] Do not filter ld64.* and ld64-* provides and requires Fixes
|
||||
#988373
|
||||
|
||||
---
|
||||
tools/elfdeps.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tools/elfdeps.c b/tools/elfdeps.c
|
||||
index 906de10..8679f89 100644
|
||||
--- a/tools/elfdeps.c
|
||||
+++ b/tools/elfdeps.c
|
||||
@@ -52,7 +52,8 @@ static int skipSoname(const char *soname)
|
||||
if (!strstr(soname, ".so"))
|
||||
return 1;
|
||||
|
||||
- if (rstreqn(soname, "ld.", 3) || rstreqn(soname, "ld-", 3))
|
||||
+ if (rstreqn(soname, "ld.", 3) || rstreqn(soname, "ld-", 3) ||
|
||||
+ rstreqn(soname, "ld64.", 3) || rstreqn(soname, "ld64-", 3))
|
||||
return 0;
|
||||
|
||||
if (rstreqn(soname, "lib", 3))
|
||||
--
|
||||
1.7.11.7
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
commit 73bd9636d0e76a4d255776b7733667198b9ef585
|
||||
Author: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Mon Jan 7 15:52:43 2013 +0200
|
||||
|
||||
Filter ELF dependencies by name
|
||||
|
||||
- Instead of vain heuristics on DT_SONAME presence, filter out
|
||||
irregular sonames from all dependencies: linkable library names generally
|
||||
must contain ".so" and start with "lib" for the linker to find it at all,
|
||||
anything else is an exception of one kind or another (the prime exception
|
||||
of ld.so variants we handle here). This weeds out provides for most
|
||||
dlopen()'ed modules etc, and filtering both provides and requires
|
||||
by the same rules means we wont generate requires for things that wont be
|
||||
provided. Of course this also means we can omit things that are in
|
||||
DT_NEEDED, but these should be rare exceptions which the new
|
||||
--no-filter-soname switch is for.
|
||||
|
||||
diff --git a/tools/elfdeps.c b/tools/elfdeps.c
|
||||
index fc9a905..a0db9f7 100644
|
||||
--- a/tools/elfdeps.c
|
||||
+++ b/tools/elfdeps.c
|
||||
@@ -15,6 +15,7 @@
|
||||
int filter_private = 0;
|
||||
int soname_only = 0;
|
||||
int fake_soname = 1;
|
||||
+int filter_soname = 1;
|
||||
|
||||
typedef struct elfInfo_s {
|
||||
Elf *elf;
|
||||
@@ -36,6 +37,31 @@ static int skipPrivate(const char *s)
|
||||
return (filter_private && rstreq(s, "GLIBC_PRIVATE"));
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Rough soname sanity filtering: all sane soname's dependencies need to
|
||||
+ * contain ".so", and normal linkable libraries start with "lib",
|
||||
+ * everything else is an exception of some sort. The most notable
|
||||
+ * and common exception is the dynamic linker itself, which we allow
|
||||
+ * here, the rest can use --no-filter-soname.
|
||||
+ */
|
||||
+static int skipSoname(const char *soname)
|
||||
+{
|
||||
+ if (filter_soname) {
|
||||
+ if (!strstr(soname, ".so"))
|
||||
+ return 1;
|
||||
+
|
||||
+ if (rstreqn(soname, "ld.", 3) || rstreqn(soname, "ld-", 3))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (rstreqn(soname, "lib", 3))
|
||||
+ return 0;
|
||||
+ else
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static const char *mkmarker(GElf_Ehdr *ehdr)
|
||||
{
|
||||
const char *marker = NULL;
|
||||
@@ -58,6 +84,10 @@ static void addDep(ARGV_t *deps,
|
||||
const char *soname, const char *ver, const char *marker)
|
||||
{
|
||||
char *dep = NULL;
|
||||
+
|
||||
+ if (skipSoname(soname))
|
||||
+ return;
|
||||
+
|
||||
if (ver || marker) {
|
||||
rasprintf(&dep,
|
||||
"%s(%s)%s", soname, ver ? ver : "", marker ? marker : "");
|
||||
@@ -293,6 +323,7 @@ int main(int argc, char *argv[])
|
||||
{ "filter-private", 0, POPT_ARG_VAL, &filter_private, -1, NULL, NULL },
|
||||
{ "soname-only", 0, POPT_ARG_VAL, &soname_only, -1, NULL, NULL },
|
||||
{ "no-fake-soname", 0, POPT_ARG_VAL, &fake_soname, 0, NULL, NULL },
|
||||
+ { "no-filter-soname", 0, POPT_ARG_VAL, &filter_soname, 0, NULL, NULL },
|
||||
POPT_AUTOHELP
|
||||
POPT_TABLEEND
|
||||
};
|
|
@ -5,8 +5,8 @@ diff -up rpm-4.11.1-rc1/macros.in.siteconfig rpm-4.11.1-rc1/macros.in
|
|||
export CLASSPATH}\
|
||||
PKG_CONFIG_PATH=\"${PKG_CONFIG_PATH}:%{_libdir}/pkgconfig:%{_datadir}/pkgconfig\"\
|
||||
export PKG_CONFIG_PATH\
|
||||
+ CONFIG_SITE=${CONFIG_SITE:-NONE}\
|
||||
+ CONFIG_SITE=NONE\
|
||||
+ export CONFIG_SITE\
|
||||
\
|
||||
%{verbose:set -x}\
|
||||
%{verbose:set -x}%{!verbose:exec > /dev/null}\
|
||||
umask 022\
|
|
@ -0,0 +1,36 @@
|
|||
From 363c015da5cbf315df267dc53580290984039804 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
Date: Wed, 15 Apr 2015 09:51:08 +0200
|
||||
Subject: [PATCH] Make sure references to go sources in debuginfo packages go
|
||||
to the installed path and not the source file in the build environment.
|
||||
|
||||
- Resolves: rhbz#1184221
|
||||
---
|
||||
tools/debugedit.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tools/debugedit.c b/tools/debugedit.c
|
||||
index 0f85885..cf89312 100644
|
||||
--- a/tools/debugedit.c
|
||||
+++ b/tools/debugedit.c
|
||||
@@ -480,7 +480,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir, int phase)
|
||||
unsigned char *endcu, *endprol;
|
||||
unsigned char opcode_base;
|
||||
uint32_t value, dirt_cnt;
|
||||
- size_t comp_dir_len = strlen (comp_dir);
|
||||
+ size_t comp_dir_len = !comp_dir ? 0 : strlen (comp_dir);
|
||||
size_t abs_file_cnt = 0, abs_dir_cnt = 0;
|
||||
|
||||
if (phase != 0)
|
||||
@@ -950,7 +950,7 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
|
||||
}
|
||||
}
|
||||
|
||||
- if (found_list_offs && comp_dir)
|
||||
+ if (found_list_offs)
|
||||
edit_dwarf2_line (dso, list_offs, comp_dir, phase);
|
||||
|
||||
free (comp_dir);
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
diff --git a/rpm2cpio.c b/rpm2cpio.c
|
||||
index 89ebdfa..ae999ff 100644
|
||||
--- a/rpm2cpio.c
|
||||
+++ b/rpm2cpio.c
|
||||
@@ -84,7 +84,12 @@ int main(int argc, char *argv[])
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
- rc = (ufdCopy(gzdi, fdo) == payload_size) ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
+ /*
|
||||
+ * XXX HACK for #1142949: should be equality test, but archive size
|
||||
+ * short by cpio trailer size in packages built with rpm 4.12.0
|
||||
+ * and its pre-releases.
|
||||
+ */
|
||||
+ rc = (ufdCopy(gzdi, fdo) >= payload_size) ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
|
||||
Fclose(fdo);
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
diff -up rpm-4.9.1.3/lib/rpmrc.c.niagara rpm-4.9.1.3/lib/rpmrc.c
|
||||
--- rpm-4.9.1.3/lib/rpmrc.c.niagara 2012-04-19 17:06:23.130595223 +0200
|
||||
+++ rpm-4.9.1.3/lib/rpmrc.c 2012-04-19 17:06:23.134739249 +0200
|
||||
@@ -718,6 +718,31 @@ exit:
|
||||
return rc;
|
||||
}
|
||||
|
||||
+#if defined(__linux__) && defined(__sparc__)
|
||||
+static int is_sun4v()
|
||||
+{
|
||||
+ char buffer[4096], *p;
|
||||
+ int fd = open("/proc/cpuinfo", O_RDONLY);
|
||||
+ if (read(fd, &buffer, sizeof(buffer) - 1) == -1) {
|
||||
+ rpmlog(RPMLOG_WARNING, _("read(/proc/cpuinfo) failed\n"));
|
||||
+ close(fd);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ close(fd);
|
||||
+
|
||||
+ p = strstr(buffer, "type");
|
||||
+ p = strtok(p, "\n");
|
||||
+ p = strstr(p, "sun");
|
||||
+ if (p == NULL) {
|
||||
+ rpmlog(RPMLOG_WARNING, _("/proc/cpuinfo has no 'type' line\n"));
|
||||
+ return 0;
|
||||
+ } else if (strcmp(p, "sun4v") == 0) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
|
||||
# if defined(__linux__) && defined(__i386__)
|
||||
#include <setjmp.h>
|
||||
@@ -1178,6 +1203,13 @@ static void defaultMachine(const char **
|
||||
personality(oldpers);
|
||||
}
|
||||
}
|
||||
+ if (is_sun4v()){
|
||||
+ if (strcmp(un.machine, "sparcv9") == 0 || strcmp(un.machine, "sparc") == 0 ) {
|
||||
+ strcpy(un.machine, "sparcv9v");
|
||||
+ } else if (strcmp(un.machine, "sparc64") == 0 ) {
|
||||
+ strcpy(un.machine, "sparc64v");
|
||||
+ }
|
||||
+ }
|
||||
# endif /* sparc*-linux */
|
||||
|
||||
# if defined(__linux__) && defined(__powerpc__)
|
||||
diff -up rpm-4.9.1.3/rpmrc.in.niagara rpm-4.9.1.3/rpmrc.in
|
||||
--- rpm-4.9.1.3/rpmrc.in.niagara 2012-04-19 17:06:23.131476769 +0200
|
||||
+++ rpm-4.9.1.3/rpmrc.in 2012-04-19 17:06:23.135738996 +0200
|
||||
@@ -316,7 +316,7 @@ arch_compat: sun4c: sparc
|
||||
arch_compat: sun4d: sparc
|
||||
arch_compat: sun4m: sparc
|
||||
arch_compat: sun4u: sparc64
|
||||
-arch_compat: sparc64v: sparc64
|
||||
+arch_compat: sparc64v: sparc64 sparcv9v
|
||||
arch_compat: sparc64: sparcv9
|
||||
arch_compat: sparcv9v: sparcv9
|
||||
arch_compat: sparcv9: sparcv8
|
|
@ -0,0 +1,12 @@
|
|||
diff -up rpm-4.8.1/macros.in.gpg2 rpm-4.8.1/macros.in
|
||||
--- rpm-4.8.0/macros.in.gpg2 2011-01-17 12:17:38.000000000 +0200
|
||||
+++ rpm-4.8.0/macros.in 2011-01-17 12:17:59.000000000 +0200
|
||||
@@ -40,7 +40,7 @@
|
||||
%__cp @__CP@
|
||||
%__cpio @__CPIO@
|
||||
%__file @__FILE@
|
||||
-%__gpg @__GPG@
|
||||
+%__gpg %{_bindir}/gpg2
|
||||
%__grep @__GREP@
|
||||
%__gzip @__GZIP@
|
||||
%__id @__ID@
|
|
@ -0,0 +1,83 @@
|
|||
diff -up rpm-4.11.1/lib/rpmrc.c.armhfp-logic rpm-4.11.1/lib/rpmrc.c
|
||||
--- rpm-4.11.1/lib/rpmrc.c.armhfp-logic 2013-10-01 14:59:12.841041726 +0300
|
||||
+++ rpm-4.11.1/lib/rpmrc.c 2013-10-01 14:59:12.856041684 +0300
|
||||
@@ -733,6 +733,56 @@ static int is_sun4v()
|
||||
}
|
||||
#endif
|
||||
|
||||
+#if defined(__linux__) && defined(__arm__)
|
||||
+static int has_neon()
|
||||
+{
|
||||
+ char buffer[4096], *p;
|
||||
+ int fd = open("/proc/cpuinfo", O_RDONLY);
|
||||
+ if (read(fd, &buffer, sizeof(buffer) - 1) == -1) {
|
||||
+ rpmlog(RPMLOG_WARNING, _("read(/proc/cpuinfo) failed\n"));
|
||||
+ close(fd);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ close(fd);
|
||||
+
|
||||
+ p = strstr(buffer, "Features");
|
||||
+ p = strtok(p, "\n");
|
||||
+ p = strstr(p, "neon");
|
||||
+ p = strtok(p, " ");
|
||||
+ if (p == NULL) {
|
||||
+ rpmlog(RPMLOG_WARNING, _("/proc/cpuinfo has no 'Features' line\n"));
|
||||
+ return 0;
|
||||
+ } else if (strcmp(p, "neon") == 0) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int has_hfp()
|
||||
+{
|
||||
+ char buffer[4096], *p;
|
||||
+ int fd = open("/proc/cpuinfo", O_RDONLY);
|
||||
+ if (read(fd, &buffer, sizeof(buffer) - 1) == -1) {
|
||||
+ rpmlog(RPMLOG_WARNING, _("read(/proc/cpuinfo) failed\n"));
|
||||
+ close(fd);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ close(fd);
|
||||
+
|
||||
+ p = strstr(buffer, "Features");
|
||||
+ p = strtok(p, "\n");
|
||||
+ p = strstr(p, "vfpv3");
|
||||
+ p = strtok(p, " ");
|
||||
+ if (p == NULL) {
|
||||
+ rpmlog(RPMLOG_WARNING, _("/proc/cpuinfo has no 'Features' line\n"));
|
||||
+ return 0;
|
||||
+ } else if (strcmp(p, "vfpv3") == 0) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
|
||||
# if defined(__linux__) && defined(__i386__)
|
||||
#include <setjmp.h>
|
||||
@@ -1136,6 +1186,22 @@ static void defaultMachine(const char **
|
||||
# endif /* __ORDER_BIG_ENDIAN__ */
|
||||
# endif /* ppc64*-linux */
|
||||
|
||||
+# if defined(__linux__) && defined(__arm__)
|
||||
+ {
|
||||
+ if (strcmp(un.machine, "armv7l") == 0 ) {
|
||||
+ if (has_neon() && has_hfp())
|
||||
+ strcpy(un.machine, "armv7hnl");
|
||||
+ else if (has_hfp())
|
||||
+ strcpy(un.machine, "armv7hl");
|
||||
+ } else if (strcmp(un.machine, "armv6l") == 0 ) {
|
||||
+ if (has_neon() && has_hfp())
|
||||
+ strcpy(un.machine, "armv6hnl");
|
||||
+ else if (has_hfp())
|
||||
+ strcpy(un.machine, "armv6hl");
|
||||
+ }
|
||||
+ }
|
||||
+# endif /* arm*-linux */
|
||||
+
|
||||
# if defined(__GNUC__) && defined(__alpha__)
|
||||
{
|
||||
unsigned long amask, implver;
|
|
@ -2,14 +2,14 @@ diff -up rpm-4.9.1.1/macros.in.jx rpm-4.9.1.1/macros.in
|
|||
--- rpm-4.9.1.1/macros.in.jx 2011-08-03 16:19:05.000000000 -0400
|
||||
+++ rpm-4.9.1.1/macros.in 2011-08-08 09:41:52.981064316 -0400
|
||||
@@ -674,9 +674,10 @@ print (t)\
|
||||
RPM_SOURCE_DIR=\"%{u2p:%{_sourcedir}}\"\
|
||||
RPM_BUILD_DIR=\"%{u2p:%{_builddir}}\"\
|
||||
RPM_OPT_FLAGS=\"%{optflags}\"\
|
||||
+ RPM_LD_FLAGS=\"%{?build_ldflags}\"\
|
||||
+ RPM_LD_FLAGS=\"%{?__global_ldflags}\"\
|
||||
RPM_ARCH=\"%{_arch}\"\
|
||||
RPM_OS=\"%{_os}\"\
|
||||
RPM_BUILD_NCPUS=\"%{_smp_build_ncpus}\"\
|
||||
- export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS RPM_BUILD_NCPUS\
|
||||
+ export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_LD_FLAGS RPM_ARCH RPM_OS RPM_BUILD_NCPUS RPM_LD_FLAGS\
|
||||
- export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS\
|
||||
+ export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_LD_FLAGS RPM_ARCH RPM_OS\
|
||||
RPM_DOC_DIR=\"%{_docdir}\"\
|
||||
export RPM_DOC_DIR\
|
||||
RPM_PACKAGE_NAME=\"%{NAME}\"\
|
||||
RPM_PACKAGE_NAME=\"%{name}\"\
|
|
@ -0,0 +1,78 @@
|
|||
diff --git a/lib/tagexts.c b/lib/tagexts.c
|
||||
index dc0e0fb..e0a5d1f 100644
|
||||
--- a/lib/tagexts.c
|
||||
+++ b/lib/tagexts.c
|
||||
@@ -478,59 +478,29 @@ static const char * const _macro_i18ndomains = "%{?_i18ndomains}";
|
||||
*/
|
||||
static int i18nTag(Header h, rpmTag tag, rpmtd td, headerGetFlags hgflags)
|
||||
{
|
||||
- int rc;
|
||||
+ int rc = headerGet(h, tag, td, HEADERGET_ALLOC);
|
||||
#if defined(ENABLE_NLS)
|
||||
- char * dstring = rpmExpand(_macro_i18ndomains, NULL);
|
||||
-
|
||||
- td->type = RPM_STRING_TYPE;
|
||||
- td->data = NULL;
|
||||
- td->count = 0;
|
||||
-
|
||||
- if (dstring && *dstring) {
|
||||
- char *domain, *de;
|
||||
- const char * langval;
|
||||
- char * msgkey;
|
||||
- const char * msgid;
|
||||
-
|
||||
- rasprintf(&msgkey, "%s(%s)", headerGetString(h, RPMTAG_NAME),
|
||||
- rpmTagGetName(tag));
|
||||
-
|
||||
- /* change to en_US for msgkey -> msgid resolution */
|
||||
- langval = getenv(language);
|
||||
- (void) setenv(language, "en_US", 1);
|
||||
- ++_nl_msg_cat_cntr;
|
||||
+ if (rc) {
|
||||
+ char *de, *dstring = rpmExpand(_macro_i18ndomains, NULL);
|
||||
+ const char *domain;
|
||||
|
||||
- msgid = NULL;
|
||||
for (domain = dstring; domain != NULL; domain = de) {
|
||||
+ const char *msgid = td->data;
|
||||
+ const char *msg = NULL;
|
||||
+
|
||||
de = strchr(domain, ':');
|
||||
if (de) *de++ = '\0';
|
||||
- msgid = dgettext(domain, msgkey);
|
||||
- if (msgid != msgkey) break;
|
||||
- }
|
||||
-
|
||||
- /* restore previous environment for msgid -> msgstr resolution */
|
||||
- if (langval)
|
||||
- (void) setenv(language, langval, 1);
|
||||
- else
|
||||
- unsetenv(language);
|
||||
- ++_nl_msg_cat_cntr;
|
||||
-
|
||||
- if (domain && msgid) {
|
||||
- td->data = dgettext(domain, msgid);
|
||||
- td->data = xstrdup(td->data); /* XXX xstrdup has side effects. */
|
||||
- td->count = 1;
|
||||
- td->flags = RPMTD_ALLOCED;
|
||||
+ msg = dgettext(domain, td->data);
|
||||
+ if (msg != msgid) {
|
||||
+ free(td->data);
|
||||
+ td->data = xstrdup(msg);
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
- dstring = _free(dstring);
|
||||
- free(msgkey);
|
||||
- if (td->data)
|
||||
- return 1;
|
||||
+ free(dstring);
|
||||
}
|
||||
-
|
||||
- free(dstring);
|
||||
#endif
|
||||
|
||||
- rc = headerGet(h, tag, td, HEADERGET_ALLOC);
|
||||
return rc;
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
[Unit]
|
||||
Description=RPM database rebuild
|
||||
ConditionPathExists=/var/lib/rpm/.rebuilddb
|
||||
|
||||
# This should run before any daemons that may open the rpmdb
|
||||
DefaultDependencies=no
|
||||
After=sysinit.target
|
||||
Before=basic.target shutdown.target
|
||||
Conflicts=shutdown.target
|
||||
# In case /var is remote-mounted
|
||||
RequiresMountsFor=/var
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/bin/rpmdb --rebuilddb
|
||||
ExecStartPost=rm -f /var/lib/rpm/.rebuilddb
|
||||
|
||||
[Install]
|
||||
WantedBy=basic.target
|
Loading…
Reference in New Issue