[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