示例#1
0
文件: kp_obj.c 项目: awreece/ktap
/* this function may be time consuming, move out from table set/get? */
ktap_str_t *kp_obj_kstack2str(ktap_state_t *ks, uint16_t depth, uint16_t skip)
{
	struct stack_trace trace;
	unsigned long *bt;
	char *btstr, *p;
	int i;

	bt = kp_this_cpu_print_buffer(ks); /* use print percpu buffer */
	trace.nr_entries = 0;
	trace.skip = skip;
	trace.max_entries = depth;
	trace.entries = (unsigned long *)(bt + 1);
	save_stack_trace(&trace);

	/* convert backtrace to string */
	p = btstr = kp_this_cpu_temp_buffer(ks);
	for (i = 0; i < trace.nr_entries; i++) {
		unsigned long addr = trace.entries[i];

		if (addr == ULONG_MAX)
			break;

		p += sprint_symbol(p, addr);
		*p++ = '\n';
        }

	return kp_str_new(ks, btstr, p - btstr);
}
示例#2
0
文件: lib_base.c 项目: cofyc/ktap
static int kplib_execname(ktap_state *ks)
{
	ktap_string *ts = kp_str_new(ks, current->comm);
	set_string(ks->top, ts);
	incr_top(ks);
	return 1;
}
示例#3
0
文件: lib_net.c 项目: edsrzf/ktap
/**
 * Returns a string representation for an IP address
 */
static int kplib_format_ip_addr(ktap_state *ks)
{
	char ipstr[32];
	__be32 ip;

	kp_arg_check(ks, 1, KTAP_TYPE_NUMBER);
	ip = (__be32)nvalue(kp_arg(ks, 1));
	
	snprintf(ipstr, 32, "%pI4", &ip);
	set_string(ks->top, kp_str_new(ks, ipstr));
	incr_top(ks);
	return 1;
}
示例#4
0
文件: lib_base.c 项目: cofyc/ktap
static int kplib_user_string(ktap_state *ks)
{
	unsigned long addr;
	char str[256] = {0};
	int ret;

	kp_arg_check(ks, 1, KTAP_TYPE_NUMBER);

	addr = nvalue(kp_arg(ks, 1));

	pagefault_disable();
	ret = __copy_from_user_inatomic((void *)str, (const void *)addr, 256);
	(void) &ret;  /* Silence compiler warning. */
	pagefault_enable();
	str[255] = '\0';
	set_string(ks->top, kp_str_new(ks, str));

	incr_top(ks);
	return 1;
}
示例#5
0
文件: kp_util.c 项目: awreece/ktap
ktap_str_t *kp_str_newz(const char *str)
{
	return kp_str_new(str, strlen(str));
}
示例#6
0
文件: kp_util.c 项目: awreece/ktap
ktap_str_t *kp_buf_str(SBuf *sb)
{
	return kp_str_new(sbufB(sb), sbuflen(sb));
}
示例#7
0
文件: lib_base.c 项目: cofyc/ktap
static int kplib_kernel_v(ktap_state *ks)
{
	set_string(ks->top, kp_str_new(ks, utsname()->release));
	incr_top(ks);
	return 1;
}
示例#8
0
文件: lib_base.c 项目: cofyc/ktap
static int kplib_arch(ktap_state *ks)
{
	set_string(ks->top, kp_str_new(ks, utsname()->machine));
	incr_top(ks);
	return 1;
}