[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] gcov: Do not use mmap directly but use xc_hypercall_buffer_alloc
commit 55e5d9527caa038f0598186271a52419a655ff01 Author: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx> AuthorDate: Wed Jun 12 13:02:27 2013 +0100 Commit: Ian Campbell <ian.campbell@xxxxxxxxxx> CommitDate: Thu Jun 27 12:11:32 2013 +0100 gcov: Do not use mmap directly but use xc_hypercall_buffer_alloc xencov.c did not compile on NetBSD so use xc_hypercall_buffer which is more portable. Signed-off-by: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- tools/misc/xencov.c | 22 +++++++++------------- 1 files changed, 9 insertions(+), 13 deletions(-) diff --git a/tools/misc/xencov.c b/tools/misc/xencov.c index 6645a30..fb4b2ff 100644 --- a/tools/misc/xencov.c +++ b/tools/misc/xencov.c @@ -24,7 +24,6 @@ #include <unistd.h> #include <errno.h> #include <err.h> -#include <sys/mman.h> static xc_interface *gcov_xch = NULL; @@ -35,16 +34,17 @@ static void gcov_init(void) err(1, "opening interface"); } -int gcov_get_info(int op, struct xen_sysctl *sys, void *ptr) +int gcov_get_info(int op, struct xen_sysctl *sys, struct xc_hypercall_buffer *ptr) { struct xen_sysctl_coverage_op *cov; + DECLARE_HYPERCALL_BUFFER_ARGUMENT(ptr); memset(sys, 0, sizeof(*sys)); sys->cmd = XEN_SYSCTL_coverage_op; cov = &sys->u.coverage_op; cov->cmd = op; - cov->u.raw_info.p = ptr; + set_xen_guest_handle(cov->u.raw_info, ptr); return xc_sysctl(gcov_xch, sys); } @@ -52,10 +52,8 @@ int gcov_get_info(int op, struct xen_sysctl *sys, void *ptr) static void gcov_read(const char *fn, int reset) { struct xen_sysctl sys; - unsigned page_size = sysconf(_SC_PAGESIZE); uint32_t total_len; - uint8_t *p; - size_t size; + DECLARE_HYPERCALL_BUFFER(uint8_t, p); FILE *f; int op = reset ? XEN_SYSCTL_COVERAGE_read_and_reset : XEN_SYSCTL_COVERAGE_read; @@ -71,16 +69,13 @@ static void gcov_read(const char *fn, int reset) errx(1, "coverage size too big %u bytes\n", total_len); /* allocate */ - size = total_len + page_size; - size -= (size % page_size); - p = mmap(0, size, PROT_WRITE|PROT_READ, - MAP_PRIVATE|MAP_ANON|MAP_LOCKED, -1, 0); - if ( p == (uint8_t *) -1 ) - err(1, "mapping memory for coverage"); + p = xc_hypercall_buffer_alloc(gcov_xch, p, total_len); + if ( p == NULL ) + err(1, "allocating memory for coverage"); /* get data */ memset(p, 0, total_len); - if ( gcov_get_info(op, &sys, p) < 0 ) + if ( gcov_get_info(op, &sys, HYPERCALL_BUFFER(p)) < 0 ) err(1, "getting coverage information"); /* write to a file */ @@ -94,6 +89,7 @@ static void gcov_read(const char *fn, int reset) err(1, "writing coverage to file"); if (f != stdout) fclose(f); + xc_hypercall_buffer_free(gcov_xch, p); } static void gcov_reset(void) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |