Home | History | Annotate | Download | only in common
      1     0    stevel #! /usr/bin/ksh
      2     0    stevel #
      3     0    stevel # CDDL HEADER START
      4     0    stevel #
      5     0    stevel # The contents of this file are subject to the terms of the
      6  6322  ab196087 # Common Development and Distribution License (the "License").
      7  6322  ab196087 # You may not use this file except in compliance with the License.
      8     0    stevel #
      9     0    stevel # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10     0    stevel # or http://www.opensolaris.org/os/licensing.
     11     0    stevel # See the License for the specific language governing permissions
     12     0    stevel # and limitations under the License.
     13     0    stevel #
     14     0    stevel # When distributing Covered Code, include this CDDL HEADER in each
     15     0    stevel # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16     0    stevel # If applicable, add the following below this CDDL HEADER, with the
     17     0    stevel # fields enclosed by brackets "[]" replaced with your own identifying
     18     0    stevel # information: Portions Copyright [yyyy] [name of copyright owner]
     19     0    stevel #
     20     0    stevel # CDDL HEADER END
     21     0    stevel #
     22     0    stevel #
     23     0    stevel # ident	"%Z%%M%	%I%	%E% SMI"
     24     0    stevel #
     25  6322  ab196087 # Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     26     0    stevel # Use is subject to license terms.
     27     0    stevel #
     28     0    stevel 
     29     0    stevel usage()
     30     0    stevel {
     31  6322  ab196087 	echo "usage: bld_vernote -R <revision> -r <release> -o <outfile.s>"
     32     0    stevel }
     33     0    stevel 
     34     0    stevel pad_notestring()
     35     0    stevel {
     36     0    stevel 	extra=$1
     37     0    stevel 	len=$(( ${#notestring} + $extra ))
     38     0    stevel 	padlen=$(( $len % 4 ))
     39     0    stevel 	while [[ $(( $len % 4)) != 0 ]]
     40     0    stevel 	do
     41     0    stevel 		notestring="${notestring}\0"
     42     0    stevel 		len=$(( $len + 1 ))
     43     0    stevel 	done
     44     0    stevel }
     45     0    stevel 
     46     0    stevel 
     47     0    stevel build_sparcnote()
     48     0    stevel {
     49  6635  ab196087 	notestring="Solaris Link Editors: $release-$revision\0"
     50     0    stevel 	#
     51  6635  ab196087 	# The 'adjustment' is for the '\0'
     52     0    stevel 	#
     53  6635  ab196087 	pad_notestring -1
     54     0    stevel 
     55     0    stevel cat > $notefile <<EOF
     56     0    stevel 	.section	".note"
     57     0    stevel 
     58     0    stevel #include <sgs.h>
     59     0    stevel 
     60     0    stevel 	.align	4
     61     0    stevel 	.word	.endname - .startname	/* note name size */
     62     0    stevel 	.word	0			/* note desc size */
     63     0    stevel 	.word	0			/* note type */
     64     0    stevel .startname:
     65     0    stevel 	.ascii	"$notestring"
     66     0    stevel .endname:
     67     0    stevel 
     68     0    stevel 	.section	".rodata", #alloc
     69     0    stevel 	.global		link_ver_string
     70     0    stevel link_ver_string:
     71     0    stevel 	.type		link_ver_string, #object
     72  6322  ab196087 	.ascii	"${release}-${revision}\0"
     73     0    stevel 	.size	link_ver_string, .-link_ver_string
     74     0    stevel EOF
     75     0    stevel }
     76     0    stevel 
     77     0    stevel build_i386note()
     78     0    stevel {
     79  6635  ab196087 	notestring="Solaris Link Editors: $release-$revision"
     80     0    stevel 	#
     81  6635  ab196087 	# The 'adjustment' is for the the fact that the x86/amd64
     82  6635  ab196087 	# assembler automatically append a '\0' at the end of a string.
     83     0    stevel 	#
     84     0    stevel 	pad_notestring -1
     85     0    stevel cat > $notefile <<EOF
     86     0    stevel 	.section	.note
     87     0    stevel 
     88     0    stevel #include <sgs.h>
     89     0    stevel 
     90     0    stevel 	.align	4
     91     0    stevel 	.long	.endname - .startname	/* note name size */
     92     0    stevel 	.long	0			/* note desc size */
     93     0    stevel 	.long	0			/* note type */
     94     0    stevel .startname:
     95     0    stevel 	.string	"$notestring"
     96     0    stevel .endname:
     97     0    stevel 
     98     0    stevel 	.section	.rodata, "a"
     99     0    stevel 	.globl		link_ver_string
    100     0    stevel link_ver_string:
    101     0    stevel 	.type	link_ver_string,@object
    102  6322  ab196087 	.string	"${release}-${revision}\0"
    103     0    stevel 	.size	link_ver_string, .-link_ver_string
    104     0    stevel EOF
    105     0    stevel }
    106     0    stevel 
    107     0    stevel 
    108     0    stevel notefile=""
    109     0    stevel release=""
    110  6322  ab196087 revision=""
    111     0    stevel 
    112     0    stevel while getopts DR:o:r: c
    113     0    stevel do
    114     0    stevel 	case $c in
    115     0    stevel 	o)
    116     0    stevel 		notefile=$OPTARG
    117     0    stevel 		;;
    118     0    stevel 	r)
    119     0    stevel 		release=$OPTARG
    120     0    stevel 		;;
    121     0    stevel 	R)
    122  6322  ab196087 		revision=$OPTARG
    123     0    stevel 		;;
    124     0    stevel 	\?)
    125     0    stevel 		usage
    126     0    stevel 		exit 1
    127     0    stevel 		;;
    128     0    stevel 	esac
    129     0    stevel done
    130     0    stevel 
    131  6322  ab196087 if [[ ( -z $notefile ) || ( -z $release ) || ( -z $revision ) ]]; then
    132     0    stevel 	usage
    133     0    stevel 	exit 1
    134     0    stevel fi
    135     0    stevel 
    136     0    stevel 
    137     0    stevel if [[ $MACH = "sparc" ]]; then
    138     0    stevel 	build_sparcnote
    139     0    stevel elif [[ $MACH = "i386" ]]; then
    140     0    stevel 	build_i386note
    141     0    stevel else
    142     0    stevel 	echo "I don't know how to build a vernote.s for ${MACH}, so sorry"
    143     0    stevel 	exit 1
    144     0    stevel fi
    145