#!/sbin/openrc-run
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

# Enable automatic non-native program execution by the kernel.

# Defaulting to OC should be safe because it comes down to:
#  - do we trust the interp itself to not be malicious?  yes; we built it.
#  - do we trust the programs we're running?  ish; same permission as native
#    binaries apply.  so if user can do bad stuff natively, cross isn't worse.
: ${QEMU_BINFMT_FLAGS:=OC}

depend() {
	after procfs
}

start() {
	ebegin "Registering qemu-user binaries (flags: ${QEMU_BINFMT_FLAGS})"

	if [ ! -d /proc/sys/fs/binfmt_misc ] ; then
		modprobe -q binfmt_misc
	fi

	if [ ! -d /proc/sys/fs/binfmt_misc ] ; then
		eend 1 "You need support for 'misc binaries' in your kernel!"
		return
	fi

	if [ ! -f /proc/sys/fs/binfmt_misc/register ] ; then
		mount -t binfmt_misc -o nodev,noexec,nosuid \
			binfmt_misc /proc/sys/fs/binfmt_misc >/dev/null 2>&1
		eend $? || return
	fi

	# Probe the native cpu type so we don't try registering them.
	local cpu="$(uname -m)"
	case "${cpu}" in
	armv[4-9]*)
		cpu="arm"
		;;
	i386|i486|i586|i686|i86pc|BePC|x86_64)
		cpu="i386"
		;;
	m68k)
		cpu="m68k"
		;;
	mips*)
		cpu="mips"
		;;
	"Power Macintosh"|ppc|ppc64)
		cpu="ppc"
		;;
	s390*)
		cpu="s390"
		;;
	sh*)
		cpu="sh"
		;;
	sparc*)
		cpu="sparc"
		;;
	esac

	# Register the interpreter for each cpu except for the native one.
