summaryrefslogtreecommitdiff
blob: 832ddb0b8e570aba62e5702d97e06729259ca9c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/sbin/openrc-run
# Copyright 1999-2018 Gentoo Authors
# 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.