From 477a1c56237f91c959b538e3512e5628920bd4c8 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 30 Apr 2021 00:42:23 +0200 Subject: [PATCH] find-debuginfo.sh: Add --help, --version and man page. Add a --version and --help option to find-debuginfo.sh and use that to generate a manual page. * .gitignore: Add find-debuginfo.sh.1 * Makefile.am (dist_man_MANS): Add find-debuginfo.sh.1 (find-debuginfo.sh.1): New make rule. * scripts/find-debuginfo.sh (help): New function. Handle --version and --help. https://sourceware.org/bugzilla/show_bug.cgi?id=27641 Signed-off-by: Mark Wielaard --- .gitignore | 2 + Makefile.am | 7 +- scripts/find-debuginfo.sh | 158 ++++++++++++++++++++++---------------- 3 files changed, 100 insertions(+), 67 deletions(-) diff --git a/.gitignore b/.gitignore index d41ec64..3e81e87 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,8 @@ debugedit.1 sepdebugcrcfix sepdebugcrcfix.1 +find-debuginfo.sh.1 + atconfig atlocal package.m4 diff --git a/Makefile.am b/Makefile.am index de7c51d..b26d238 100644 --- a/Makefile.am +++ b/Makefile.am @@ -39,7 +39,7 @@ sepdebugcrcfix_CFLAGS = @LIBELF_CFLAGS@ $(AM_CFLAGS) sepdebugcrcfix_LDADD = @LIBELF_LIBS@ # Manual pages are generated for dist -dist_man_MANS = debugedit.1 sepdebugcrcfix.1 +dist_man_MANS = debugedit.1 sepdebugcrcfix.1 find-debuginfo.sh.1 debugedit.1: tools/debugedit.c $(top_srcdir)/configure.ac $(MAKE) $(AM_MAKEFLAGS) debugedit$(EXEEXT) @@ -53,6 +53,11 @@ sepdebugcrcfix.1: tools/sepdebugcrcfix.c $(top_srcdir)/configure.ac --name='fixes CRC for separate .debug files' \ ./sepdebugcrcfix$(EXEEXT) +find-debuginfo.sh.1: scripts/find-debuginfo.sh $(top_srcdir)/configure.ac + $(HELP2MAN) -N --output=$@ \ + --name='finds debuginfo and processes it' \ + $(top_srcdir)/scripts/find-debuginfo.sh + noinst_HEADERS= tools/ansidecl.h \ tools/hashtab.h \ tools/md5.h \ diff --git a/scripts/find-debuginfo.sh b/scripts/find-debuginfo.sh index 3d736e0..5ea57ca 100755 --- a/scripts/find-debuginfo.sh +++ b/scripts/find-debuginfo.sh @@ -17,72 +17,84 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, see -# Usage: find-debuginfo.sh [--strict-build-id] [-g] [-r] [-m] [-i] [-n] -# [--keep-section SECTION] [--remove-section SECTION] -# [--g-libs] -# [-j N] [--jobs N] -# [-o debugfiles.list] -# [-S debugsourcefiles.list] -# [--run-dwz] [--dwz-low-mem-die-limit N] -# [--dwz-max-die-limit N] -# [--dwz-single-file-mode] -# [--build-id-seed SEED] -# [--unique-debug-suffix SUFFIX] -# [--unique-debug-src-base BASE] -# [[-l filelist]... [-p 'pattern'] -o debuginfo.list] -# [builddir] -# -# The -g flag says to use strip -g instead of full strip on DSOs or EXEs. -# The --g-libs flag says to use strip -g instead of full strip ONLY on DSOs. -# Options -g and --g-libs are mutually exclusive. -# The -r flag says to use eu-strip --reloc-debug-sections. -# Use --keep-section SECTION or --remove-section SECTION to explicitly -# keep a (non-allocated) section in the main executable or explicitly -# remove it into the .debug file. SECTION is an extended wildcard pattern. -# Both options can be given more than once. -# -# The --strict-build-id flag says to exit with failure status if -# any ELF binary processed fails to contain a build-id note. -# The -m flag says to include a .gnu_debugdata section in the main binary. -# The -i flag says to include a .gdb_index section in the .debug file. -# The -n flag says to not recompute the build-id. -# -# The -j, --jobs N option will spawn N processes to do the debuginfo -# extraction in parallel. -# -# A single -o switch before any -l or -p switches simply renames -# the primary output file from debugfiles.list to something else. -# A -o switch that follows a -p switch or some -l switches produces -# an additional output file with the debuginfo for the files in -# the -l filelist file, or whose names match the -p pattern. -# 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. -# Use --dwz-single-file-mode to disable multi-file mode, see dwz(1) -m -# for more details. - -# -# If --build-id-seed SEED is given then debugedit is called to -# update the build-ids it finds adding the SEED as seed to recalculate -# the build-id hash. This makes sure the build-ids in the ELF files -# are unique between versions and releases of the same package. -# (Use --build-id-seed "%{VERSION}-%{RELEASE}".) -# -# If --unique-debug-suffix SUFFIX is given then the debug files created -# for will be named -.debug. This makes sure .debug -# are unique between package version, release and architecture. -# (Use --unique-debug-suffix "-%{VERSION}-%{RELEASE}.%{_arch}".) -# -# If --unique-debug-src-base BASE is given then the source directory -# will be called /usr/debug/src/. This makes sure the debug source -# directories are unique between package version, release and architecture. -# (Use --unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}".) -# -# All file names in switches are relative to builddir (. if not given). -# +help() +{ + cat < will be named -.debug. This makes sure .debug +are unique between package version, release and architecture. +(Use --unique-debug-suffix \"-%{VERSION}-%{RELEASE}.%{_arch}\".) + +If --unique-debug-src-base BASE is given then the source directory +will be called /usr/debug/src/. This makes sure the debug source +dirs are unique between package version, release and achitecture (Use +--unique-debug-src-base \"%{name}-%{VERSION}-%{RELEASE}.%{_arch}\") + +All file names in switches are relative to builddir ('.' if not given). +EOF +} # Figure out where we are installed so we can call other helper scripts. lib_rpm_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" @@ -129,6 +141,9 @@ unique_debug_src_base= # Number of parallel jobs to spawn n_jobs=1 +# exit early on --version or --help +done=false + BUILDDIR=. out=debugfiles.list srcout= @@ -223,6 +238,14 @@ while [ $# -gt 0 ]; do srcout=$2 shift ;; + --version) + echo "debugedit find-debuginfo.sh" + done=true; + ;; + --help) + help + done=true + ;; *) BUILDDIR=$1 shift @@ -232,6 +255,9 @@ while [ $# -gt 0 ]; do shift done +# version or help given +if [ "$done" = "true" ]; then exit 0; fi + if test -n "$build_id_seed" -a "$no_recompute_build_id" = "true"; then echo >&2 "*** ERROR: --build-id-seed (unique build-ids) and -n (do not recompute build-id) cannot be used together" exit 2 -- 2.18.4