VM above TASK_SIZE is read-only but some areas are mapped on ARM
into the process address space.
Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
* The linker script pie/pie.lds.S is generated from the template
pie/pie.lds.S.in by prepending the output architecture specification.
The output architecture is defined by the variable LDARCH.
* Blobs are generated by objcopy instead of ld because the ARM linker
fails to produce a binary when supplied a script.
(See http://lists.gnu.org/archive/html/bug-binutils/2008-10/msg00091.html).
Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
* The following files goes into the directory arch/x86/include/asm unmodified:
- include/atomic.h,
- include/linkage.h,
- include/memcpy_64.h,
- include/types.h,
- include/bitops.h,
- pie/parasite-head-x86-64.S,
- include/processor-flags.h,
- include/syscall-x86-64.def.
* Changed include directives in the source files that include the headers
listed above.
* Modified build scripts to reflect the source moves.
Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Kernel started with 3.8-rc1 are not report non-existent caps in
/proc/pid/status, so crtools doesn't dump/restore such caps.
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
We should explicitly unlink old /dev/null instance, otherwise
if such device already exist we might hit a problem as
| (00.002984) 7412 fdinfo 0: pos: 0x 0 flags: 100002/0
| (00.003015) Dumping path for 0 fd via self 42 [/dev/null]
| (00.003025) Error (files-reg.c:422): Unaccessible path opened 2049:109720, need 5:10
| (00.003033) Error (cr-dump.c:1565): Dump files (pid: 7412) failed with -1
Reported-by: Alexander Kartashov <alekskartashov@parallels.com>
Tested-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
gcc is executed with the option --coverage.
lcov creates HTML pages containing the source code annotated with
coverage information.
make GCOV=1
make test
make gcov
Look at gcov/html/index.html
v2: declare the weak __gcov_flush
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
I've just got an interesting built problem which I never saw
before (and which I can't reporoduce at moment):
| `.text.unlikely' referenced in section `.text' of parasite.o: defined in discarded section `.text.unlikely' of parasite.o
Including sub-text sections is a good thing anyway.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Make them look like __CR_<smth>_H__ with
sed -e '1,2s/#\(ifndef\|define\) _\?_\?\(CR_\)\?/#\1 __CR_/' -e '1,2s/_H_\?_\?.*$/_H__/'
on every header file.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Currently we have an array for thread_args, but leader's thread_args
is a part of task_args.
Here is two problems. The array has a space for leader's thread args,
but it is unused. Code which fills thread args is duplicated two
times. This patch fixed both problem. It replaces thread_args on a
pointer from task_args and deletes code, which fills leaders
thread_args.
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
It should be bigger than CONFIG_LSM_MMAP_MIN_ADDR.
v2: set a correct value
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Since we supprt FPU c/r now we can run
these tests.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This test loads ymm0/ymm7 registers and check if after
restore the contents is not changed.
The test requires xsave capability to present on the
test system, thus if we figure out that there is no
suitable cpu provided we skip the test.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The test for fpu transition will require to do
a runtime check for the cpu features it's running
on. For this sake we need to use cpuid. Thus make
it more widely available by providing in the general
header.
The code is adopted from the linux kernel code.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Since at moment we stick with sigreturn restore
we need to form a proper FPU frame and set a pointer
to it inside sigreturn frame.
For this sake we read the FPU image and here are two
cases are possible
- no fpu data at all -- nothing to restore, simpliest
case
- xsave frame is present but the host cpu supports only
fxsave instruction: we refuse to continue, since it means
there are no ymm registers on the machine where we're trying
to restore
- fxsave frame is present but the host cpu has xsave feature:
at moment we refuse to continue, requiring complete match
between "checkpoint and restore hosts", but in real we could
extend logic and form complete xsave frame from fxsave and
continue processing
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
For code simplicity we reserve the maximum size which
might be needed to form an FPU frame (ie for both
xsave and fxsave operations).
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The dumping of FPU state is done with help of ptrace
facility. There are two cases which we need to handle
depending on which features are available on host machine
1) The dump via ptrace(PTRACE_GETFPREGS ...)
In this case the kernel will use fxsave approach
inside the kenrel and provides us back the data
encoded in i387_fxsave_struct format.
2) The dump via ptrace(PTRACE_GETREGSET ...)
In this case the kernel will use xsave approach
inside the kernel and provides us back the data
encoded in xsave_struct format.
In any case we decode data and save it in protobuf format.
This is why core.proto file has been extended to keep new
entries.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
And don't forget to undef them once they are not needed.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Actually it was never used, just drop it.
Because of backward compatibility problem we
can't just zap it in protofile.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The cpu we're running on must at least support fxsave feature.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This patch add ability to test /proc/cpuinfo data
we're interested in at the moment.
The code provides the following functionality
- cpu_init, to parse cpuinfo and check if the
host cpu we're running on is suitable enough
for FPU checkpoint/restore. If FPU present then
there must be at least fxsave capability present
- cpu_set_feature/cpu_has_feature helpers which
provides to test certain bits and set them where
needed (we need to set bits when parse cpuinfo)
Note, we reserve space for all cpuinfo bits known
by the kernel at moment, while use only three FPU
related bits for a while. This is done because we might
need to use or find out other features in future.
After all it's just 40 bytes of memory needed to keep
all possible bits.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
We will need these structures for restore FPU
state via sigframe, as as we decode data provided
by ptrace.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Wrong size was used in mapping and unmapping. But since
they are more-less close to each other, nobody noticed it.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Syntax is
crtools exec -t <pid> <syscall_name> [<arguments>]
Two types of arguments are supported -- plain, treated
as number, passed as is to the syscall. Buffer, started
with '&' -- the rest of the string is pushed to the tgt
task's memory and pointer to one is passed as syscall
argument.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The fist part prepares ctl to controll the seized task.
The 2nd one mmaps shareb buffer for data exchange.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This is mostly bugfix and improvements release.
Nonetheless, some new features exists, the most interesting are:
* proper COW mappings handling
* full packet sockets support, thus supporting the tcpdump tool
* the --shell-job option, which makes it possible to dump apps
launched from one shell and restore them in another
Some features are available with the custome kernel, but the good
news is that now _all_ of the patches we need are in one of the
-next trees or in the -mm one, and thus have good chances to get
merged in 3.8 (or soon after it).
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
We need to test every even index (which represents a slave
peer) thus use modulo operation here.
Reported-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>