ACPICA: Fix implementation of AML BreakPoint operator (break to debugger)
authorBob Moore <robert.moore@intel.com>
Wed, 22 Apr 2009 05:22:38 +0000 (13:22 +0800)
committerLen Brown <len.brown@intel.com>
Wed, 27 May 2009 04:30:50 +0000 (00:30 -0400)
The AML BreakPoint opcode will now cause a break into the AML
debugger if it is present/configured. This matches the expected
behavior per the ACPI specification. Previously, only a message
was output.

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/acpi/acpica/dsopcode.c

index b4c87b5..584d766 100644 (file)
@@ -1386,14 +1386,19 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
 
        case AML_BREAK_POINT_OP:
 
-               /* Call up to the OS service layer to handle this */
-
-               status =
-                   acpi_os_signal(ACPI_SIGNAL_BREAKPOINT,
-                                  "Executed AML Breakpoint opcode");
+               /*
+                * Set the single-step flag. This will cause the debugger (if present)
+                * to break to the console within the AML debugger at the start of the
+                * next AML instruction.
+                */
+               ACPI_DEBUGGER_EXEC(acpi_gbl_cm_single_step = TRUE);
+               ACPI_DEBUGGER_EXEC(acpi_os_printf
+                                  ("**break** Executed AML BreakPoint opcode\n"));
 
-               /* If and when it returns, all done. */
+               /* Call to the OSL in case OS wants a piece of the action */
 
+               status = acpi_os_signal(ACPI_SIGNAL_BREAKPOINT,
+                                       "Executed AML Breakpoint opcode");
                break;
 
        case AML_BREAK_OP: