#!/bin/sh
# ========== Copyright Header Begin ==========================================
# 
# Hypervisor Software File: bin2obj
# 
# Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
# 
#  - Do no alter or remove copyright notices
# 
#  - Redistribution and use of this software in source and binary forms, with 
#    or without modification, are permitted provided that the following 
#    conditions are met: 
# 
#  - Redistribution of source code must retain the above copyright notice, 
#    this list of conditions and the following disclaimer.
# 
#  - Redistribution in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution. 
# 
#    Neither the name of Sun Microsystems, Inc. or the names of contributors 
# may be used to endorse or promote products derived from this software 
# without specific prior written permission. 
# 
#     This software is provided "AS IS," without a warranty of any kind. 
# ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 
# INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 
# PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN 
# MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR 
# ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR 
# DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN 
# OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR 
# FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE 
# DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, 
# ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF 
# SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
# 
# You acknowledge that this software is not designed, licensed or
# intended for use in the design, construction, operation or maintenance of
# any nuclear facility. 
# 
# ========== Copyright Header End ============================================
#	id: @(#)bin2obj.sh 1.7 03/04/01
#	purpose: Convert a binary  file into native object ( .o ) file
#	Copyright 1992-1997,2003 Sun Microsystems, Inc.  All Rights Reserved
#	Use is subject to license terms.

#
#  Usage:  bin2obj symbol-name  input-file output-file
#

usage() {
    echo Usage:  bin2obj [ -start ssymbol ] [ -end esymbol ] [ -64 ] \
	input-file output-file
    exit 1;
}

add_symbol() {
cat << END >> $TMP
.seg "data"
.global $1,
$1:
END
	if [ -x /usr/ccs/bin/as ]
	then
	cat << END >> $TMP
.type $1, #object; .size $1, 1
END
	fi
}

cleanup() {
    $RM  -f $TMP
}

trap cleanup 1 2 3 10

if test $# -lt 2
 then
	usage
fi


while [ x"$1" != x"" ]
do
case $1 in
    	-end)
		shift
                ENDSYM=$1
		shift
                ;;
    	-start)
		shift
                STARTSYM=$1
		shift
                ;;
	-64)
		ASARG="-xarch=v9"
		shift
		;;
	*)
	    if [ "$infile" = "" ] ;
	    then
		infile=$1;
		shift
	    else
		if [ "$outfile" = "" ] ;
		then
		    outfile=$1
		    shift
		else
		    usage
		fi
	    fi
	    ;;
esac
done

if [ ! -f $infile ] ;
then
    echo Can\'t open input file: $infile
    exit 1;
fi

RM=/usr/bin/rm
AS=/usr/bin/as
OD=/usr/bin/od
AWK=/usr/bin/awk

# On Solaris 2.x assembler is in /usr/ccs/bin
if [ -x /usr/ccs/bin/as ]
then
  AS=/usr/ccs/bin/as
fi

TMP=/tmp/$$.s

$RM -f $TMP

if [ "$STARTSYM" != "" ] ;
then
    add_symbol $STARTSYM
fi

$OD -Xv $infile | $AWK '{ if ( NF == 5 ) \
{ printf ".word 0x%s, 0x%s, 0x%s, 0x%s\n", $2, $3, $4, $5 ;} \
else { for ( i = 2 ; i <= NF; i++ ) \
{ printf ".word 0x%s\n", $i ; } }}' >> $TMP

if [ "$ENDSYM" != "" ] ;
then
    add_symbol $ENDSYM
fi

$AS $ASARG $TMP -o $outfile

cleanup

