Browse Source

initial package creation

Signed-off-by: Toshaan Bharvani <toshaan@powerel.org>
master
Toshaan Bharvani 11 months ago
commit
0fc747cd22
  1. 130
      SOURCES/0001-tests-Handle-zero-directory-entry-in-.debug_line-DWA.patch
  2. 116
      SOURCES/0002-scripts-find-debuginfo.in-Add-q-quiet.patch
  3. BIN
      SOURCES/gpgkey-5C1D1AA44BE649DE760A.gpg
  4. 118
      SPECS/debugedit.spec

130
SOURCES/0001-tests-Handle-zero-directory-entry-in-.debug_line-DWA.patch

@ -0,0 +1,130 @@ @@ -0,0 +1,130 @@
From ae27211cbbfb63a0ad3c141cd1310d7f583ec40e Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mark@klomp.org>
Date: Fri, 30 Jul 2021 18:09:46 +0200
Subject: [PATCH] tests: Handle zero directory entry in .debug_line DWARF5
debugedit.at

We were skipping the zero directory entry, because it was always
the same as the directory entry at position one. But that isn't
true anymore with gcc 11.2.1. There the zero dir entry is unique.
Fix the debugedit.at .debug_line testcases using DWARF5 to also
include dir entry zero.

Signed-off-by: Mark Wielaard <mark@klomp.org>
---
configure.ac | 14 ++++++++++++++
tests/atlocal.in | 1 +
tests/debugedit.at | 18 ++++++++++++------
3 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/configure.ac b/configure.ac
index e5c9230..6a53365 100644
--- a/configure.ac
+++ b/configure.ac
@@ -87,6 +87,20 @@ CFLAGS="$save_CFLAGS"
GDWARF_5_FLAG=$ac_cv_gdwarf_5
AC_SUBST([GDWARF_5_FLAG])
+AC_CACHE_CHECK([whether -gdwarf-5 produced DWARF5 .debug_line], ac_cv_dwarf_5_debugline, [dnl
+save_CFLAGS="$CFLAGS"
+CFLAGS="-gdwarf-5"
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i=0;]],[[/* empty main */]])],
+ [if readelf --debug-dump=line conftest.o 2>&1 | \
+ grep "DWARF Version:" 2>&1 | grep "5" > /dev/null 2>&1; \
+ then ac_cv_dwarf_5_debugline=yes; \
+ else ac_cv_dwarf_5_debugline=no; fi],
+ ac_cv_dwarf_5_debugline=no)
+CFLAGS="$save_CFLAGS"
+])
+DWARF_5_DEBUGLINE=$ac_cv_dwarf_5_debugline
+AC_SUBST([DWARF_5_DEBUGLINE])
+
AC_CACHE_CHECK([whether gcc supports -gz=none], ac_cv_gz_none, [dnl
save_CFLAGS="$CFLAGS"
CFLAGS="-gz=none"
diff --git a/tests/atlocal.in b/tests/atlocal.in
index 8399f8d..d916301 100644
--- a/tests/atlocal.in
+++ b/tests/atlocal.in
@@ -13,3 +13,4 @@ READELF="@READELF@"
GDWARF_5_FLAG=@GDWARF_5_FLAG@
GZ_NONE_FLAG=@GZ_NONE_FLAG@
+DWARF_5_DEBUGLINE=@DWARF_5_DEBUGLINE@
diff --git a/tests/debugedit.at b/tests/debugedit.at
index 0311d26..725e68e 100644
--- a/tests/debugedit.at
+++ b/tests/debugedit.at
@@ -488,10 +488,12 @@ AT_CLEANUP
AT_SETUP([debugedit .debug_line objects DWARF5])
AT_KEYWORDS([debuginfo] [debugedit])
AT_SKIP_IF([test "$GDWARF_5_FLAG" = "no"])
+AT_SKIP_IF([test "$DWARF_5_DEBUGLINE" = "no"])
DEBUGEDIT_SETUP([-gdwarf-5])
AT_DATA([expout],
[foo/bar/baz
+foo/bar/baz/subdir_bar
foo/bar/baz/subdir_headers
])
@@ -500,8 +502,8 @@ AT_CHECK([[debugedit -b $(pwd) -d /foo/bar/baz ./subdir_bar/bar.o]])
AT_CHECK([[debugedit -b $(pwd) -d /foo/bar/baz ./baz.o]])
AT_CHECK([[
readelf --debug-dump=line foo.o subdir_bar/bar.o baz.o \
- | grep -A5 "The Directory Table" | grep "^ [123]" \
- | cut -f2- -d/ | grep ^foo/ | sort
+ | grep -A5 "The Directory Table" | grep "^ [0123]" \
+ | cut -f2- -d/ | grep ^foo/ | sort -u
]],[0],[expout])
AT_CLEANUP
@@ -535,18 +537,20 @@ AT_CLEANUP
AT_SETUP([debugedit .debug_line partial DWARF5])
AT_KEYWORDS([debuginfo] [debugedit])
AT_SKIP_IF([test "$GDWARF_5_FLAG" = "no"])
+AT_SKIP_IF([test "$DWARF_5_DEBUGLINE" = "no"])
DEBUGEDIT_SETUP([-gdwarf-5])
AT_DATA([expout],
[foo/bar/baz
+foo/bar/baz/subdir_bar
foo/bar/baz/subdir_headers
])
AT_CHECK([[debugedit -b $(pwd) -d /foo/bar/baz ./foobarbaz.part.o]])
AT_CHECK([[
readelf --debug-dump=line ./foobarbaz.part.o \
- | grep -A5 "The Directory Table" | grep "^ [123]" \
- | cut -f2- -d/ | grep ^foo/ | sort
+ | grep -A5 "The Directory Table" | grep "^ [0123]" \
+ | cut -f2- -d/ | grep ^foo/ | sort -u
]],[0],[expout])
AT_CLEANUP
@@ -580,18 +584,20 @@ AT_CLEANUP
AT_SETUP([debugedit .debug_line exe DWARF5])
AT_KEYWORDS([debuginfo] [debugedit])
AT_SKIP_IF([test "$GDWARF_5_FLAG" = "no"])
+AT_SKIP_IF([test "$DWARF_5_DEBUGLINE" = "no"])
DEBUGEDIT_SETUP([-gdwarf-5])
AT_DATA([expout],
[foo/bar/baz
+foo/bar/baz/subdir_bar
foo/bar/baz/subdir_headers
])
AT_CHECK([[debugedit -b $(pwd) -d /foo/bar/baz ./foobarbaz.exe]])
AT_CHECK([[
readelf --debug-dump=line ./foobarbaz.exe \
- | grep -A5 "The Directory Table" | grep "^ [123]" \
- | cut -f2- -d/ | grep ^foo/ | sort
+ | grep -A5 "The Directory Table" | grep "^ [0123]" \
+ | cut -f2- -d/ | grep ^foo/ | sort -u
]],[0],[expout])
AT_CLEANUP
--
2.27.0

116
SOURCES/0002-scripts-find-debuginfo.in-Add-q-quiet.patch

@ -0,0 +1,116 @@ @@ -0,0 +1,116 @@
From b8ac71d9f88202f00a32c5a8b3b4b93bb2fa110a Mon Sep 17 00:00:00 2001
From: Prarit Bhargava <prarit@redhat.com>
Date: Thu, 26 Jan 2023 16:08:57 -0500
Subject: [PATCH] scripts/find-debuginfo.in: Add -q|--quiet

Projects with a large number of compiled files end up with a large number
of 'extracting debug info from' messages in the build log. In the case of
the Fedora kernel these messages account for 8504 lines in the log, or 61%
of the entire log [1].

Removing these lines make the log easier to view and comprehend for some
projects, however, not all projects will want to silence these messages so
suppressing them must be optional.

Add a -q|--quiet which allows users to silence the non-error output from
the script.

[1] https://kojipkgs.fedoraproject.org//packages/kernel/6.2.0/0.rc5.20230123git2475bf0250de.38.fc38/data/logs/x86_64/build.log

Signed-off-by: Prarit Bhargava <prarit@redhat.com>
---
scripts/find-debuginfo.in | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/scripts/find-debuginfo.in b/scripts/find-debuginfo.in
index 8090c84..7dec3c3 100755
--- a/scripts/find-debuginfo.in
+++ b/scripts/find-debuginfo.in
@@ -26,7 +26,7 @@ Usage: find-debuginfo [OPTION]... [builddir]
automagically generates debug info and file lists
Options:
-[--strict-build-id] [-g] [-r] [-m] [-i] [-n]
+[--strict-build-id] [-g] [-r] [-m] [-i] [-n] [-q]
[--keep-section SECTION] [--remove-section SECTION]
[--g-libs]
[-j N] [--jobs N]
@@ -94,6 +94,8 @@ will be called /usr/debug/src/<BASE>. This makes sure the debug source
dirs are unique between package version, release and achitecture (Use
--unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}")
+The -q or --quiet flag silences non-error output from the script.
+
All file names in switches are relative to builddir ('.' if not given).
EOF
}
@@ -146,6 +148,9 @@ n_jobs=1
# exit early on --version or --help
done=false
+# silence non-error output
+quiet=false
+
BUILDDIR=.
out=debugfiles.list
srcout=
@@ -239,6 +244,9 @@ while [ $# -gt 0 ]; do
srcout=$2
shift
;;
+ -q|--quiet)
+ quiet=true
+ ;;
--version)
echo "find-debuginfo @VERSION@"
done=true;
@@ -437,7 +445,7 @@ do_file()
get_debugfn "$f"
[ -f "${debugfn}" ] && return
- echo "extracting debug info from $f"
+ $quiet || echo "extracting debug info from $f"
# See also cpio SOURCEFILE copy. Directories must match up.
debug_base_name="$RPM_BUILD_DIR"
debug_dest_name="/usr/src/debug"
@@ -513,7 +521,7 @@ do_file()
grep "^$inum " "$temp/linked" | while read inum linked; do
link=$debugfn
get_debugfn "$linked"
- echo "hard linked $link to $debugfn"
+ $quiet || echo "hard linked $link to $debugfn"
mkdir -p "$(dirname "$debugfn")" && ln -nf "$link" "$debugfn"
done
fi
@@ -576,7 +584,7 @@ if $run_dwz \
&& [ -d "${RPM_BUILD_ROOT}/usr/lib/debug" ]; then
readarray dwz_files < <(cd "${RPM_BUILD_ROOT}/usr/lib/debug"; find -type f -name \*.debug | LC_ALL=C sort)
if [ ${#dwz_files[@]} -gt 0 ]; then
- size_before=$(du -sk ${RPM_BUILD_ROOT}/usr/lib/debug | cut -f1)
+ $quiet || size_before=$(du -sk ${RPM_BUILD_ROOT}/usr/lib/debug | cut -f1)
dwz_multifile_name="${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}-${RPM_PACKAGE_RELEASE}.${RPM_ARCH}"
dwz_multifile_suffix=
dwz_multifile_idx=0
@@ -600,8 +608,8 @@ if $run_dwz \
echo >&2 "*** ERROR: DWARF compression requested, but no dwz installed"
exit 2
fi
- size_after=$(du -sk ${RPM_BUILD_ROOT}/usr/lib/debug | cut -f1)
- echo "original debug info size: ${size_before}kB, size after compression: ${size_after}kB"
+ $quiet || size_after=$(du -sk ${RPM_BUILD_ROOT}/usr/lib/debug | cut -f1)
+ $quiet || echo "original debug info size: ${size_before}kB, size after compression: ${size_after}kB"
# Remove .dwz directory if empty
rmdir "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz" 2>/dev/null
@@ -621,7 +629,7 @@ do
f=${f#$RPM_BUILD_ROOT}
t=${t#$RPM_BUILD_ROOT}
if [ -f "$debugdir$t" ]; then
- echo "symlinked /usr/lib/debug$t to /usr/lib/debug${f}.debug"
+ $quiet || echo "symlinked /usr/lib/debug$t to /usr/lib/debug${f}.debug"
debug_link "/usr/lib/debug$t" "${f}.debug"
fi
done
--
2.39.1

BIN
SOURCES/gpgkey-5C1D1AA44BE649DE760A.gpg

Binary file not shown.

118
SPECS/debugedit.spec

@ -0,0 +1,118 @@ @@ -0,0 +1,118 @@
Name: debugedit
Version: 5.0
Release: 4%{?dist}
Summary: Tools for debuginfo creation
License: GPLv3+ and GPLv2+ and LGPLv2+
URL: https://sourceware.org/debugedit/
Source0: https://sourceware.org/pub/debugedit/%{version}/%{name}-%{version}.tar.xz
Source1: https://sourceware.org/pub/debugedit/%{version}/%{name}-%{version}.tar.xz.sig
Source2: gpgkey-5C1D1AA44BE649DE760A.gpg

BuildRequires: make gcc
BuildRequires: pkgconfig(libelf)
BuildRequires: pkgconfig(libdw)
BuildRequires: help2man
BuildRequires: gnupg2

# For the testsuite.
BuildRequires: autoconf
BuildRequires: automake

# The find-debuginfo.sh script has a couple of tools it needs at runtime.
# For strip_to_debug, eu-strip
Requires: elfutils
# For add_minidebug, readelf, awk, nm, sort, comm, objcopy, xz
Requires: binutils, gawk, coreutils, xz
# For find and xargs
Requires: findutils
# For do_file, gdb_add_index
# We only need gdb-add-index, so suggest gdb-minimal (full gdb is also ok)
Requires: /usr/bin/gdb-add-index
Suggests: gdb-minimal
# For run_job, sed
Requires: sed
# For dwz
Requires: dwz
# For append_uniq, grep
Requires: grep

%global _hardened_build 1

Patch1: 0001-tests-Handle-zero-directory-entry-in-.debug_line-DWA.patch
Patch2: 0002-scripts-find-debuginfo.in-Add-q-quiet.patch

%description
The debugedit project provides programs and scripts for creating
debuginfo and source file distributions, collect build-ids and rewrite
source paths in DWARF data for debugging, tracing and profiling.

It is based on code originally from the rpm project plus libiberty and
binutils. It depends on the elfutils libelf and libdw libraries to
read and write ELF files, DWARF data and build-ids.

%prep
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%autosetup -p1

%build
autoreconf -f -v -i
%configure
%make_build

%install
%make_install
# Temp symlink to make sure things don't break.
cd %{buildroot}%{_bindir}
ln -s find-debuginfo find-debuginfo.sh

%check
# The testsuite should be zero fail.
# It uses its own CFLAGS and LDFLAGS settings.
sed -i 's/^\(C\|LD\)FLAGS=.*/\1FLAGS=""/' tests/atlocal
make check %{?_smp_mflags}

%files
%license COPYING COPYING3 COPYING.LIB
%doc README
%{_bindir}/debugedit
%{_bindir}/sepdebugcrcfix
%{_bindir}/find-debuginfo
%{_bindir}/find-debuginfo.sh
%{_mandir}/man1/debugedit.1*
%{_mandir}/man1/sepdebugcrcfix.1*
%{_mandir}/man1/find-debuginfo.1*

%changelog
* Tue Mar 28 2023 Mark Wielaard <mjw@redhat.com> - 5.0-4
- Add 0002-scripts-find-debuginfo.in-Add-q-quiet.patch

* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 5.0-3
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688

* Tue Aug 3 2021 Mark Wielaard <mjw@redhat.com> - 5.0-2
- Add testsuite fix for GCC 11.2.1

* Mon Jul 26 2021 Mark Wielaard <mjw@redhat.com> - 5.0-1
- Upgrade to upstream 5.0 release.
- Removes find-debuginfo .sh suffix.
- This release still has a find-debuginfo.sh -> find-debuginfo symlink.

* Wed May 5 2021 Mark Wielaard <mjw@fedoraproject.org> - 0.2-1
- Update to upstream 0.2 pre-release. Adds documentation.

* Wed Apr 28 2021 Mark Wielaard <mjw@fedoraproject.org> - 0.1-5
- Add dist to Release. Use file dependency for /usr/bin/gdb-add-index.

* Tue Apr 27 2021 Mark Wielaard <mjw@fedoraproject.org> - 0.1-4
- Use numbered Sources and https.

* Mon Apr 26 2021 Mark Wielaard <mjw@fedoraproject.org> - 0.1-3
- Fix some rpmlint issues, add comments, add license and doc,
gpg verification, use pkgconfig BuildRequires, enable _hardened_build

* Mon Mar 29 2021 Panu Matilainen <pmatilai@redhat.com>
- Add pile of missing runtime utility dependencies

* Tue Mar 23 2021 Panu Matilainen <pmatilai@redhat.com>
- Initial packaging
Loading…
Cancel
Save