Пример #1
0
void
kdb_id1(unsigned long pc)
{
	char *mode;
	int diag;

	kdb_di.fprintf_func = kdb_dis_fprintf;
	kdba_id_init(&kdb_di);

	/*
	 * Allow the user to specify that this instruction
	 * should be treated differently.
	 */

	mode = kdbgetenv("IDMODE");
	diag = kdba_id_parsemode(mode, &kdb_di);
	if (diag) {
		kdb_printf("kdb_id: bad value in 'IDMODE' environment variable ignored\n");
	}

	(void) kdba_id_printinsn(pc, &kdb_di);
	kdb_printf("\n");
}
Пример #2
0
void __init
kdb_id_init(void)
{
	kdb_di.stream		= NULL;
	kdb_di.application_data = NULL;
	kdb_di.symbols		= NULL;
	kdb_di.num_symbols	= 0;
	kdb_di.flags		= 0;
	kdb_di.private_data	= NULL;
	kdb_di.buffer		= NULL;
	kdb_di.buffer_vma	= 0;
	kdb_di.buffer_length	= 0;
	kdb_di.bytes_per_line	= 0;
	kdb_di.bytes_per_chunk	= 0;
	kdb_di.insn_info_valid	= 0;
	kdb_di.branch_delay_insns = 0;
	kdb_di.data_size	= 0;
	kdb_di.insn_type	= 0;
	kdb_di.target		= 0;
	kdb_di.target2		= 0;
	kdb_di.fprintf_func	= kdb_dis_fprintf;

	kdba_id_init(&kdb_di);
}
Пример #3
0
int
kdb_id(int argc, const char **argv)
{
	kdb_machreg_t pc;
	int icount;
	int diag;
	int i;
	char *mode;
	int nextarg;
	long offset = 0;
	static kdb_machreg_t lastpc;
	struct disassemble_info *dip = &kdb_di;
	char lastbuf[50];
	unsigned long word;

	kdb_di.fprintf_func = kdb_dis_fprintf;
	kdba_id_init(&kdb_di);

	if (argc != 1)  {
		if (lastpc == 0) {
			return KDB_ARGCOUNT;
		} else {
			sprintf(lastbuf, "0x%lx", lastpc);
			argv[1] = lastbuf;
			argc = 1;
		}
	}


	/*
	 * Fetch PC.  First, check to see if it is a symbol, if not,
	 * try address.
	 */
	nextarg = 1;
	diag = kdbgetaddrarg(argc, argv, &nextarg, &pc, &offset, NULL);
	if (diag)
		return diag;
	kdba_check_pc(&pc);
	if (kdb_getarea(word, pc))
		return(0);

	/*
	 * Number of lines to display
	 */
	diag = kdbgetintenv("IDCOUNT", &icount);
	if (diag)
		return diag;

	mode = kdbgetenv("IDMODE");
	diag = kdba_id_parsemode(mode, dip);
	if (diag) {
		return diag;
	}

	for(i=0; i<icount; i++) {
		pc += kdba_id_printinsn(pc, &kdb_di);
		kdb_printf("\n");
	}

	lastpc = pc;

	return 0;
}