mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-18 09:05:10 +00:00
This patch adds ability to checkpoint/restore /proc/pid/exe symlink, so if a process we've just checkpointed has been say /path/to/exe, then at restore time we bring this path back. There some restiction from kernel side: if existing /proc/pid/exe already mapped more than once, the kernel will refuse to change the symlink, so we need to restore it lately when mmaps of crtools itself already unmapped (ie via late call in restorer.c). Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Acked-by: Pavel Emelyanov <xemul@parallels.com>
173 lines
3.6 KiB
C
173 lines
3.6 KiB
C
#ifndef CR_TYPES_H_
|
|
#define CR_TYPES_H_
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
#include "bitops.h"
|
|
#include "atomic.h"
|
|
|
|
#define STDIN_FILENO 0
|
|
#define STDOUT_FILENO 1
|
|
#define STDERR_FILENO 2
|
|
|
|
/* prctl */
|
|
#define ARCH_SET_GS 0x1001
|
|
#define ARCH_SET_FS 0x1002
|
|
#define ARCH_GET_FS 0x1003
|
|
#define ARCH_GET_GS 0x1004
|
|
|
|
#define FS_TLS 0
|
|
#define GS_TLS 1
|
|
|
|
/* prctl.h */
|
|
#define PR_SET_NAME 15
|
|
#define PR_GET_NAME 16
|
|
|
|
#define PR_CAPBSET_DROP 24
|
|
#define PR_GET_SECUREBITS 27
|
|
#define PR_SET_SECUREBITS 28
|
|
|
|
#define SECURE_NO_SETUID_FIXUP 2
|
|
|
|
#define PR_SET_MM 35
|
|
# define PR_SET_MM_START_CODE 1
|
|
# define PR_SET_MM_END_CODE 2
|
|
# define PR_SET_MM_START_DATA 3
|
|
# define PR_SET_MM_END_DATA 4
|
|
# define PR_SET_MM_START_STACK 5
|
|
# define PR_SET_MM_START_BRK 6
|
|
# define PR_SET_MM_BRK 7
|
|
# define PR_SET_MM_ARG_START 8
|
|
# define PR_SET_MM_ARG_END 9
|
|
# define PR_SET_MM_ENV_START 10
|
|
# define PR_SET_MM_ENV_END 11
|
|
# define PR_SET_MM_AUXV 12
|
|
# define PR_SET_MM_EXE_FILE 13
|
|
|
|
#define PR_SETUP_VDSO_AT 36
|
|
|
|
/* fcntl */
|
|
#ifndef F_LINUX_SPECIFIC_BASE
|
|
#define F_LINUX_SPECIFIC_BASE 1024
|
|
#endif
|
|
#ifndef F_SETPIPE_SZ
|
|
# define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7)
|
|
#endif
|
|
#ifndef F_GETPIPE_SZ
|
|
# define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8)
|
|
#endif
|
|
|
|
#define CLONE_CHILD_USEPID 0x02000000
|
|
#define CLONE_VFORK 0x00004000
|
|
|
|
#define SIGMAX 32
|
|
|
|
#define ERESTARTSYS 512
|
|
#define ERESTARTNOINTR 513
|
|
#define ERESTARTNOHAND 514
|
|
#define ERESTART_RESTARTBLOCK 516
|
|
|
|
typedef uint64_t u64;
|
|
typedef int64_t s64;
|
|
typedef unsigned int u32;
|
|
typedef signed int s32;
|
|
typedef unsigned short u16;
|
|
typedef signed short s16;
|
|
typedef unsigned char u8;
|
|
typedef signed char s8;
|
|
|
|
#define MAJOR(dev) ((dev)>>8)
|
|
|
|
#define _LINUX_CAPABILITY_VERSION_3 0x20080522
|
|
#define _LINUX_CAPABILITY_U32S_3 2
|
|
|
|
#ifdef CONFIG_X86_64
|
|
|
|
typedef struct {
|
|
unsigned long sig[1];
|
|
} rt_sigset_t;
|
|
|
|
struct siginfo;
|
|
typedef void rt_signalfn_t(int, struct siginfo *, void *);
|
|
typedef rt_signalfn_t *rt_sighandler_t;
|
|
|
|
typedef void rt_restorefn_t(void);
|
|
typedef rt_restorefn_t *rt_sigrestore_t;
|
|
|
|
typedef struct {
|
|
rt_sighandler_t rt_sa_handler;
|
|
unsigned long rt_sa_flags;
|
|
rt_sigrestore_t rt_sa_restorer;
|
|
rt_sigset_t rt_sa_mask;
|
|
} rt_sigaction_t;
|
|
|
|
typedef struct {
|
|
unsigned int entry_number;
|
|
unsigned int base_addr;
|
|
unsigned int limit;
|
|
unsigned int seg_32bit:1;
|
|
unsigned int contents:2;
|
|
unsigned int read_exec_only:1;
|
|
unsigned int limit_in_pages:1;
|
|
unsigned int seg_not_present:1;
|
|
unsigned int useable:1;
|
|
unsigned int lm:1;
|
|
} user_desc_t;
|
|
|
|
typedef struct {
|
|
unsigned long r15;
|
|
unsigned long r14;
|
|
unsigned long r13;
|
|
unsigned long r12;
|
|
unsigned long bp;
|
|
unsigned long bx;
|
|
unsigned long r11;
|
|
unsigned long r10;
|
|
unsigned long r9;
|
|
unsigned long r8;
|
|
unsigned long ax;
|
|
unsigned long cx;
|
|
unsigned long dx;
|
|
unsigned long si;
|
|
unsigned long di;
|
|
unsigned long orig_ax;
|
|
unsigned long ip;
|
|
unsigned long cs;
|
|
unsigned long flags;
|
|
unsigned long sp;
|
|
unsigned long ss;
|
|
unsigned long fs_base;
|
|
unsigned long gs_base;
|
|
unsigned long ds;
|
|
unsigned long es;
|
|
unsigned long fs;
|
|
unsigned long gs;
|
|
} user_regs_struct_t;
|
|
|
|
typedef struct {
|
|
unsigned short cwd;
|
|
unsigned short swd;
|
|
unsigned short twd; /* Note this is not the same as
|
|
the 32bit/x87/FSAVE twd */
|
|
unsigned short fop;
|
|
u64 rip;
|
|
u64 rdp;
|
|
u32 mxcsr;
|
|
u32 mxcsr_mask;
|
|
u32 st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
|
|
u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg = 256 bytes */
|
|
u32 padding[24];
|
|
} user_fpregs_struct_t;
|
|
|
|
#else /* CONFIG_X86_64 */
|
|
# error x86-32 bit mode not yet implemented
|
|
#endif /* CONFIG_X86_64 */
|
|
|
|
#define ASSIGN_TYPED(a,b) a = (typeof(a))b
|
|
|
|
#ifndef PAGE_SIZE
|
|
# define PAGE_SIZE 4096
|
|
#endif
|
|
|
|
#endif /* CR_TYPES_H_ */
|