[CRIU] [PATCH 6/6] parasite: Add DPARASITE make option in debug sake
Cyrill Gorcunov
gorcunov at openvz.org
Tue Feb 14 08:42:01 EST 2012
parasite is ugly beast and need own debug facility
due to specifics it runs on.
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
Makefile | 4 ++
parasite.c | 99 ++++++++++++++++++++++++++++++++++++++++-------------------
2 files changed, 71 insertions(+), 32 deletions(-)
diff --git a/Makefile b/Makefile
index ad775db..91a7b21 100644
--- a/Makefile
+++ b/Makefile
@@ -16,6 +16,10 @@ ifeq ($(DEBUG),1)
DEFINES += -DCR_DEBUG
endif
+ifeq ($(DPARASITE),1)
+ DEFINES += -DPARASITE_DEBUG
+endif
+
WARNINGS += -Wall -Wno-unused
CFLAGS += $(WARNINGS) $(DEFINES)
diff --git a/parasite.c b/parasite.c
index 3ec0f22..7866e99 100644
--- a/parasite.c
+++ b/parasite.c
@@ -21,6 +21,18 @@
#ifdef CONFIG_X86_64
+#ifdef PARASITE_DEBUG
+# define dwrite_msg(msg) sys_write_msg(msg)
+# define dwrite_func_name() \
+ do { \
+ sys_write_msg(__func__); \
+ sys_write_msg("\n"); \
+ } while (0)
+#else
+# define dwrite_msg(msg)
+# define dwrite_func_name()
+#endif
+
static void __parasite_data *brk_start;
static void __parasite_data *brk_end;
static void __parasite_data *brk_tail;
@@ -33,36 +45,6 @@ static int __parasite_data tsock = -1;
static unsigned char __parasite_data hex[] = "0123456789abcdef";
static unsigned char __parasite_data hexbuf[32];
-static void brk_init(void *brk)
-{
- brk_start = brk_tail = brk;
- brk_end = brk_start + PARASITE_BRK_SIZE;
-}
-
-static void *brk_alloc(unsigned long bytes)
-{
- void *addr = NULL;
- if (brk_end > (brk_tail + bytes)) {
- addr = brk_tail;
- brk_tail+= bytes;
- }
- return addr;
-}
-
-static void brk_free(unsigned long bytes)
-{
- if (brk_start >= (brk_tail - bytes))
- brk_tail -= bytes;
-}
-
-static unsigned long builtin_strlen(char *str)
-{
- unsigned long len = 0;
- while (*str++)
- len++;
- return len;
-}
-
static unsigned char *long2hex(unsigned long v)
{
unsigned char *p = hexbuf;
@@ -80,11 +62,43 @@ static unsigned char *long2hex(unsigned long v)
static void sys_write_msg(const char *msg)
{
int size = 0;
+
while (msg[size])
size++;
+
sys_write(logfd, msg, size);
}
+static void brk_init(void *brk)
+{
+ dwrite_func_name();
+
+ brk_start = brk_tail = brk;
+ brk_end = brk_start + PARASITE_BRK_SIZE;
+}
+
+static void *brk_alloc(unsigned long bytes)
+{
+ void *addr = NULL;
+
+ dwrite_func_name();
+
+ if (brk_end > (brk_tail + bytes)) {
+ addr = brk_tail;
+ brk_tail+= bytes;
+ }
+
+ return addr;
+}
+
+static void brk_free(unsigned long bytes)
+{
+ dwrite_func_name();
+
+ if (brk_start >= (brk_tail - bytes))
+ brk_tail -= bytes;
+}
+
static inline int should_dump_page(struct vma_entry *vmae, unsigned char mincore_flags)
{
#ifdef PAGE_ANON
@@ -101,6 +115,8 @@ static int fd_pages[2] = { -1, -1 };
static int dump_pages_init(parasite_status_t *st)
{
+ dwrite_func_name();
+
fd_pages[PG_PRIV] = recv_fd(tsock);
if (fd_pages[PG_PRIV] < 0)
goto err;
@@ -131,6 +147,8 @@ static int dump_pages(struct parasite_dump_pages_args *args)
unsigned char *map;
int ret = PARASITE_ERR_FAIL, fd;
+ dwrite_func_name();
+
args->nrpages_dumped = 0;
prot_old = prot_new = 0;
@@ -246,8 +264,11 @@ err:
static int dump_pages_fini(parasite_status_t *st)
{
+ dwrite_func_name();
+
sys_close(fd_pages[PG_PRIV]);
sys_close(fd_pages[PG_SHARED]);
+
return 0;
}
@@ -256,9 +277,10 @@ static int dump_sigact(parasite_status_t *st)
rt_sigaction_t act;
struct sa_entry e;
int fd, sig;
-
int ret = PARASITE_ERR_FAIL;
+ dwrite_func_name();
+
fd = recv_fd(tsock);
if (fd < 0)
return fd;
@@ -305,6 +327,8 @@ static int dump_itimer(int which, int fd, parasite_status_t *st)
int ret;
struct itimer_entry ie;
+ dwrite_func_name();
+
ret = sys_getitimer(which, &val);
if (ret < 0) {
sys_write_msg("getitimer failed\n");
@@ -332,9 +356,10 @@ static int dump_itimers(parasite_status_t *st)
rt_sigaction_t act;
struct sa_entry e;
int fd, sig;
-
int ret = PARASITE_ERR_FAIL;
+ dwrite_func_name();
+
fd = recv_fd(tsock);
if (fd < 0)
return fd;
@@ -365,6 +390,8 @@ static int dump_misc(struct parasite_dump_misc *args)
{
parasite_status_t *st = &args->status;
+ dwrite_func_name();
+
args->secbits = sys_prctl(PR_GET_SECUREBITS, 0, 0, 0, 0);
args->brk = sys_brk(0);
@@ -376,6 +403,8 @@ static int init(struct parasite_init_args *args)
{
int ret;
+ dwrite_func_name();
+
tsock = sys_socket(PF_UNIX, SOCK_DGRAM, 0);
if (tsock < 0) {
return -1;
@@ -393,6 +422,8 @@ static int set_logfd()
{
int ret;
+ dwrite_func_name();
+
ret = recv_fd(tsock);
if (ret >= 0)
logfd = ret;
@@ -402,6 +433,8 @@ static int set_logfd()
static int fini()
{
+ dwrite_func_name();
+
if (logfd > STDFILENO_MAX)
sys_close(logfd);
@@ -413,6 +446,8 @@ static int fini()
static int __used parasite_service(unsigned long cmd, void *args, void *brk)
{
+ dwrite_func_name();
+
brk_init(brk);
BUILD_BUG_ON(sizeof(struct parasite_dump_pages_args) > PARASITE_ARG_SIZE);
--
1.7.7.6
More information about the CRIU
mailing list