#!/bin/sh # # Script to make an offline archive for debugging with libdwfl-based tools. # # make-debug-archive ARCHIVE {options} # make-debug-archive --kernel [--force] [RELEASE] # # Valid options are those listed under 'Input selection options' # by running @UNSTRIP@ --help. # # The archive installed by --kernel be used automatically by -K. # An offline archive can be used via -e in any tool that accepts those options. # UNSTRIP=${UNSTRIP:-@UNSTRIP@} AR=${AR:-@AR@} SUDO=${SUDO:-/usr/bin/sudo} LS=/bin/ls RM=/bin/rm MV=/bin/mv MKDIR=/bin/mkdir XARGS=/usr/bin/xargs outdir=${TMPDIR:-/tmp}/debugar$$ usage() { echo "Usage: $0 ARCHIVE {options}" echo " or: $0 --kernel [--sudo] [--force] [RELEASE]" echo echo "Valid options are listed under 'Input selection options'" echo "when running: $UNSTRIP --help" echo echo "The --kernel form updates the file used by -K if the" echo "kernel installation has changed, or always with --force." echo "With --sudo, touches the installed file via $SUDO." } fatal_usage() { usage >&2 exit 2 } script_version() { echo "`basename $0` (@PACKAGE_NAME@) @PACKAGE_VERSION@" echo "Copyright (C) 2007 Red Hat, Inc." echo "This is free software; see the source for copying conditions." echo "There is NO warranty; not even for MERCHANTABILITY or" echo "FITNESS FOR A PARTICULAR PURPOSE." echo "Written by Roland McGrath." } sudo= kernel=no force_kernel=no while [ $# -gt 0 ]; do case "x$1" in x--help) usage; exit 0 ;; x--version) script_version; exit 0 ;; x--kernel) kernel=yes ;; x--force) force_kernel=yes ;; x--sudo) sudo=$SUDO ;; *) break ;; esac shift done if [ $kernel = no ] && [ $force_kernel = yes -o -n "$sudo" ]; then usage fi if [ $kernel = yes ]; then if [ $# -eq 0 ]; then release=`uname -r` elif [ $# -eq 1 ]; then release=$1 else fatal_usage fi dir=/usr/lib/debug/lib/modules/$release archive=$dir/debug.a dep=/lib/modules/$release/modules.dep if [ ! -d $dir ]; then echo >&2 "$0: $dir not installed" exit 1 fi # Without --force, bail if the kernel installation is not newer. # This file is normally touched by installing new kernels or modules. if [ $force_kernel = no -a "$archive" -nt "$dep" ]; then exit 0 fi # We have to kill the old one first, because our own -K would use it. [ ! -e "$archive" ] || $sudo $RM -f "$archive" || exit set "$archive" "-K$release" fi if [ $# -lt 2 ]; then fatal_usage fi archive="$1" shift case "$archive" in /*) ;; *) archive="`/bin/pwd`/$archive" ;; esac if [ -z "$sudo" ]; then new_archive="$archive.new" else new_archive="$outdir.a" fi $RM -f "$new_archive" || exit trap '$RM -rf "$outdir" "$new_archive"' 0 1 2 15 $MKDIR "$outdir" && $UNSTRIP -d "$outdir" -m -a -R "$@" && (cd "$outdir" && $LS | $XARGS $AR cq "$new_archive") && $sudo $MV -f "$new_archive" "$archive" exit