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