1#!/bin/sh 2# 3# $OpenBSD: ctfstrip,v 1.10 2019/02/18 11:05:43 sunil Exp $ 4# 5# Copyright (c) 2017 Martin Pieuchot 6# 7# Permission to use, copy, modify, and distribute this software for any 8# purpose with or without fee is hereby granted, provided that the above 9# copyright notice and this permission notice appear in all copies. 10# 11# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 19set -o posix 20 21cleanup() { 22 rm -f ${TMPFILE} 23 exit 1 24} 25 26usage() { 27 echo "usage: $(basename $0) [-S] [-o outfile] file" >&2 28 exit 1 29} 30 31trap "cleanup" 1 2 3 13 15 32 33args=$(getopt So: $*) 34if [ $? -ne 0 ]; then 35 usage 36fi 37set -- $args 38while [ $# -ne 0 ]; do 39 case "$1" in 40 -S) STRIPFLAG=-g; shift;; 41 -o) OUTFILE="$2"; shift; shift;; 42 --) shift; break;; 43 esac 44done 45 46if [ $# -ne 1 ]; then 47 usage 48fi 49 50INFILE="$1" 51LABEL="unknown" 52TMPFILE=$(mktemp /tmp/.ctf.XXXXXXXXXX) 53 54# Extract kernel version 55if [ -z "${INFILE##bsd*}" ]; then 56 LABEL=`what "$INFILE" | sed -n '$s/^ //p'` 57fi 58 59# If ctfstrip was passed a file that lacks useful debug sections, ctfconv will fail. 60# So try to run ctfconv and silently fallback to plain strip(1) if that failed. 61ctfconv -o ${TMPFILE} -l "${LABEL}" "${INFILE}" 2> /dev/null 62 63if [ $? -eq 0 ]; then 64 objcopy --add-section .SUNW_ctf=${TMPFILE} ${STRIPFLAG} "${INFILE}" ${OUTFILE} 65else 66 strip ${STRIPFLAG} ${OUTFILE:+"-o${OUTFILE}"} "${INFILE}" 67fi 68 69rm -f ${TMPFILE} 70