ctfstrip revision 1.7
1#!/bin/sh 2# 3# $OpenBSD: ctfstrip,v 1.7 2017/08/14 20:09:17 jasper 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 26trap "cleanup" 1 2 3 13 15 27 28USAGE="usage: ${0##*/} [-S] [-o outfile] file" 29 30for arg in "$@"; do 31 if [ -n "$OSET" ]; then 32 OUTFILE="$arg" 33 unset OSET 34 shift 35 continue 36 fi 37 case "$arg" in 38 -o) OSET=1; shift; continue;; 39 -S) STRIPFLAG=-g; shift; continue;; 40 esac 41 shift 42 set -- "$@" "$INFILE" 43 INFILE="$arg" 44done 45 46if [ $# -eq 0 ]; then 47 echo "${USAGE}" >&2 48 exit 1 49fi 50 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} $@ -o ${OUTFILE} ${INFILE} 67fi 68 69rm -f ${TMPFILE} 70