1#!/bin/sh 2# 3# Script to make an offline archive for debugging with libdwfl-based tools. 4# 5# make-debug-archive ARCHIVE {options} 6# make-debug-archive --kernel [--force] [RELEASE] 7# 8# Valid options are those listed under 'Input selection options' 9# by running @UNSTRIP@ --help. 10# 11# The archive installed by --kernel be used automatically by -K. 12# An offline archive can be used via -e in any tool that accepts those options. 13# 14 15UNSTRIP=${UNSTRIP:-@UNSTRIP@} 16AR=${AR:-@AR@} 17SUDO=${SUDO:-/usr/bin/sudo} 18 19LS=/bin/ls 20RM=/bin/rm 21MV=/bin/mv 22MKDIR=/bin/mkdir 23XARGS=/usr/bin/xargs 24 25outdir=${TMPDIR:-/tmp}/debugar$$ 26 27usage() 28{ 29 echo "Usage: $0 ARCHIVE {options}" 30 echo " or: $0 --kernel [--sudo] [--force] [RELEASE]" 31 echo 32 echo "Valid options are listed under 'Input selection options'" 33 echo "when running: $UNSTRIP --help" 34 echo 35 echo "The --kernel form updates the file used by -K if the" 36 echo "kernel installation has changed, or always with --force." 37 echo "With --sudo, touches the installed file via $SUDO." 38} 39 40fatal_usage() 41{ 42 usage >&2 43 exit 2 44} 45 46script_version() 47{ 48 echo "`basename $0` (@PACKAGE_NAME@) @PACKAGE_VERSION@" 49 echo "Copyright (C) 2007 Red Hat, Inc." 50 echo "This is free software; see the source for copying conditions." 51 echo "There is NO warranty; not even for MERCHANTABILITY or" 52 echo "FITNESS FOR A PARTICULAR PURPOSE." 53 echo "Written by Roland McGrath." 54} 55 56sudo= 57kernel=no 58force_kernel=no 59while [ $# -gt 0 ]; do 60 case "x$1" in 61 x--help) usage; exit 0 ;; 62 x--version) script_version; exit 0 ;; 63 x--kernel) kernel=yes ;; 64 x--force) force_kernel=yes ;; 65 x--sudo) sudo=$SUDO ;; 66 *) break ;; 67 esac 68 shift 69done 70 71if [ $kernel = no ] && [ $force_kernel = yes -o -n "$sudo" ]; then 72 usage 73fi 74 75if [ $kernel = yes ]; then 76 if [ $# -eq 0 ]; then 77 release=`uname -r` 78 elif [ $# -eq 1 ]; then 79 release=$1 80 else 81 fatal_usage 82 fi 83 84 dir=/usr/lib/debug/lib/modules/$release 85 archive=$dir/debug.a 86 dep=/lib/modules/$release/modules.dep 87 88 if [ ! -d $dir ]; then 89 echo >&2 "$0: $dir not installed" 90 exit 1 91 fi 92 93 # Without --force, bail if the kernel installation is not newer. 94 # This file is normally touched by installing new kernels or modules. 95 if [ $force_kernel = no -a "$archive" -nt "$dep" ]; then 96 exit 0 97 fi 98 99 # We have to kill the old one first, because our own -K would use it. 100 [ ! -e "$archive" ] || $sudo $RM -f "$archive" || exit 101 102 set "$archive" "-K$release" 103fi 104 105if [ $# -lt 2 ]; then 106 fatal_usage 107fi 108 109archive="$1" 110shift 111 112case "$archive" in 113/*) ;; 114*) archive="`/bin/pwd`/$archive" ;; 115esac 116 117if [ -z "$sudo" ]; then 118 new_archive="$archive.new" 119else 120 new_archive="$outdir.a" 121fi 122 123$RM -f "$new_archive" || exit 124 125trap '$RM -rf "$outdir" "$new_archive"' 0 1 2 15 126 127$MKDIR "$outdir" && 128$UNSTRIP -d "$outdir" -m -a -R "$@" && 129(cd "$outdir" && $LS | $XARGS $AR cq "$new_archive") && 130$sudo $MV -f "$new_archive" "$archive" 131 132exit 133