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