- 14 Mar, 2017 40 commits
-
-
Kir Kolyshkin authored
There is no need to support all possible architectures for "compel cflags" action. In fact, "compel hgen" can only support the one it was compiled for (with the only exception of 32-bit mode for x86). It looks like if we can use a few #ifdefs, there is no need to specify --arch anymore, let's drop it! Still, for the x86 32-bit mode we need to introduce --compat option. Note that "compel hgen" autodetects 32-bit mode for x86 by looking into ELF header, but in case of "compel clfags" there are no files to look into, so we need this --compat specified explicitly. While at it, - Makefile: define CONFIG_AARCH64 if building for ARM64 - fail to compile on unsupported/unspecified ARCH - make "compel --help" output a bit more compact travis-ci: success for More polishing for compel cli Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
1 Since all the fields are now initialized to zeroes, we can just say ={}; 2 Since this is static, it is initialized to zeroes anyway, but from my POV being explicit about it is better. travis-ci: success for More polishing for compel cli Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
travis-ci: success for More polishing for compel cli Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
I saw this line in the code unsigned long sret = -ENOSYS; and ended up with this patch. Note syscall(2) man page says return value is long -- who am I to disagree? travis-ci: success for More polishing for compel cli Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
1. Remove COMMON_IDIR -- there's no need for it, and it makes the build process look more complicated than it is. 2. Use standard CC and CFLAGS defines (so one can use say make CC=clang) 3. Drop the dependency on COMPEL_LIBRARY, as it's supposed to be an external file/tool. 4. Add -Wall to CFLAGS. 5. Simplify ARCH setting in infect test. 6. Drop ARCH from rsys test, as it's not used there. travis-ci: success for More polishing for compel cli Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
travis-ci: success for More polishing for compel cli Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
I managed to forgot that kernel erases R8...R11 regitster prior returning to userspace from `int 0x80`: https://lkml.org/lkml/2009/10/1/164 That was the reason for hang on gcc v6.1 on Jenkins/elsewhere: https://ci.openvz.org/job/CRIU/job/CRIU-x86_64/branch/criu-dev/ Tested on gcc v6.1 locally, on Travis-CI: https://travis-ci.org/0x7f454c46/criu/builds/183976899 travis-ci: success for pie: fix clobber registers for int 0x80 (rev2) Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Tested-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Resolves merge conflict with commit 71abfb84e158 ("compel: simplify usage wrt ids"). Sets start ip for parasite blob according to app mode: native/compat. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Supported only from v4.9 kernel :) The following commits may be backported if needed: b059a453b ("x86/vdso: Add mremap hook to vm_special_mapping") e38447ee1 ("x86/vdso: Unmap vdso blob on vvar mapping failure") 576ebfefd ("x86/vdso: Replace calculate_addr in map_vdso() with addr") 2eefd8789 ("x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_*") 90954e7b9 ("x86/coredump: Use pr_reg size, rather that TIF_IA32 flag") cc87324b3 ("x86/ptrace: Down with test_thread_flag(TIF_IA32)") 684635105 ("x86/signal: Add SA_{X32,IA32}_ABI sa_flags") ed1e7db33 ("x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi()") The required patches list may be checked also at https://criu.org/Upstream_kernel_commits travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
It's 32-bit syscall and the high-part of address is dropped, so call it only on 32-bit addr. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
As 64-bit parasite is now in 32-bit compat app and 64-bit applications can also have TLS in GDT - simplify and just always dump TLS with 32-bit syscall get_thread_area, it's 3 syscalls more - but that's a low cost for that. Note that entry point for sys_get_thread_area() is only for 32-bits, so we need to call raw int80 here with 32-bit syscall number. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
More reliable way to check support of mapping 32-bit blob. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
We can live here without 32-bit CS - this syscall doesn't depend on descriptor type. No functional changes expected, cleanup. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Parasite is 64-bit and if we want to check if vma is vDSO, we need to link parasite blob with util-vdso-elf32. But luckely, there is no need to do that: mremap() for compat vDSO works only after v4.8 kernel: commit b059a453b1cf ("x86/vdso: Add mremap hook to vm_special_mapping"). And in those kernels "[vdso]" is always reported in /proc/.../maps rightly - so no need to check that. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
No need to fill symtab at restorer - previous commit add vdso filling at startup: on vdso_init(). Now it's possible just to use the symtab and sizes if we need them. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Adds a helper to parse compatible vdso blob at time of vdso_init(). The following patches will remove parsing vdso in restorer. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
The next patch will remove filling in restorer rt symtable for compat tasks. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
I'll need to validate compat vdso/vvar positioning in the same way. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
We need to know compatible vdso/vvar sizes, so add pid argument to parse another process - it's needed to fork(), remap vdso and parse child's vdso/vvar in CRIU. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
On first versions of x86 compat patches it returned 0 or err. In merged version it returns error < 0 or vDSO blob's size. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Oh, thanks god - those silly crippy macro are gone! The best part of removing second parasite, I think. This is partial revert to commit 8c3b3bc2efa0 ("parasite-syscall: deserialize compat parasite's answers"). travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Parasite transfers pages in the same iovec format now: drop compatible format (yay!). travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Let's try having one with two entries/exits. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
No need in two libraries if we have only one parasite blob. With left hand I write code - with right I erase it. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
As we have only one pie lib - no need to name it {native,compat}. The next patch cleans Makefile. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
It's needed for ELF magic, not for platform. Will help to simplify Makefile.library (the very next patch). travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
To drop the second parasite blob, create another entry in 64-bit parasite. Didn't remove parasite-head-compat.S - it we gonna support native 32-bit buids, we gonna need it. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
I'll need them in parasite head and in exit. travis-ci: success for Rectify 32-bit compatible C/R on x86 Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
Now, when many useless options were dropped, it's easy to provide a complete description of CLI in usage(). Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
After seeing a bunch of silent build failures, like this: > GEN criu/pie/parasite-native-blob.h > criu/pie/Makefile:121: recipe for target 'criu/pie/parasite-native-blob.h' failed I finally took a look at why are they silent, only to discover that compel prints errors to stdout, and of course its stdout is silenced in criu/pie/Makefile (unless you run make with V=1, in which case it prints tons and tons of very useful information). I am so shocked by this evil plan! Anyway, let's print errors to stderr like all sane programs do. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
I am not quite sure how that happened, but compel hgen was not used for ARM/ARM64, instead there's a simple version of it, called gen-offsets.sh. The main difference is, shell script doesn't handle ELF relocations, which apparently is not (currently?) needed for ARM. It's bad to maintain two tools for the same functionality, so this patch kills gen-offsets.sh and related stuff, making compel hgen working on ARM. ELF relocations are still not handled, this code is #ifdef-ed out for now and can be fixed to work on ARM later. This patch also kills some macros and defines that seem obsoleted now. For example, compel_relocs_apply() is now called unconditionally, as it handles the trivial case of 0 relocs just fine. Now, I checked that the blob headers generated by compel hgen and gen-offsets.h are similar (i.e. generated blob code and values defined are the same), but haven't done much above that. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
This -u option always looked wrong to me, I mean, how the hell a user is supposed to know where the hell those headers are? It took quite a while to figure out what to do with it, but the end result is -- this option is not needed at all and can easily be dropped. For finding paths to includes, there is a -I compiler option, there's no need to specify something to compel. In fact, it should know by itself where its own headers are kept (and emit -I... to cflags if needed), but that's another story which is to be told when we'll decide to pack compel as a standalone tool. For now, just add "#include <compel/compel.h>" and be done. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
The way the Makefile is written, parasite.h is added to gcc command line, like this: gcc -o spy spy.c libcompel.a parasite.h Surely this is not what we want, as parasite.h is included to spy.c The fix is to use "order-only prerequisite", as described by https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.htmlSigned-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
This is just to avoid a level of code block nesting/indentation that can easily be avoided. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
They are no longer needed. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
Currently, some compel internals are exposed to user API (both C and CLI), making its usage more complicated than it can be. In particular, compel user have to specify a number of parameters (names for various data) on the command line, and when in C code assign a struc piegen_opt_t fields using the same names, without using those identifiers anywhere else in the code. It makes sense to hide this complexity from a user, which is what this commit does. First, remove the ability to specify individual names for data, instead introducing a prefix that is prepended to all the names. Second, generate a function %PREFIX%_setup_c_header() which does all the needed assignments. Third, convert users (criu/pie and compel test) to the new API. NOTE that this patch breaks ARM, as compel hgen is not used for ARM. This is to be fixed by a later patch in the series. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
This is purely cosmetical, no functional change. 1. Make sure relocs table is well aligned. 2. printf("%#02x", 1) prints 0x01, but for 0 it prints 0, not 0x00 as one would expect, so output is somewhat ugly. Use "0x%02x" format instead to make it more uniform and well aligned. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-