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