예제 #1
0
파일: main.c 프로젝트: ralphost/NextBSD
/*
 * Read an array of N counters in kernel memory into array of N uint64_t's.
 */
int
kread_counters(u_long addr, void *buf, size_t size)
{
	uint64_t *c;
	u_long *counters;
	size_t i, n;

	if (kvmd_init() < 0)
		return (-1);

	if (size % sizeof(uint64_t) != 0) {
		xo_warnx("kread_counters: invalid counter set size");
		return (-1);
	}

	n = size / sizeof(uint64_t);
	if ((counters = malloc(n * sizeof(u_long))) == NULL)
		xo_err(-1, "malloc");
	if (kread(addr, counters, n * sizeof(u_long)) < 0) {
		free(counters);
		return (-1);
	}

	c = buf;
	for (i = 0; i < n; i++)
		c[i] = kvm_counter_u64_fetch(kvmd, counters[i]);

	free(counters);
	return (0);
}
예제 #2
0
파일: main.c 프로젝트: Alkzndr/freebsd
/*
 * Read single counter(9).
 */
uint64_t
kread_counter(u_long addr)
{

	if (kvmd_init() < 0)
		return (-1);

	return (kvm_counter_u64_fetch(kvmd, addr));
}
예제 #3
0
파일: main.c 프로젝트: rchander/freebsd
/*
 * Read an array of N counters in kernel memory into array of N uint64_t's.
 */
int
kread_counters(u_long *addr, uint64_t *rval, size_t count)
{

	if (kvmd_init() < 0)
		return (-1);

	for (u_int i = 0; i < count; i++, addr++, rval++)
		*rval = kvm_counter_u64_fetch(kvmd, *addr);

	return (0);
}
예제 #4
0
파일: main.c 프로젝트: ralphost/NextBSD
/*
 * Wrapper of kvm_dpcpu_setcpu().
 */
void
kset_dpcpu(u_int cpuid)
{

	if ((kvmd == NULL) && (kvmd_init() != 0))
		xo_errx(-1, "%s: kvm is not available", __func__);

	if (kvm_dpcpu_setcpu(kvmd, cpuid) < 0)
		xo_errx(-1, "%s: kvm_dpcpu_setcpu(%u): %s", __func__,
		    cpuid, kvm_geterr(kvmd)); 
	return;
}
예제 #5
0
파일: main.c 프로젝트: sujay219/freebsd
/*
 * Read kernel memory, return 0 on success.
 */
int
kread(u_long addr, void *buf, size_t size)
{

	if (kvmd_init() < 0)
		return (-1);

	if (!buf)
		return (0);
	if (kvm_read(kvmd, addr, buf, size) != (ssize_t)size) {
		warnx("%s", kvm_geterr(kvmd));
		return (-1);
	}
	return (0);
}
예제 #6
0
파일: main.c 프로젝트: sujay219/freebsd
/*
 * Read an array of N counters in kernel memory into array of N uint64_t's.
 */
int
kread_counters(u_long addr, void *buf, size_t size)
{
	uint64_t *c = buf;

	if (kvmd_init() < 0)
		return (-1);

	if (kread(addr, buf, size) < 0)
		return (-1);

	while (size != 0) {
		*c = kvm_counter_u64_fetch(kvmd, *c);
		size -= sizeof(*c);
		c++;
	}
	return (0);
}
예제 #7
0
파일: main.c 프로젝트: Alkzndr/freebsd
/*
 * Resolve symbol list, return 0 on success.
 */
int
kresolve_list(struct nlist *_nl)
{

	if ((kvmd == NULL) && (kvmd_init() != 0))
		return (-1);

	if (_nl[0].n_type != 0)
		return (0);

	if (kvm_nlist(kvmd, _nl) < 0) {
		if (nlistf)
			errx(1, "%s: kvm_nlist: %s", nlistf,
			     kvm_geterr(kvmd));
		else
			errx(1, "kvm_nlist: %s", kvm_geterr(kvmd));
	}

	return (0);
}