xref: /aosp_15_r20/external/elfutils/src/make-debug-archive.in (revision 7304104da70ce23c86437a01be71edd1a2d7f37e)
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