xref: /openbsd-src/usr.bin/ctfconv/ctfstrip (revision fa44dea1c190af0c767b553d0d7b503256b4b660)
1192095f7Smpi#!/bin/sh
2492f109aSmpi#
3*fa44dea1Smpi# $OpenBSD: ctfstrip,v 1.12 2019/10/15 10:27:25 mpi Exp $
4492f109aSmpi#
5492f109aSmpi# Copyright (c) 2017 Martin Pieuchot
6492f109aSmpi#
7492f109aSmpi# Permission to use, copy, modify, and distribute this software for any
8492f109aSmpi# purpose with or without fee is hereby granted, provided that the above
9492f109aSmpi# copyright notice and this permission notice appear in all copies.
10492f109aSmpi#
11492f109aSmpi# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12492f109aSmpi# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13492f109aSmpi# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14492f109aSmpi# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15492f109aSmpi# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16492f109aSmpi# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17492f109aSmpi# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18192095f7Smpi
19a34679bfSjasperset -o posix
20a34679bfSjasper
21a34679bfSjaspercleanup() {
22a34679bfSjasper	rm -f ${TMPFILE}
23a34679bfSjasper	exit 1
24a34679bfSjasper}
25a34679bfSjasper
26027e3329Ssunilusage() {
27027e3329Ssunil	echo "usage: $(basename $0) [-S] [-o outfile] file" >&2
28027e3329Ssunil	exit 1
29027e3329Ssunil}
30027e3329Ssunil
31a34679bfSjaspertrap "cleanup" 1 2 3 13 15
32192095f7Smpi
333103aebcSjcawhile getopts So: opt; do
343103aebcSjca	case $opt in
353103aebcSjca		S)	STRIPFLAG=-g;;
363103aebcSjca		o)	OUTFILE="$OPTARG";;
373103aebcSjca		\?)	usage;;
38192095f7Smpi	esac
39192095f7Smpidone
40192095f7Smpi
413103aebcSjcashift $((OPTIND - 1))
423103aebcSjca
43027e3329Ssunilif [ $# -ne 1 ]; then
44027e3329Ssunil	usage
45192095f7Smpifi
46192095f7Smpi
47027e3329SsunilINFILE="$1"
48192095f7SmpiLABEL="unknown"
49a34679bfSjasperTMPFILE=$(mktemp /tmp/.ctf.XXXXXXXXXX)
50192095f7Smpi
51a34679bfSjasper# Extract kernel version
52e4e1d541Sjasperif [ -z "${INFILE##bsd*}" ]; then
53c0224781Sjasper	LABEL=`what "$INFILE" | sed -n '$s/^   //p'`
54192095f7Smpifi
55192095f7Smpi
56*fa44dea1Smpi# If ctfstrip was passed a file that lacks useful debug sections, ctfconv will
57*fa44dea1Smpi# fail.  So try to run ctfconv and silently fallback to plain strip(1) if that
58*fa44dea1Smpi# failed.
59c0224781Sjasperctfconv -o ${TMPFILE} -l "${LABEL}" "${INFILE}" 2> /dev/null
60192095f7Smpi
61e4e1d541Sjasperif [ $? -eq 0 ]; then
62*fa44dea1Smpi	objcopy  ${STRIPFLAG} \
63*fa44dea1Smpi		--add-section .SUNW_ctf=${TMPFILE} "${INFILE}" ${OUTFILE}
64*fa44dea1Smpi
65*fa44dea1Smpi	# Also add CTF data to the debug kernel
66*fa44dea1Smpi	if [ -z "${INFILE##bsd.gdb}" ]; then
67*fa44dea1Smpi		objcopy --add-section .SUNW_ctf=${TMPFILE} "${INFILE}"
68*fa44dea1Smpi	fi
69d7477b10Sjasperelse
7076812c95Ssunil	strip ${STRIPFLAG} ${OUTFILE:+"-o${OUTFILE}"} "${INFILE}"
71d7477b10Sjasperfi
72192095f7Smpi
73192095f7Smpirm -f ${TMPFILE}
74