/******************************************************************************* * * FUNCTION: acpi_ds_dump_method_stack * * PARAMETERS: status - Method execution status * walk_state - Current state of the parse tree walk * op - Executing parse op * * RETURN: None * * DESCRIPTION: Called when a method has been aborted because of an error. * Dumps the method execution stack. *
******************************************************************************/
void
acpi_ds_dump_method_stack(acpi_status status, struct acpi_walk_state *walk_state, union acpi_parse_object *op)
{ union acpi_parse_object *next; struct acpi_thread_state *thread; struct acpi_walk_state *next_walk_state; struct acpi_namespace_node *previous_method = NULL; union acpi_operand_object *method_desc;
ACPI_FUNCTION_TRACE(ds_dump_method_stack);
/* Ignore control codes, they are not errors */
if (ACPI_CNTL_EXCEPTION(status)) {
return_VOID;
}
/* We may be executing a deferred opcode */
if (walk_state->deferred_node) {
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Executing subtree for Buffer/Package/Region\n"));
return_VOID;
}
/* * If there is no Thread, we are not actually executing a method. * This can happen when the iASL compiler calls the interpreter * to perform constant folding.
*/
thread = walk_state->thread; if (!thread) {
return_VOID;
}
/* Display exception and method name */
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "\n**** Exception %s during execution of method ",
acpi_format_exception(status)));
/* First method is the currently executing method */
if (next_walk_state == walk_state) { if (op) {
/* Display currently executing ASL statement */
next = op->common.next;
op->common.next = NULL;
#ifdef ACPI_DISASSEMBLER if (walk_state->method_node !=
acpi_gbl_root_node) {
/* More verbose if not module-level code */
acpi_os_printf("Failed at ");
acpi_dm_disassemble(next_walk_state, op,
ACPI_UINT32_MAX);
} #endif
op->common.next = next;
}
} else { /* * This method has called another method * NOTE: the method call parse subtree is already deleted at * this point, so we cannot disassemble the method invocation.
*/
ACPI_DEBUG_PRINT_RAW((ACPI_DB_DISPATCH, "Call to method "));
acpi_ds_print_node_pathname(previous_method, NULL);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.