[Midnightbsd-cvs] src [12317] trunk/sys/tools/embed_mfs.sh: sync with FreeBSD 11-stable

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sat Feb 8 14:40:32 EST 2020


Revision: 12317
          http://svnweb.midnightbsd.org/src/?rev=12317
Author:   laffer1
Date:     2020-02-08 14:40:31 -0500 (Sat, 08 Feb 2020)
Log Message:
-----------
sync with FreeBSD 11-stable

Modified Paths:
--------------
    trunk/sys/tools/embed_mfs.sh

Modified: trunk/sys/tools/embed_mfs.sh
===================================================================
--- trunk/sys/tools/embed_mfs.sh	2020-02-08 19:39:08 UTC (rev 12316)
+++ trunk/sys/tools/embed_mfs.sh	2020-02-08 19:40:31 UTC (rev 12317)
@@ -23,18 +23,62 @@
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
-# $FreeBSD: stable/10/sys/tools/embed_mfs.sh 175984 2008-02-05 10:46:30Z raj $ 
+# $FreeBSD: stable/11/sys/tools/embed_mfs.sh 331691 2018-03-28 17:19:04Z emaste $ 
 # $MidnightBSD$
 #
-# Embed the MFS image into the kernel body (expects space reserved via 
-# MD_ROOT_SIZE)
+# Embed an MFS image into the kernel body or the loader body (expects space
+# reserved via MD_ROOT_SIZE (kernel) or MD_IMAGE_SIZE (loader))
 #
-# $1: kernel filename
+# $1: kernel or loader filename
 # $2: MFS image filename
 #
 
-obs=`strings -at d $1 | grep "MFS Filesystem goes here" | awk '{print $1}'`
-dd if=$2 ibs=8192 of=$1 obs=${obs} oseek=1 conv=notrunc 2> /dev/null
+if [ $# -ne 2 ]; then
+	echo "usage: $(basename $0) target mfs_image"
+	exit 0
+fi
+if [ ! -w "$1" ]; then
+	echo $1 not writable
+	exit 1
+fi
 
-strings $1 | grep 'MFS Filesystem had better STOP here' > /dev/null || \
-	(rm $1 && echo "MFS image too large" && false)
+mfs_size=`stat -f '%z' $2 2> /dev/null`
+# If we can't determine MFS image size - bail.
+[ -z ${mfs_size} ] && echo "Can't determine MFS image size" && exit 1
+
+err_no_mfs="Can't locate mfs section within "
+
+if file -b $1 | grep -q '^ELF ..-bit .SB executable'; then
+
+	sec_info=`elfdump -c $1 2> /dev/null | grep -A 5 -E "sh_name: oldmfs$"`
+	# If we can't find the mfs section within the given kernel - bail.
+	[ -z "${sec_info}" ] && echo "${err_no_mfs} $1" && exit 1
+
+	sec_size=`echo "${sec_info}" | awk '/sh_size/ {print $2}' 2>/dev/null`
+	sec_start=`echo "${sec_info}" | \
+	    awk '/sh_offset/ {print $2}' 2>/dev/null`
+
+else
+
+	#try to find start byte of MFS start flag otherwise - bail.
+	sec_start=`strings -at d $1 | grep "MFS Filesystem goes here"` || \
+	    { echo "${err_no_mfs} $1"; exit 1; }
+	sec_start=`echo ${sec_start} | awk '{print $1}'`
+
+	#try to find start byte of MFS end flag otherwise - bail.
+	sec_end=`strings -at d $1 | \
+	    grep "MFS Filesystem had better STOP here"` || \
+	    { echo "${err_no_mfs} $1"; exit 1; }
+	sec_end=`echo ${sec_end} | awk '{print $1}'`
+
+	#calculate MFS section size
+	sec_size=`expr ${sec_end} - ${sec_start}`
+
+fi
+
+# If the mfs section size is smaller than the mfs image - bail.
+[ ${sec_size} -lt ${mfs_size} ] && echo "MFS image too large" && exit 1
+
+# Dump the mfs image into the mfs section
+dd if=$2 ibs=8192 of=$1 obs=${sec_start} oseek=1 conv=notrunc 2> /dev/null && \
+    echo "MFS image embedded into $1" && exit 0



More information about the Midnightbsd-cvs mailing list