Commit 4c9e1385 authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds

uml: style fixes pass 1

Formatting changes in the files which have been changed in the
tt-removal patchset so far.  These include:
	copyright updates
	header file trimming
	style fixes
	adding severity to printks
	indenting Kconfig help according to the predominant kernel style

These changes should be entirely non-functional.
Signed-off-by: default avatarJeff Dike <jdike@linux.intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent c28b59d4
...@@ -66,12 +66,12 @@ config STATIC_LINK ...@@ -66,12 +66,12 @@ config STATIC_LINK
bool "Force a static link" bool "Force a static link"
default n default n
help help
This option gives you the ability to force a static link of UML. This option gives you the ability to force a static link of UML.
Normally, UML is linked as a shared binary. This is inconvenient for Normally, UML is linked as a shared binary. This is inconvenient for
use in a chroot jail. So, if you intend to run UML inside a chroot, use in a chroot jail. So, if you intend to run UML inside a chroot,
you probably want to say Y here. you probably want to say Y here.
Additionally, this option enables using higher memory spaces (up to Additionally, this option enables using higher memory spaces (up to
2.75G) for UML. 2.75G) for UML.
source "arch/um/Kconfig.arch" source "arch/um/Kconfig.arch"
source "mm/Kconfig" source "mm/Kconfig"
...@@ -89,18 +89,18 @@ config LD_SCRIPT_DYN ...@@ -89,18 +89,18 @@ config LD_SCRIPT_DYN
config NET config NET
bool "Networking support" bool "Networking support"
help help
Unless you really know what you are doing, you should say Y here. Unless you really know what you are doing, you should say Y here.
The reason is that some programs need kernel networking support even The reason is that some programs need kernel networking support even
when running on a stand-alone machine that isn't connected to any when running on a stand-alone machine that isn't connected to any
other computer. If you are upgrading from an older kernel, you other computer. If you are upgrading from an older kernel, you
should consider updating your networking tools too because changes should consider updating your networking tools too because changes
in the kernel and the tools often go hand in hand. The tools are in the kernel and the tools often go hand in hand. The tools are
contained in the package net-tools, the location and version number contained in the package net-tools, the location and version number
of which are given in <file:Documentation/Changes>. of which are given in <file:Documentation/Changes>.
For a general introduction to Linux networking, it is highly For a general introduction to Linux networking, it is highly
recommended to read the NET-HOWTO, available from recommended to read the NET-HOWTO, available from
<http://www.tldp.org/docs.html#howto>. <http://www.tldp.org/docs.html#howto>.
source "fs/Kconfig.binfmt" source "fs/Kconfig.binfmt"
...@@ -108,74 +108,74 @@ source "fs/Kconfig.binfmt" ...@@ -108,74 +108,74 @@ source "fs/Kconfig.binfmt"
config HOSTFS config HOSTFS
tristate "Host filesystem" tristate "Host filesystem"
help help
While the User-Mode Linux port uses its own root file system for While the User-Mode Linux port uses its own root file system for
booting and normal file access, this module lets the UML user booting and normal file access, this module lets the UML user
access files stored on the host. It does not require any access files stored on the host. It does not require any
network connection between the Host and UML. An example use of network connection between the Host and UML. An example use of
this might be: this might be:
mount none /tmp/fromhost -t hostfs -o /tmp/umlshare mount none /tmp/fromhost -t hostfs -o /tmp/umlshare
where /tmp/fromhost is an empty directory inside UML and where /tmp/fromhost is an empty directory inside UML and
/tmp/umlshare is a directory on the host with files the UML user /tmp/umlshare is a directory on the host with files the UML user
wishes to access. wishes to access.
For more information, see For more information, see
<http://user-mode-linux.sourceforge.net/hostfs.html>. <http://user-mode-linux.sourceforge.net/hostfs.html>.
If you'd like to be able to work with files stored on the host, If you'd like to be able to work with files stored on the host,
say Y or M here; otherwise say N. say Y or M here; otherwise say N.
config HPPFS config HPPFS
tristate "HoneyPot ProcFS (EXPERIMENTAL)" tristate "HoneyPot ProcFS (EXPERIMENTAL)"
depends on EXPERIMENTAL depends on EXPERIMENTAL
help help
hppfs (HoneyPot ProcFS) is a filesystem which allows UML /proc hppfs (HoneyPot ProcFS) is a filesystem which allows UML /proc
entries to be overridden, removed, or fabricated from the host. entries to be overridden, removed, or fabricated from the host.
Its purpose is to allow a UML to appear to be a physical machine Its purpose is to allow a UML to appear to be a physical machine
by removing or changing anything in /proc which gives away the by removing or changing anything in /proc which gives away the
identity of a UML. identity of a UML.
See <http://user-mode-linux.sf.net/hppfs.html> for more information. See <http://user-mode-linux.sf.net/hppfs.html> for more information.
You only need this if you are setting up a UML honeypot. Otherwise, You only need this if you are setting up a UML honeypot. Otherwise,
it is safe to say 'N' here. it is safe to say 'N' here.
config MCONSOLE config MCONSOLE
bool "Management console" bool "Management console"
default y default y
help help
The user mode linux management console is a low-level interface to The user mode linux management console is a low-level interface to
the kernel, somewhat like the i386 SysRq interface. Since there is the kernel, somewhat like the i386 SysRq interface. Since there is
a full-blown operating system running under every user mode linux a full-blown operating system running under every user mode linux
instance, there is much greater flexibility possible than with the instance, there is much greater flexibility possible than with the
SysRq mechanism. SysRq mechanism.
If you answer 'Y' to this option, to use this feature, you need the If you answer 'Y' to this option, to use this feature, you need the
mconsole client (called uml_mconsole) which is present in CVS in mconsole client (called uml_mconsole) which is present in CVS in
2.4.5-9um and later (path /tools/mconsole), and is also in the 2.4.5-9um and later (path /tools/mconsole), and is also in the
distribution RPM package in 2.4.6 and later. distribution RPM package in 2.4.6 and later.
It is safe to say 'Y' here. It is safe to say 'Y' here.
config MAGIC_SYSRQ config MAGIC_SYSRQ
bool "Magic SysRq key" bool "Magic SysRq key"
depends on MCONSOLE depends on MCONSOLE
---help--- help
If you say Y here, you will have some control over the system even If you say Y here, you will have some control over the system even
if the system crashes for example during kernel debugging (e.g., you if the system crashes for example during kernel debugging (e.g., you
will be able to flush the buffer cache to disk, reboot the system will be able to flush the buffer cache to disk, reboot the system
immediately or dump some status information). A key for each of the immediately or dump some status information). A key for each of the
possible requests is provided. possible requests is provided.
This is the feature normally accomplished by pressing a key This is the feature normally accomplished by pressing a key
while holding SysRq (Alt+PrintScreen). while holding SysRq (Alt+PrintScreen).
On UML, this is accomplished by sending a "sysrq" command with On UML, this is accomplished by sending a "sysrq" command with
mconsole, followed by the letter for the requested command. mconsole, followed by the letter for the requested command.
The keys are documented in <file:Documentation/sysrq.txt>. Don't say Y The keys are documented in <file:Documentation/sysrq.txt>. Don't say Y
unless you really know what this hack does. unless you really know what this hack does.
config SMP config SMP
bool "Symmetric multi-processing support (EXPERIMENTAL)" bool "Symmetric multi-processing support (EXPERIMENTAL)"
...@@ -183,24 +183,24 @@ config SMP ...@@ -183,24 +183,24 @@ config SMP
#SMP_BROKEN is for x86_64. #SMP_BROKEN is for x86_64.
depends on EXPERIMENTAL && (!SMP_BROKEN || (BROKEN && SMP_BROKEN)) depends on EXPERIMENTAL && (!SMP_BROKEN || (BROKEN && SMP_BROKEN))
help help
This option enables UML SMP support. This option enables UML SMP support.
It is NOT related to having a real SMP box. Not directly, at least. It is NOT related to having a real SMP box. Not directly, at least.
UML implements virtual SMP by allowing as many processes to run UML implements virtual SMP by allowing as many processes to run
simultaneously on the host as there are virtual processors configured. simultaneously on the host as there are virtual processors configured.
Obviously, if the host is a uniprocessor, those processes will Obviously, if the host is a uniprocessor, those processes will
timeshare, but, inside UML, will appear to be running simultaneously. timeshare, but, inside UML, will appear to be running simultaneously.
If the host is a multiprocessor, then UML processes may run If the host is a multiprocessor, then UML processes may run
simultaneously, depending on the host scheduler. simultaneously, depending on the host scheduler.
This, however, is supported only in TT mode. So, if you use the SKAS This, however, is supported only in TT mode. So, if you use the SKAS
patch on your host, switching to TT mode and enabling SMP usually gives patch on your host, switching to TT mode and enabling SMP usually
you worse performances. gives you worse performances.
Also, since the support for SMP has been under-developed, there could Also, since the support for SMP has been under-developed, there could
be some bugs being exposed by enabling SMP. be some bugs being exposed by enabling SMP.
If you don't know what to do, say N. If you don't know what to do, say N.
config NR_CPUS config NR_CPUS
int "Maximum number of CPUs (2-32)" int "Maximum number of CPUs (2-32)"
...@@ -212,24 +212,24 @@ config NEST_LEVEL ...@@ -212,24 +212,24 @@ config NEST_LEVEL
int "Nesting level" int "Nesting level"
default "0" default "0"
help help
This is set to the number of layers of UMLs that this UML will be run This is set to the number of layers of UMLs that this UML will be run
in. Normally, this is zero, meaning that it will run directly on the in. Normally, this is zero, meaning that it will run directly on the
host. Setting it to one will build a UML that can run inside a UML host. Setting it to one will build a UML that can run inside a UML
that is running on the host. Generally, if you intend this UML to run that is running on the host. Generally, if you intend this UML to run
inside another UML, set CONFIG_NEST_LEVEL to one more than the host inside another UML, set CONFIG_NEST_LEVEL to one more than the host
UML. UML.
config HIGHMEM config HIGHMEM
bool "Highmem support (EXPERIMENTAL)" bool "Highmem support (EXPERIMENTAL)"
depends on !64BIT && EXPERIMENTAL depends on !64BIT && EXPERIMENTAL
default n default n
help help
This was used to allow UML to run with big amounts of memory. This was used to allow UML to run with big amounts of memory.
Currently it is unstable, so if unsure say N. Currently it is unstable, so if unsure say N.
To use big amounts of memory, it is recommended enable static To use big amounts of memory, it is recommended enable static
linking (i.e. CONFIG_STATIC_LINK) - this should allow the linking (i.e. CONFIG_STATIC_LINK) - this should allow the
guest to use up to 2.75G of memory. guest to use up to 2.75G of memory.
config KERNEL_STACK_ORDER config KERNEL_STACK_ORDER
int "Kernel stack size order" int "Kernel stack size order"
...@@ -237,20 +237,21 @@ config KERNEL_STACK_ORDER ...@@ -237,20 +237,21 @@ config KERNEL_STACK_ORDER
range 1 10 if 64BIT range 1 10 if 64BIT
default 0 if !64BIT default 0 if !64BIT
help help
This option determines the size of UML kernel stacks. They will This option determines the size of UML kernel stacks. They will
be 1 << order pages. The default is OK unless you're running Valgrind be 1 << order pages. The default is OK unless you're running Valgrind
on UML, in which case, set this to 3. on UML, in which case, set this to 3.
config UML_REAL_TIME_CLOCK config UML_REAL_TIME_CLOCK
bool "Real-time Clock" bool "Real-time Clock"
default y default y
help help
This option makes UML time deltas match wall clock deltas. This should This option makes UML time deltas match wall clock deltas. This
normally be enabled. The exception would be if you are debugging with should normally be enabled. The exception would be if you are
UML and spend long times with UML stopped at a breakpoint. In this debugging with UML and spend long times with UML stopped at a
case, when UML is restarted, it will call the timer enough times to make breakpoint. In this case, when UML is restarted, it will call the
up for the time spent at the breakpoint. This could result in a timer enough times to make up for the time spent at the breakpoint.
noticeable lag. If this is a problem, then disable this option. This could result in a noticeable lag. If this is a problem, then
disable this option.
endmenu endmenu
......
...@@ -5,7 +5,7 @@ config STDERR_CONSOLE ...@@ -5,7 +5,7 @@ config STDERR_CONSOLE
bool "stderr console" bool "stderr console"
default y default y
help help
console driver which dumps all printk messages to stderr. console driver which dumps all printk messages to stderr.
config STDIO_CONSOLE config STDIO_CONSOLE
bool bool
...@@ -14,58 +14,58 @@ config STDIO_CONSOLE ...@@ -14,58 +14,58 @@ config STDIO_CONSOLE
config SSL config SSL
bool "Virtual serial line" bool "Virtual serial line"
help help
The User-Mode Linux environment allows you to create virtual serial The User-Mode Linux environment allows you to create virtual serial
lines on the UML that are usually made to show up on the host as lines on the UML that are usually made to show up on the host as
ttys or ptys. ttys or ptys.
See <http://user-mode-linux.sourceforge.net/input.html> for more See <http://user-mode-linux.sourceforge.net/input.html> for more
information and command line examples of how to use this facility. information and command line examples of how to use this facility.
Unless you have a specific reason for disabling this, say Y. Unless you have a specific reason for disabling this, say Y.
config NULL_CHAN config NULL_CHAN
bool "null channel support" bool "null channel support"
help help
This option enables support for attaching UML consoles and serial This option enables support for attaching UML consoles and serial
lines to a device similar to /dev/null. Data written to it disappears lines to a device similar to /dev/null. Data written to it disappears
and there is never any data to be read. and there is never any data to be read.
config PORT_CHAN config PORT_CHAN
bool "port channel support" bool "port channel support"
help help
This option enables support for attaching UML consoles and serial This option enables support for attaching UML consoles and serial
lines to host portals. They may be accessed with 'telnet <host> lines to host portals. They may be accessed with 'telnet <host>
<port number>'. Any number of consoles and serial lines may be <port number>'. Any number of consoles and serial lines may be
attached to a single portal, although what UML device you get when attached to a single portal, although what UML device you get when
you telnet to that portal will be unpredictable. you telnet to that portal will be unpredictable.
It is safe to say 'Y' here. It is safe to say 'Y' here.
config PTY_CHAN config PTY_CHAN
bool "pty channel support" bool "pty channel support"
help help
This option enables support for attaching UML consoles and serial This option enables support for attaching UML consoles and serial
lines to host pseudo-terminals. Access to both traditional lines to host pseudo-terminals. Access to both traditional
pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled
with this option. The assignment of UML devices to host devices with this option. The assignment of UML devices to host devices
will be announced in the kernel message log. will be announced in the kernel message log.
It is safe to say 'Y' here. It is safe to say 'Y' here.
config TTY_CHAN config TTY_CHAN
bool "tty channel support" bool "tty channel support"
help help
This option enables support for attaching UML consoles and serial This option enables support for attaching UML consoles and serial
lines to host terminals. Access to both virtual consoles lines to host terminals. Access to both virtual consoles
(/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and (/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and
/dev/pts/*) are controlled by this option. /dev/pts/*) are controlled by this option.
It is safe to say 'Y' here. It is safe to say 'Y' here.
config XTERM_CHAN config XTERM_CHAN
bool "xterm channel support" bool "xterm channel support"
help help
This option enables support for attaching UML consoles and serial This option enables support for attaching UML consoles and serial
lines to xterms. Each UML device so assigned will be brought up in lines to xterms. Each UML device so assigned will be brought up in
its own xterm. its own xterm.
It is safe to say 'Y' here. It is safe to say 'Y' here.
config NOCONFIG_CHAN config NOCONFIG_CHAN
bool bool
...@@ -75,39 +75,39 @@ config CON_ZERO_CHAN ...@@ -75,39 +75,39 @@ config CON_ZERO_CHAN
string "Default main console channel initialization" string "Default main console channel initialization"
default "fd:0,fd:1" default "fd:0,fd:1"
help help
This is the string describing the channel to which the main console This is the string describing the channel to which the main console
will be attached by default. This value can be overridden from the will be attached by default. This value can be overridden from the
command line. The default value is "fd:0,fd:1", which attaches the command line. The default value is "fd:0,fd:1", which attaches the
main console to stdin and stdout. main console to stdin and stdout.
It is safe to leave this unchanged. It is safe to leave this unchanged.
config CON_CHAN config CON_CHAN
string "Default console channel initialization" string "Default console channel initialization"
default "xterm" default "xterm"
help help
This is the string describing the channel to which all consoles This is the string describing the channel to which all consoles
except the main console will be attached by default. This value can except the main console will be attached by default. This value can
be overridden from the command line. The default value is "xterm", be overridden from the command line. The default value is "xterm",
which brings them up in xterms. which brings them up in xterms.
It is safe to leave this unchanged, although you may wish to change It is safe to leave this unchanged, although you may wish to change
this if you expect the UML that you build to be run in environments this if you expect the UML that you build to be run in environments
which don't have X or xterm available. which don't have X or xterm available.
config SSL_CHAN config SSL_CHAN
string "Default serial line channel initialization" string "Default serial line channel initialization"
default "pty" default "pty"
help help
This is the string describing the channel to which the serial lines This is the string describing the channel to which the serial lines
will be attached by default. This value can be overridden from the will be attached by default. This value can be overridden from the
command line. The default value is "pty", which attaches them to command line. The default value is "pty", which attaches them to
traditional pseudo-terminals. traditional pseudo-terminals.
It is safe to leave this unchanged, although you may wish to change It is safe to leave this unchanged, although you may wish to change
this if you expect the UML that you build to be run in environments this if you expect the UML that you build to be run in environments
which don't have a set of /dev/pty* devices. which don't have a set of /dev/pty* devices.
config UNIX98_PTYS config UNIX98_PTYS
bool "Unix98 PTY support" bool "Unix98 PTY support"
---help--- help
A pseudo terminal (PTY) is a software device consisting of two A pseudo terminal (PTY) is a software device consisting of two
halves: a master and a slave. The slave device behaves identical to halves: a master and a slave. The slave device behaves identical to
a physical terminal; the master device is used by a process to a physical terminal; the master device is used by a process to
...@@ -130,7 +130,7 @@ config UNIX98_PTYS ...@@ -130,7 +130,7 @@ config UNIX98_PTYS
config LEGACY_PTYS config LEGACY_PTYS
bool "Legacy (BSD) PTY support" bool "Legacy (BSD) PTY support"
default y default y
---help--- help
A pseudo terminal (PTY) is a software device consisting of two A pseudo terminal (PTY) is a software device consisting of two
halves: a master and a slave. The slave device behaves identical to halves: a master and a slave. The slave device behaves identical to
a physical terminal; the master device is used by a process to a physical terminal; the master device is used by a process to
...@@ -168,7 +168,7 @@ config LEGACY_PTY_COUNT ...@@ -168,7 +168,7 @@ config LEGACY_PTY_COUNT
int "Maximum number of legacy PTY in use" int "Maximum number of legacy PTY in use"
depends on LEGACY_PTYS depends on LEGACY_PTYS
default "256" default "256"
---help--- help
The maximum number of legacy PTYs that can be used at any one time. The maximum number of legacy PTYs that can be used at any one time.
The default is 256, and should be more than enough. Embedded The default is 256, and should be more than enough. Embedded
systems may want to reduce this to save memory. systems may want to reduce this to save memory.
...@@ -194,10 +194,10 @@ config UML_WATCHDOG ...@@ -194,10 +194,10 @@ config UML_WATCHDOG
config UML_SOUND config UML_SOUND
tristate "Sound support" tristate "Sound support"
help help
This option enables UML sound support. If enabled, it will pull in This option enables UML sound support. If enabled, it will pull in
soundcore and the UML hostaudio relay, which acts as a intermediary soundcore and the UML hostaudio relay, which acts as a intermediary
between the host's dsp and mixer devices and the UML sound system. between the host's dsp and mixer devices and the UML sound system.
It is safe to say 'Y' here. It is safe to say 'Y' here.
config SOUND config SOUND
tristate tristate
...@@ -215,22 +215,21 @@ config HW_RANDOM ...@@ -215,22 +215,21 @@ config HW_RANDOM
config UML_RANDOM config UML_RANDOM
tristate "Hardware random number generator" tristate "Hardware random number generator"
help help
This option enables UML's "hardware" random number generator. It This option enables UML's "hardware" random number generator. It
attaches itself to the host's /dev/random, supplying as much entropy attaches itself to the host's /dev/random, supplying as much entropy
as the host has, rather than the small amount the UML gets from its as the host has, rather than the small amount the UML gets from its
own drivers. It registers itself as a standard hardware random number own drivers. It registers itself as a standard hardware random number
generator, major 10, minor 183, and the canonical device name is generator, major 10, minor 183, and the canonical device name is
/dev/hwrng. /dev/hwrng.
The way to make use of this is to install the rng-tools package The way to make use of this is to install the rng-tools package
(check your distro, or download from (check your distro, or download from
http://sourceforge.net/projects/gkernel/). rngd periodically reads http://sourceforge.net/projects/gkernel/). rngd periodically reads
/dev/hwrng and injects the entropy into /dev/random. /dev/hwrng and injects the entropy into /dev/random.
config MMAPPER config MMAPPER
tristate "iomem emulation driver" tristate "iomem emulation driver"
help help
This driver allows a host file to be used as emulated IO memory inside This driver allows a host file to be used as emulated IO memory inside
UML. UML.
endmenu endmenu
...@@ -6,27 +6,27 @@ config GPROF ...@@ -6,27 +6,27 @@ config GPROF
bool "Enable gprof support" bool "Enable gprof support"
depends on DEBUG_INFO depends on DEBUG_INFO
help help
This allows profiling of a User-Mode Linux kernel with the gprof This allows profiling of a User-Mode Linux kernel with the gprof
utility. utility.
See <http://user-mode-linux.sourceforge.net/gprof.html> for more See <http://user-mode-linux.sourceforge.net/gprof.html> for more
details. details.
If you're involved in UML kernel development and want to use gprof, If you're involved in UML kernel development and want to use gprof,
say Y. If you're unsure, say N. say Y. If you're unsure, say N.
config GCOV config GCOV
bool "Enable gcov support" bool "Enable gcov support"
depends on DEBUG_INFO depends on DEBUG_INFO
help help
This option allows developers to retrieve coverage data from a UML This option allows developers to retrieve coverage data from a UML
session. session.
See <http://user-mode-linux.sourceforge.net/gprof.html> for more See <http://user-mode-linux.sourceforge.net/gprof.html> for more
details. details.
If you're involved in UML kernel development and want to use gcov, If you're involved in UML kernel development and want to use gcov,
say Y. If you're unsure, say N. say Y. If you're unsure, say N.
config DEBUG_STACK_USAGE config DEBUG_STACK_USAGE
bool "Stack utilization instrumentation" bool "Stack utilization instrumentation"
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# This file is included by the global makefile so that you can add your own # This file is included by the global makefile so that you can add your own
# architecture-specific flags and dependencies. # architecture-specific flags and dependencies.
# #
# Copyright (C) 2002 Jeff Dike (jdike@karaya.com) # Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
# Licensed under the GPL # Licensed under the GPL
# #
...@@ -124,7 +124,7 @@ endif ...@@ -124,7 +124,7 @@ endif
CPPFLAGS_vmlinux.lds = -U$(SUBARCH) -DSTART=$(START) -DELF_ARCH=$(ELF_ARCH) \ CPPFLAGS_vmlinux.lds = -U$(SUBARCH) -DSTART=$(START) -DELF_ARCH=$(ELF_ARCH) \
-DELF_FORMAT="$(ELF_FORMAT)" -DKERNEL_STACK_SIZE=$(STACK_SIZE) -DELF_FORMAT="$(ELF_FORMAT)" -DKERNEL_STACK_SIZE=$(STACK_SIZE)
#The wrappers will select whether using "malloc" or the kernel allocator. # The wrappers will select whether using "malloc" or the kernel allocator.
LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc
CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS)
...@@ -137,8 +137,8 @@ define cmd_vmlinux__ ...@@ -137,8 +137,8 @@ define cmd_vmlinux__
FORCE ,$^) ; rm -f linux FORCE ,$^) ; rm -f linux
endef endef
#When cleaning we don't include .config, so we don't include # When cleaning we don't include .config, so we don't include
#TT or skas makefiles and don't clean skas_ptregs.h. # TT or skas makefiles and don't clean skas_ptregs.h.
CLEAN_FILES += linux x.i gmon.out $(ARCH_DIR)/include/uml-config.h \ CLEAN_FILES += linux x.i gmon.out $(ARCH_DIR)/include/uml-config.h \
$(ARCH_DIR)/include/user_constants.h \ $(ARCH_DIR)/include/user_constants.h \
$(ARCH_DIR)/include/kern_constants.h $(ARCH_DIR)/Kconfig.arch $(ARCH_DIR)/include/kern_constants.h $(ARCH_DIR)/Kconfig.arch
......
/* /*
* Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com) * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
...@@ -37,13 +37,3 @@ extern unsigned long *sc_sigmask(void *sc_ptr); ...@@ -37,13 +37,3 @@ extern unsigned long *sc_sigmask(void *sc_ptr);
extern int sc_get_fpregs(unsigned long buf, void *sc_ptr); extern int sc_get_fpregs(unsigned long buf, void *sc_ptr);
#endif #endif
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
* adjust the settings for this buffer only. This must remain at the end
* of the file.
* ---------------------------------------------------------------------------
* Local variables:
* c-file-style: "linux"
* End:
*/
# #
# Copyright (C) 2002 Jeff Dike (jdike@karaya.com) # Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux,intel}.com)
# Licensed under the GPL # Licensed under the GPL
# #
......
...@@ -3,16 +3,12 @@ ...@@ -3,16 +3,12 @@
* Licensed under the GPL * Licensed under the GPL
*/ */
#include "linux/mm.h"
#include "linux/fs.h"
#include "linux/module.h"
#include "linux/sched.h" #include "linux/sched.h"
#include "linux/init_task.h" #include "linux/init_task.h"
#include "linux/fs.h"
#include "linux/module.h"
#include "linux/mqueue.h" #include "linux/mqueue.h"
#include "asm/uaccess.h" #include "asm/uaccess.h"
#include "asm/pgtable.h"
#include "mem_user.h"
#include "os.h"
static struct fs_struct init_fs = INIT_FS; static struct fs_struct init_fs = INIT_FS;
struct mm_struct init_mm = INIT_MM(init_mm); struct mm_struct init_mm = INIT_MM(init_mm);
......
/* /*
* Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com) * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
...@@ -56,12 +56,12 @@ void smp_send_stop(void) ...@@ -56,12 +56,12 @@ void smp_send_stop(void)
int i; int i;
printk(KERN_INFO "Stopping all CPUs..."); printk(KERN_INFO "Stopping all CPUs...");
for(i = 0; i < num_online_cpus(); i++){ for (i = 0; i < num_online_cpus(); i++) {
if(i == current_thread->cpu) if (i == current_thread->cpu)
continue; continue;
os_write_file(cpu_data[i].ipi_pipe[1], "S", 1); os_write_file(cpu_data[i].ipi_pipe[1], "S", 1);
} }
printk("done\n"); printk(KERN_INFO "done\n");
} }
static cpumask_t smp_commenced_mask = CPU_MASK_NONE; static cpumask_t smp_commenced_mask = CPU_MASK_NONE;
...@@ -72,7 +72,7 @@ static int idle_proc(void *cpup) ...@@ -72,7 +72,7 @@ static int idle_proc(void *cpup)
int cpu = (int) cpup, err; int cpu = (int) cpup, err;
err = os_pipe(cpu_data[cpu].ipi_pipe, 1, 1); err = os_pipe(cpu_data[cpu].ipi_pipe, 1, 1);
if(err < 0) if (err < 0)
panic("CPU#%d failed to create IPI pipe, err = %d", cpu, -err); panic("CPU#%d failed to create IPI pipe, err = %d", cpu, -err);
os_set_fd_async(cpu_data[cpu].ipi_pipe[0], os_set_fd_async(cpu_data[cpu].ipi_pipe[0],
...@@ -80,7 +80,7 @@ static int idle_proc(void *cpup) ...@@ -80,7 +80,7 @@ static int idle_proc(void *cpup)
wmb(); wmb();
if (cpu_test_and_set(cpu, cpu_callin_map)) { if (cpu_test_and_set(cpu, cpu_callin_map)) {
printk("huh, CPU#%d already present??\n", cpu); printk(KERN_ERR "huh, CPU#%d already present??\n", cpu);
BUG(); BUG();
} }
...@@ -99,7 +99,7 @@ static struct task_struct *idle_thread(int cpu) ...@@ -99,7 +99,7 @@ static struct task_struct *idle_thread(int cpu)
current->thread.request.u.thread.proc = idle_proc; current->thread.request.u.thread.proc = idle_proc;
current->thread.request.u.thread.arg = (void *) cpu; current->thread.request.u.thread.arg = (void *) cpu;
new_task = fork_idle(cpu); new_task = fork_idle(cpu);
if(IS_ERR(new_task)) if (IS_ERR(new_task))
panic("copy_process failed in idle_thread, error = %ld", panic("copy_process failed in idle_thread, error = %ld",
PTR_ERR(new_task)); PTR_ERR(new_task));
...@@ -126,14 +126,14 @@ void smp_prepare_cpus(unsigned int maxcpus) ...@@ -126,14 +126,14 @@ void smp_prepare_cpus(unsigned int maxcpus)
cpu_set(me, cpu_callin_map); cpu_set(me, cpu_callin_map);
err = os_pipe(cpu_data[me].ipi_pipe, 1, 1); err = os_pipe(cpu_data[me].ipi_pipe, 1, 1);
if(err < 0) if (err < 0)
panic("CPU#0 failed to create IPI pipe, errno = %d", -err); panic("CPU#0 failed to create IPI pipe, errno = %d", -err);
os_set_fd_async(cpu_data[me].ipi_pipe[0], os_set_fd_async(cpu_data[me].ipi_pipe[0],
current->thread.mode.tt.extern_pid); current->thread.mode.tt.extern_pid);
for(cpu = 1; cpu < ncpus; cpu++){ for (cpu = 1; cpu < ncpus; cpu++) {
printk("Booting processor %d...\n", cpu); printk(KERN_INFO "Booting processor %d...\n", cpu);
idle = idle_thread(cpu); idle = idle_thread(cpu);
...@@ -144,8 +144,8 @@ void smp_prepare_cpus(unsigned int maxcpus) ...@@ -144,8 +144,8 @@ void smp_prepare_cpus(unsigned int maxcpus)
cpu_relax(); cpu_relax();
if (cpu_isset(cpu, cpu_callin_map)) if (cpu_isset(cpu, cpu_callin_map))
printk("done\n"); printk(KERN_INFO "done\n");
else printk("failed\n"); else printk(KERN_INFO "failed\n");
} }
} }
...@@ -187,13 +187,14 @@ void IPI_handler(int cpu) ...@@ -187,13 +187,14 @@ void IPI_handler(int cpu)
break; break;
case 'S': case 'S':
printk("CPU#%d stopping\n", cpu); printk(KERN_INFO "CPU#%d stopping\n", cpu);
while(1) while (1)
pause(); pause();
break; break;
default: default:
printk("CPU#%d received unknown IPI [%c]!\n", cpu, c); printk(KERN_ERR "CPU#%d received unknown IPI [%c]!\n",
cpu, c);
break; break;
} }
} }
......
/* /*
* Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com) * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
#include "linux/kernel.h" #include <linux/mm.h>
#include "asm/errno.h" #include <linux/sched.h>
#include "linux/sched.h" #include <linux/hardirq.h>
#include "linux/mm.h" #include <asm/current.h>
#include "linux/spinlock.h" #include <asm/pgtable.h>
#include "linux/init.h" #include <asm/tlbflush.h>
#include "linux/ptrace.h"
#include "asm/semaphore.h"
#include "asm/pgtable.h"
#include "asm/pgalloc.h"
#include "asm/tlbflush.h"
#include "asm/a.out.h"
#include "asm/current.h"
#include "asm/irq.h"
#include "sysdep/sigcontext.h"
#include "kern_util.h"
#include "as-layout.h"
#include "arch.h" #include "arch.h"
#include "kern.h" #include "as-layout.h"
#include "chan_kern.h" #include "kern_util.h"
#include "mconsole_kern.h"
#include "mem.h"
#include "mem_kern.h"
#include "sysdep/sigcontext.h"
#include "sysdep/ptrace.h"
#include "os.h"
#include "skas.h"
#include "os.h" #include "os.h"
#include "sysdep/sigcontext.h"
/* Note this is constrained to return 0, -EFAULT, -EACCESS, -ENOMEM by segv(). */ /*
* Note this is constrained to return 0, -EFAULT, -EACCESS, -ENOMEM by
* segv().
*/
int handle_page_fault(unsigned long address, unsigned long ip, int handle_page_fault(unsigned long address, unsigned long ip,
int is_write, int is_user, int *code_out) int is_write, int is_user, int *code_out)
{ {
...@@ -46,31 +32,33 @@ int handle_page_fault(unsigned long address, unsigned long ip, ...@@ -46,31 +32,33 @@ int handle_page_fault(unsigned long address, unsigned long ip,
*code_out = SEGV_MAPERR; *code_out = SEGV_MAPERR;
/* If the fault was during atomic operation, don't take the fault, just /*
* fail. */ * If the fault was during atomic operation, don't take the fault, just
* fail.
*/
if (in_atomic()) if (in_atomic())
goto out_nosemaphore; goto out_nosemaphore;
down_read(&mm->mmap_sem); down_read(&mm->mmap_sem);
vma = find_vma(mm, address); vma = find_vma(mm, address);
if(!vma) if (!vma)
goto out; goto out;
else if(vma->vm_start <= address) else if (vma->vm_start <= address)
goto good_area; goto good_area;
else if(!(vma->vm_flags & VM_GROWSDOWN)) else if (!(vma->vm_flags & VM_GROWSDOWN))
goto out; goto out;
else if(is_user && !ARCH_IS_STACKGROW(address)) else if (is_user && !ARCH_IS_STACKGROW(address))
goto out; goto out;
else if(expand_stack(vma, address)) else if (expand_stack(vma, address))
goto out; goto out;
good_area: good_area:
*code_out = SEGV_ACCERR; *code_out = SEGV_ACCERR;
if(is_write && !(vma->vm_flags & VM_WRITE)) if (is_write && !(vma->vm_flags & VM_WRITE))
goto out; goto out;
/* Don't require VM_READ|VM_EXEC for write faults! */ /* Don't require VM_READ|VM_EXEC for write faults! */
if(!is_write && !(vma->vm_flags & (VM_READ | VM_EXEC))) if (!is_write && !(vma->vm_flags & (VM_READ | VM_EXEC)))
goto out; goto out;
do { do {
...@@ -96,9 +84,10 @@ int handle_page_fault(unsigned long address, unsigned long ip, ...@@ -96,9 +84,10 @@ int handle_page_fault(unsigned long address, unsigned long ip,
pud = pud_offset(pgd, address); pud = pud_offset(pgd, address);
pmd = pmd_offset(pud, address); pmd = pmd_offset(pud, address);
pte = pte_offset_kernel(pmd, address); pte = pte_offset_kernel(pmd, address);
} while(!pte_present(*pte)); } while (!pte_present(*pte));
err = 0; err = 0;
/* The below warning was added in place of /*
* The below warning was added in place of
* pte_mkyoung(); if (is_write) pte_mkdirty(); * pte_mkyoung(); if (is_write) pte_mkdirty();
* If it's triggered, we'd see normally a hang here (a clean pte is * If it's triggered, we'd see normally a hang here (a clean pte is
* marked read-only to emulate the dirty bit). * marked read-only to emulate the dirty bit).
...@@ -112,7 +101,7 @@ int handle_page_fault(unsigned long address, unsigned long ip, ...@@ -112,7 +101,7 @@ int handle_page_fault(unsigned long address, unsigned long ip,
out: out:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
out_nosemaphore: out_nosemaphore:
return(err); return err;
/* /*
* We ran out of memory, or some other thing happened to us that made * We ran out of memory, or some other thing happened to us that made
...@@ -143,7 +132,7 @@ static void segv_handler(int sig, union uml_pt_regs *regs) ...@@ -143,7 +132,7 @@ static void segv_handler(int sig, union uml_pt_regs *regs)
{ {
struct faultinfo * fi = UPT_FAULTINFO(regs); struct faultinfo * fi = UPT_FAULTINFO(regs);
if(UPT_IS_USER(regs) && !SEGV_IS_FIXABLE(fi)){ if (UPT_IS_USER(regs) && !SEGV_IS_FIXABLE(fi)) {
bad_segv(*fi, UPT_IP(regs)); bad_segv(*fi, UPT_IP(regs));
return; return;
} }
...@@ -165,37 +154,41 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, ...@@ -165,37 +154,41 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user,
int is_write = FAULT_WRITE(fi); int is_write = FAULT_WRITE(fi);
unsigned long address = FAULT_ADDRESS(fi); unsigned long address = FAULT_ADDRESS(fi);
if(!is_user && (address >= start_vm) && (address < end_vm)){ if (!is_user && (address >= start_vm) && (address < end_vm)) {
flush_tlb_kernel_vm(); flush_tlb_kernel_vm();
return 0; return 0;
} }
else if(current->mm == NULL) { else if (current->mm == NULL) {
show_regs(container_of(regs, struct pt_regs, regs)); show_regs(container_of(regs, struct pt_regs, regs));
panic("Segfault with no mm"); panic("Segfault with no mm");
} }
if (SEGV_IS_FIXABLE(&fi) || SEGV_MAYBE_FIXABLE(&fi)) if (SEGV_IS_FIXABLE(&fi) || SEGV_MAYBE_FIXABLE(&fi))
err = handle_page_fault(address, ip, is_write, is_user, &si.si_code); err = handle_page_fault(address, ip, is_write, is_user,
&si.si_code);
else { else {
err = -EFAULT; err = -EFAULT;
/* A thread accessed NULL, we get a fault, but CR2 is invalid. /*
* This code is used in __do_copy_from_user() of TT mode. */ * A thread accessed NULL, we get a fault, but CR2 is invalid.
* This code is used in __do_copy_from_user() of TT mode.
* XXX tt mode is gone, so maybe this isn't needed any more
*/
address = 0; address = 0;
} }
catcher = current->thread.fault_catcher; catcher = current->thread.fault_catcher;
if(!err) if (!err)
return 0; return 0;
else if(catcher != NULL){ else if (catcher != NULL) {
current->thread.fault_addr = (void *) address; current->thread.fault_addr = (void *) address;
do_longjmp(catcher, 1); do_longjmp(catcher, 1);
} }
else if(current->thread.fault_addr != NULL) else if (current->thread.fault_addr != NULL)
panic("fault_addr set but no fault catcher"); panic("fault_addr set but no fault catcher");
else if(!is_user && arch_fixup(ip, regs)) else if (!is_user && arch_fixup(ip, regs))
return 0; return 0;
if(!is_user) { if (!is_user) {
show_regs(container_of(regs, struct pt_regs, regs)); show_regs(container_of(regs, struct pt_regs, regs));
panic("Kernel mode fault at addr 0x%lx, ip 0x%lx", panic("Kernel mode fault at addr 0x%lx, ip 0x%lx",
address, ip); address, ip);
...@@ -209,7 +202,7 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, ...@@ -209,7 +202,7 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user,
current->thread.arch.faultinfo = fi; current->thread.arch.faultinfo = fi;
force_sig_info(SIGBUS, &si, current); force_sig_info(SIGBUS, &si, current);
} else if (err == -ENOMEM) { } else if (err == -ENOMEM) {
printk("VM: killing process %s\n", current->comm); printk(KERN_INFO "VM: killing process %s\n", current->comm);
do_exit(SIGKILL); do_exit(SIGKILL);
} else { } else {
BUG_ON(err != -EFAULT); BUG_ON(err != -EFAULT);
...@@ -223,13 +216,13 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, ...@@ -223,13 +216,13 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user,
void relay_signal(int sig, union uml_pt_regs *regs) void relay_signal(int sig, union uml_pt_regs *regs)
{ {
if(arch_handle_signal(sig, regs)) if (arch_handle_signal(sig, regs))
return; return;
if(!UPT_IS_USER(regs)){ if (!UPT_IS_USER(regs)) {
if(sig == SIGBUS) if (sig == SIGBUS)
printk("Bus error - the host /dev/shm or /tmp mount " printk(KERN_ERR "Bus error - the host /dev/shm or /tmp "
"likely just ran out of space\n"); "mount likely just ran out of space\n");
panic("Kernel mode signal %d", sig); panic("Kernel mode signal %d", sig);
} }
...@@ -239,7 +232,7 @@ void relay_signal(int sig, union uml_pt_regs *regs) ...@@ -239,7 +232,7 @@ void relay_signal(int sig, union uml_pt_regs *regs)
static void bus_handler(int sig, union uml_pt_regs *regs) static void bus_handler(int sig, union uml_pt_regs *regs)
{ {
if(current->thread.fault_catcher != NULL) if (current->thread.fault_catcher != NULL)
do_longjmp(current->thread.fault_catcher, 1); do_longjmp(current->thread.fault_catcher, 1);
else relay_signal(sig, regs); else relay_signal(sig, regs);
} }
......
# #
# Copyright (C) 2000 Jeff Dike (jdike@karaya.com) # Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
# Licensed under the GPL # Licensed under the GPL
# #
......
# #
# Copyright (C) 2000 Jeff Dike (jdike@karaya.com) # Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
# Licensed under the GPL # Licensed under the GPL
# #
......
/* /*
* Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com) * Copyright (C) 2000 - 2007 Jeff Dike (jdike{addtoit,linux.intel}.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
#include <stdio.h> #include <stddef.h>
#include <stdlib.h> #include <errno.h>
#include <unistd.h> #include <signal.h>
#include <time.h> #include <time.h>
#include <sys/time.h> #include <sys/time.h>
#include <signal.h>
#include <errno.h>
#include "kern_util.h" #include "kern_util.h"
#include "user.h"
#include "process.h"
#include "kern_constants.h" #include "kern_constants.h"
#include "os.h" #include "os.h"
#include "uml-config.h" #include "user.h"
int set_interval(int is_virtual) int set_interval(int is_virtual)
{ {
...@@ -24,7 +20,7 @@ int set_interval(int is_virtual) ...@@ -24,7 +20,7 @@ int set_interval(int is_virtual)
struct itimerval interval = ((struct itimerval) { { 0, usec }, struct itimerval interval = ((struct itimerval) { { 0, usec },
{ 0, usec } }); { 0, usec } });
if(setitimer(timer_type, &interval, NULL) == -1) if (setitimer(timer_type, &interval, NULL) == -1)
return -errno; return -errno;
return 0; return 0;
...@@ -33,10 +29,12 @@ int set_interval(int is_virtual) ...@@ -33,10 +29,12 @@ int set_interval(int is_virtual)
void disable_timer(void) void disable_timer(void)
{ {
struct itimerval disable = ((struct itimerval) { { 0, 0 }, { 0, 0 }}); struct itimerval disable = ((struct itimerval) { { 0, 0 }, { 0, 0 }});
if((setitimer(ITIMER_VIRTUAL, &disable, NULL) < 0) ||
(setitimer(ITIMER_REAL, &disable, NULL) < 0)) if ((setitimer(ITIMER_VIRTUAL, &disable, NULL) < 0) ||
printk("disnable_timer - setitimer failed, errno = %d\n", (setitimer(ITIMER_REAL, &disable, NULL) < 0))
errno); printk(UM_KERN_ERR "disable_timer - setitimer failed, "
"errno = %d\n", errno);
/* If there are signals already queued, after unblocking ignore them */ /* If there are signals already queued, after unblocking ignore them */
signal(SIGALRM, SIG_IGN); signal(SIGALRM, SIG_IGN);
signal(SIGVTALRM, SIG_IGN); signal(SIGVTALRM, SIG_IGN);
...@@ -49,7 +47,7 @@ void switch_timers(int to_real) ...@@ -49,7 +47,7 @@ void switch_timers(int to_real)
{ 0, 1000000/hz() }}); { 0, 1000000/hz() }});
int old, new; int old, new;
if(to_real){ if (to_real) {
old = ITIMER_VIRTUAL; old = ITIMER_VIRTUAL;
new = ITIMER_REAL; new = ITIMER_REAL;
} }
...@@ -58,10 +56,10 @@ void switch_timers(int to_real) ...@@ -58,10 +56,10 @@ void switch_timers(int to_real)
new = ITIMER_VIRTUAL; new = ITIMER_VIRTUAL;
} }
if((setitimer(old, &disable, NULL) < 0) || if ((setitimer(old, &disable, NULL) < 0) ||
(setitimer(new, &enable, NULL))) (setitimer(new, &enable, NULL)))
printk("switch_timers - setitimer failed, errno = %d\n", printk(UM_KERN_ERR "switch_timers - setitimer failed, "
errno); "errno = %d\n", errno);
} }
unsigned long long os_nsecs(void) unsigned long long os_nsecs(void)
...@@ -69,7 +67,7 @@ unsigned long long os_nsecs(void) ...@@ -69,7 +67,7 @@ unsigned long long os_nsecs(void)
struct timeval tv; struct timeval tv;
gettimeofday(&tv, NULL); gettimeofday(&tv, NULL);
return((unsigned long long) tv.tv_sec * BILLION + tv.tv_usec * 1000); return (unsigned long long) tv.tv_sec * BILLION + tv.tv_usec * 1000;
} }
void idle_sleep(int secs) void idle_sleep(int secs)
......
#include <errno.h> #include <errno.h>
#include <unistd.h>
#include <sys/ptrace.h> #include <sys/ptrace.h>
#include <sys/syscall.h>
#include <asm/ldt.h>
#include "sysdep/tls.h" #include "sysdep/tls.h"
#include "uml-config.h"
/* TLS support - we basically rely on the host's one.*/ /* TLS support - we basically rely on the host's one.*/
......
#
# Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
#
obj-y = bug.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \ obj-y = bug.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \
ptrace_user.o setjmp.o signal.o sigcontext.o stub.o stub_segv.o \ ptrace_user.o setjmp.o signal.o sigcontext.o stub.o stub_segv.o \
syscalls.o sysrq.o sys_call_table.o tls.o syscalls.o sysrq.o sys_call_table.o tls.o
......
/* /*
* Copyright (C) 2002 Jeff Dike (jdike@karaya.com) * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
#include <stdio.h>
#include <stddef.h>
#include <errno.h> #include <errno.h>
#include <unistd.h> #include <sys/ptrace.h>
#include "ptrace_user.h"
/* Grr, asm/user.h includes asm/ptrace.h, so has to follow ptrace_user.h */
#include <asm/user.h>
#include "kern_util.h"
#include "user.h"
#include "os.h"
#include "uml-config.h"
int ptrace_getregs(long pid, unsigned long *regs_out) int ptrace_getregs(long pid, unsigned long *regs_out)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment