/*
 * db_panic: Called by panic().  May print a stack trace; may enter the
 * kernel debugger; may just return so that panic() will continue to
 * halt or reboot the system.
 */
void db_panic(void)
{

	if (db_onpanic == 1)
		Debugger();
	else if (db_onpanic >= 0) {
		static int intrace = 0;

		if (intrace == 0) {
			intrace = 1;
			printf("cpu%u: Begin traceback...\n",
			    cpu_index(curcpu()));
			db_stack_trace_print(
			    (db_expr_t)(intptr_t)__builtin_frame_address(0),
			    true, 65535, "", printf);
			printf("cpu%u: End traceback...\n",
			    cpu_index(curcpu()));
			intrace = 0;
		} else
			printf("Faulted in mid-traceback; aborting...");
		if (db_onpanic == 2)
			Debugger();
	}
	return;
}
Esempio n. 2
0
void
db_stack_dump(void)
{
	static int intrace;

	if (intrace) {
		printf("Faulted in traceback, aborting...\n");
		return;
	}

	intrace = 1;
	printf("Starting stack trace...\n");
	db_stack_trace_print((db_expr_t)__builtin_frame_address(0), TRUE,
	    256 /* low limit */, "", printf);
	printf("End of stack trace.\n");
	intrace = 0;
}
Esempio n. 3
0
void
db_stack_trace_cmd(db_expr_t addr, boolean_t have_addr, db_expr_t count,
    char *modif)
{
	db_stack_trace_print(addr, have_addr, count, modif, db_printf);
}