Exemple #1
0
static void DumpCSymbols(DumpState *D)
{
	int i, cs_nr;
	cp_csymbol_state *cs_state;
	csymbol *cs, *cs_arr;

	cs_state = ctype_get_csym_state();
	cs_arr = cs_state->cs_arr;
	cs_nr = cs_state->cs_nr;

	if (!cs_arr || cs_nr == 0) {
		DumpInt(0, D);
		return;
	}

	/* dump number of csymbols */
	DumpInt(cs_nr, D);
	/* dump size of csymbol, for safty check in vm */
	DumpInt(sizeof(csymbol), D);
	for (i = 0; i < cs_nr; i++) {
		cs = &cs_arr[i];
		switch (cs->type) {
		case FFI_FUNC:
			DumpCSymbolFunc(cs, D);
			break;
		case FFI_STRUCT:
			DumpCSymbolStruct(cs, D);
			break;
		default:
			DumpBlock(cs, sizeof(csymbol), D);
			break;
		}
	}
}
Exemple #2
0
void ktapc_dump_csymbol_id(char *prefix, int id)
{
	csymbol *cs, *cs_arr;

	cs_arr = ctype_get_csym_state()->cs_arr;
	cs = &cs_arr[id];
	if (prefix != NULL)
		printf("%s: ", prefix);
	printf("%s (id: %d; ffi_type: %s)\n", cs->name,
			id, ffi_type_name(cs->type));
}
Exemple #3
0
/* this is a debug function used for check csymbol array */
void ktapc_dump_csymbols()
{
	int i, j, cs_nr;
	cp_csymbol_state *cs_state;
	csymbol *cs, *cs_arr;
	csymbol_func *csf;
	csymbol_struct *csst;

	cs_state = ctype_get_csym_state();
	cs_arr = cs_state->cs_arr;
	cs_nr = cs_state->cs_nr;

	printf("\n----------------------------------------------------\n");
	printf("Number of csymbols: %d\n", cs_nr);

	for (i = 0; i < cs_nr; i++) {
		cs = &cs_arr[i];
		printf("%dth symbol", i);
		ktapc_dump_csymbol_id("", i);
		switch (cs->type) {
		case FFI_PTR:
			ktapc_dump_csymbol_id("\tDeref", csym_ptr_deref_id(cs));
			break;
		case FFI_FUNC:
			csf = csym_func(cs);
			printf("\tAddress: 0x%p\n", csf->addr);
			ktapc_dump_csymbol_id("\tReturn", csf->ret_id);
			printf("\tArg number: %d\n", csf->arg_nr);
			for (j = 0; j < csf->arg_nr; j++)
				ktapc_dump_csymbol_id("\t\tArg", csf->arg_ids[j]);
			printf("\tHas variable arg: %d\n", csf->has_var_arg);
			break;
		case FFI_STRUCT:
		case FFI_UNION:
			csst = csym_struct(cs);
			printf("\tMember number: %d\n", csst->memb_nr);
			for (j = 0; j < csst->memb_nr; j++) {
				printf("\t\tMember %s", csst->members[j].name);
				if (csst->members[j].len >= 0)
					printf("(len %d)", csst->members[j].len);
				ktapc_dump_csymbol_id("", csst->members[j].id);
			}
			break;
		default:
			break;
		}
	}
}