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