Commit fd13aaa8 authored by Bob Moore's avatar Bob Moore Committed by Rafael J. Wysocki

ACPICA: acpiexec: enhance local signal handler

ACPICA commit ffef4ae9a1b6032ebadeab2c2b806f0e585f0006

Add support for SIGSEGV
Improve/cleanup SIGINT handling

Link: https://github.com/acpica/acpica/commit/ffef4ae9Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 9c0b6c49
...@@ -181,6 +181,18 @@ acpi_db_execute_method(struct acpi_db_method_info *info, ...@@ -181,6 +181,18 @@ acpi_db_execute_method(struct acpi_db_method_info *info,
acpi_gbl_method_executing = FALSE; acpi_gbl_method_executing = FALSE;
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
if ((status == AE_ABORT_METHOD) || acpi_gbl_abort_method) {
/* Clear the abort and fall back to the debugger prompt */
ACPI_EXCEPTION((AE_INFO, status,
"Aborting top-level method"));
acpi_gbl_abort_method = FALSE;
status = AE_OK;
goto cleanup;
}
ACPI_EXCEPTION((AE_INFO, status, ACPI_EXCEPTION((AE_INFO, status,
"while executing %s from debugger", "while executing %s from debugger",
info->pathname)); info->pathname));
......
...@@ -212,6 +212,7 @@ acpi_status ...@@ -212,6 +212,7 @@ acpi_status
acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state) acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
{ {
u32 aml_offset; u32 aml_offset;
acpi_name name = 0;
ACPI_FUNCTION_ENTRY(); ACPI_FUNCTION_ENTRY();
...@@ -237,10 +238,13 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state) ...@@ -237,10 +238,13 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
walk_state->parser_state. walk_state->parser_state.
aml_start); aml_start);
status = acpi_gbl_exception_handler(status, if (walk_state->method_node) {
walk_state->method_node ? name = walk_state->method_node->name.integer;
walk_state->method_node-> } else if (walk_state->deferred_node) {
name.integer : 0, name = walk_state->deferred_node->name.integer;
}
status = acpi_gbl_exception_handler(status, name,
walk_state->opcode, walk_state->opcode,
aml_offset, NULL); aml_offset, NULL);
acpi_ex_enter_interpreter(); acpi_ex_enter_interpreter();
......
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
#include "acdispat.h" #include "acdispat.h"
#include "amlcode.h" #include "amlcode.h"
#include "acinterp.h" #include "acinterp.h"
#include "acnamesp.h"
#define _COMPONENT ACPI_PARSER #define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME("psparse") ACPI_MODULE_NAME("psparse")
...@@ -538,9 +539,16 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) ...@@ -538,9 +539,16 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
/* Either the method parse or actual execution failed */ /* Either the method parse or actual execution failed */
acpi_ex_exit_interpreter(); acpi_ex_exit_interpreter();
ACPI_ERROR_METHOD("Method parse/execution failed", if (status == AE_ABORT_METHOD) {
walk_state->method_node, NULL, acpi_ns_print_node_pathname(walk_state->
status); method_node,
"Method aborted:");
acpi_os_printf("\n");
} else {
ACPI_ERROR_METHOD
("Method parse/execution failed",
walk_state->method_node, NULL, status);
}
acpi_ex_enter_interpreter(); acpi_ex_enter_interpreter();
/* Check for possible multi-thread reentrancy problem */ /* Check for possible multi-thread reentrancy problem */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment