From: Stefano Stabellini Date: Mon, 19 Jul 2010 14:33:38 +0000 (+0100) Subject: Implement xl dump-core X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~11759^2~4 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=a9c189d680f8f13d486ca200677ef33733e39afa;p=xen.git Implement xl dump-core Implements dump-core command which is similar to xm dump-core except that it requires an additional argument which is the target filename. Signed-off-by: Gianni Tedesco --- diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 0624990fbb..80969d60c6 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -523,6 +523,13 @@ int libxl_domain_pause(struct libxl_ctx *ctx, uint32_t domid) return 0; } +int libxl_domain_core_dump(struct libxl_ctx *ctx, uint32_t domid, const char *filename) +{ + if ( xc_domain_dumpcore(ctx->xch, domid, filename) ) + return ERROR_FAIL; + return 0; +} + int libxl_domain_unpause(struct libxl_ctx *ctx, uint32_t domid) { char *path; diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index c5d38e6051..1c7484747f 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -395,6 +395,8 @@ int libxl_domain_rename(struct libxl_ctx *ctx, uint32_t domid, int libxl_domain_pause(struct libxl_ctx *ctx, uint32_t domid); int libxl_domain_unpause(struct libxl_ctx *ctx, uint32_t domid); +int libxl_domain_core_dump(struct libxl_ctx *ctx, uint32_t domid, const char *filename); + int libxl_domain_setmaxmem(struct libxl_ctx *ctx, uint32_t domid, uint32_t target_memkb); int libxl_set_memory_target(struct libxl_ctx *ctx, uint32_t domid, uint32_t target_memkb, int enforce); diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h index 18db408714..79a4204621 100644 --- a/tools/libxl/xl.h +++ b/tools/libxl/xl.h @@ -37,6 +37,7 @@ int main_restore(int argc, char **argv); int main_migrate_receive(int argc, char **argv); int main_save(int argc, char **argv); int main_migrate(int argc, char **argv); +int main_dump_core(int argc, char **argv); int main_pause(int argc, char **argv); int main_unpause(int argc, char **argv); int main_destroy(int argc, char **argv); diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 152be2b639..3379252a37 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -2264,6 +2264,14 @@ static void migrate_domain(char *domain_spec, const char *rune, exit(-ERROR_BADFAIL); } +static void core_dump_domain(const char *domain_spec, const char *filename) +{ + int rc; + find_domain(domain_spec); + rc=libxl_domain_core_dump(&ctx, domid, filename); + if (rc) { fprintf(stderr,"core dump failed (rc=%d)\n.",rc);exit(-1); } +} + static void migrate_receive(int debug, int daemonize) { int rc, rc2; @@ -2533,6 +2541,16 @@ int main_migrate(int argc, char **argv) exit(0); } +int main_dump_core(int argc, char **argv) +{ + if ( argc-optind < 2 ) { + help("dump-core"); + exit(2); + } + core_dump_domain(argv[optind], argv[optind + 1]); + exit(0); +} + int main_pause(int argc, char **argv) { int opt; diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c index d7330fec05..1621cbb435 100644 --- a/tools/libxl/xl_cmdtable.c +++ b/tools/libxl/xl_cmdtable.c @@ -102,6 +102,11 @@ struct cmd_spec cmd_table[] = { "-e Do not wait in the background (on ) for the death\n" " of the domain." }, + { "dump-core", + &main_dump_core, + "Core dump a domain", + " " + }, { "restore", &main_restore, "Restore a domain from a saved state",