diff options
author | Robert Moore <Robert.Moore@intel.com> | 2017-05-24 13:35:34 -0700 |
---|---|---|
committer | Robert Moore <Robert.Moore@intel.com> | 2017-05-24 13:35:34 -0700 |
commit | 8fef392bf2e15b54a5aefb7553649e054bd3ff26 (patch) | |
tree | 1d175e7ff9fbe92ef5179a2e674859ad927c38c6 /source | |
parent | 809c1766598c7f3decaeeba2c6ed603c538d0270 (diff) | |
download | acpica-8fef392bf2e15b54a5aefb7553649e054bd3ff26.tar.gz |
acpiexec: Split exception/signal handlers to new file
new file is aeexception.c
Diffstat (limited to 'source')
-rw-r--r-- | source/tools/acpiexec/aecommon.h | 8 | ||||
-rw-r--r-- | source/tools/acpiexec/aeexception.c | 441 | ||||
-rw-r--r-- | source/tools/acpiexec/aehandlers.c | 288 |
3 files changed, 449 insertions, 288 deletions
diff --git a/source/tools/acpiexec/aecommon.h b/source/tools/acpiexec/aecommon.h index add83a53a..b4864610a 100644 --- a/source/tools/acpiexec/aecommon.h +++ b/source/tools/acpiexec/aecommon.h @@ -211,6 +211,14 @@ AeSignalHandler ( int Sig); ACPI_STATUS +AeExceptionHandler ( + ACPI_STATUS AmlStatus, + ACPI_NAME Name, + UINT16 Opcode, + UINT32 AmlOffset, + void *Context); + +ACPI_STATUS AeBuildLocalTables ( ACPI_NEW_TABLE_DESC *TableList); diff --git a/source/tools/acpiexec/aeexception.c b/source/tools/acpiexec/aeexception.c new file mode 100644 index 000000000..a5a3293ad --- /dev/null +++ b/source/tools/acpiexec/aeexception.c @@ -0,0 +1,441 @@ +/****************************************************************************** + * + * Module Name: aeexception - Exception and signal handlers + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "aecommon.h" + +#define _COMPONENT ACPI_TOOLS + ACPI_MODULE_NAME ("aeexception") + + +/* Local prototypes */ + +static void +AeDisplayMethodCallStack ( + void); + + +/****************************************************************************** + * + * FUNCTION: AeExceptionHandler + * + * PARAMETERS: Standard exception handler parameters + * + * RETURN: Status + * + * DESCRIPTION: System exception handler for AcpiExec utility. Called from + * the core ACPICA code after any exception during method + * execution. + * + *****************************************************************************/ + +ACPI_STATUS +AeExceptionHandler ( + ACPI_STATUS AmlStatus, + ACPI_NAME Name, + UINT16 Opcode, + UINT32 AmlOffset, + void *Context) +{ + ACPI_STATUS NewAmlStatus = AmlStatus; + ACPI_STATUS Status; + ACPI_BUFFER ReturnObj; + ACPI_OBJECT_LIST ArgList; + ACPI_OBJECT Arg[3]; + const char *Exception; + ACPI_HANDLE ErrHandle; + + + Exception = AcpiFormatException (AmlStatus); + AcpiOsPrintf (AE_PREFIX + "Exception %s during execution\n", Exception); + if (Name) + { + AcpiOsPrintf (AE_PREFIX + "Evaluating Method or Node: [%4.4s]", + (char *) &Name); + } + + AcpiOsPrintf ("\n" AE_PREFIX + "AML Opcode [%s], Method Offset ~%5.5X\n", + AcpiPsGetOpcodeName (Opcode), AmlOffset); + + /* Invoke the _ERR method if present */ + + Status = AcpiGetHandle (NULL, "\\_ERR", &ErrHandle); + if (ACPI_FAILURE (Status)) + { + goto Cleanup; + } + + /* Setup parameter object */ + + ArgList.Count = 3; + ArgList.Pointer = Arg; + + Arg[0].Type = ACPI_TYPE_INTEGER; + Arg[0].Integer.Value = AmlStatus; + + Arg[1].Type = ACPI_TYPE_STRING; + Arg[1].String.Pointer = ACPI_CAST_PTR (char, Exception); + Arg[1].String.Length = strlen (Exception); + + Arg[2].Type = ACPI_TYPE_INTEGER; + Arg[2].Integer.Value = AcpiOsGetThreadId(); + + /* Setup return buffer */ + + ReturnObj.Pointer = NULL; + ReturnObj.Length = ACPI_ALLOCATE_BUFFER; + + Status = AcpiEvaluateObject (ErrHandle, NULL, &ArgList, &ReturnObj); + if (ACPI_SUCCESS (Status)) + { + if (ReturnObj.Pointer) + { + /* Override original status */ + + NewAmlStatus = (ACPI_STATUS) + ((ACPI_OBJECT *) ReturnObj.Pointer)->Integer.Value; + + /* Free a buffer created via ACPI_ALLOCATE_BUFFER */ + + AcpiOsFree (ReturnObj.Pointer); + } + } + else if (Status != AE_NOT_FOUND) + { + AcpiOsPrintf (AE_PREFIX + "Could not execute _ERR method, %s\n", + AcpiFormatException (Status)); + } + +Cleanup: + + /* Global overrides */ + + if (AcpiGbl_IgnoreErrors) + { + NewAmlStatus = AE_OK; + } + else if (AmlStatus == AE_AML_INTERNAL) + { + NewAmlStatus = AE_AML_INTERNAL; + AcpiOsPrintf (AE_PREFIX + "Cannot override status %s\n\n", + AcpiFormatException (NewAmlStatus)); + } + else if (NewAmlStatus != AmlStatus) + { + AcpiOsPrintf (AE_PREFIX + "Exception override, new status %s\n\n", + AcpiFormatException (NewAmlStatus)); + } + + return (NewAmlStatus); +} + + +/****************************************************************************** + * + * FUNCTION: AeSignalHandler + * + * PARAMETERS: Sig + * + * RETURN: none + * + * DESCRIPTION: Master signal handler. Currently handles SIGINT (ctrl-c), + * and SIGSEGV (Segment violation). + * + *****************************************************************************/ + +void ACPI_SYSTEM_XFACE +AeSignalHandler ( + int Sig) +{ + + fflush(stdout); + AcpiOsPrintf ("\n" AE_PREFIX); + + switch (Sig) + { + case SIGINT: + signal(Sig, SIG_IGN); + AcpiOsPrintf ("<Control-C>\n"); + + /* Abort the application if there are no methods executing */ + + if (!AcpiGbl_MethodExecuting) + { + break; + } + + /* + * Abort the method(s). This will also dump the method call + * stack so there is no need to do it here. The application + * will then drop back into the debugger interface. + */ + AcpiGbl_AbortMethod = TRUE; + AcpiOsPrintf (AE_PREFIX "Control Method Call Stack:\n"); + signal (SIGINT, AeSignalHandler); + return; + + case SIGSEGV: + AcpiOsPrintf ("Segmentation Fault\n"); + AeDisplayMethodCallStack (); + break; + + default: + AcpiOsPrintf ("Unknown Signal, %X\n", Sig); + break; + } + + /* Terminate application -- cleanup then exit */ + + AcpiOsPrintf (AE_PREFIX "Terminating\n"); + (void) AcpiOsTerminate (); + exit (0); +} + + +/****************************************************************************** + * + * FUNCTION: AeDisplayMethodCallStack + * + * PARAMETERS: None + * + * RETURN: None + * + * DESCRIPTION: Display current method call stack, if possible. + * + * NOTE: Currently only called from a SIGSEGV, so AcpiExec is about + * to terminate. + * + *****************************************************************************/ + +static void +AeDisplayMethodCallStack ( + void) +{ + ACPI_WALK_STATE *WalkState; + ACPI_THREAD_STATE *ThreadList = AcpiGbl_CurrentWalkList; + char *FullPathname = NULL; + + + if (!AcpiGbl_MethodExecuting) + { + AcpiOsPrintf (AE_PREFIX "No method is executing\n"); + return; + } + + /* + * Try to find the currently executing control method(s) + * + * Note: The following code may fault if the data structures are + * in an indeterminate state when the interrupt occurs. However, + * in practice, this works quite well and can provide very + * valuable information. + * + * 1) Walk the global thread list + */ + while (ThreadList && + (ThreadList->DescriptorType == ACPI_DESC_TYPE_STATE_THREAD)) + { + /* 2) Walk the walk state list for this thread */ + + WalkState = ThreadList->WalkStateList; + while (WalkState && + (WalkState->DescriptorType == ACPI_DESC_TYPE_WALK)) + { + /* An executing control method */ + + if (WalkState->MethodNode) + { + FullPathname = AcpiNsGetExternalPathname ( + WalkState->MethodNode); + + AcpiOsPrintf (AE_PREFIX + "Executing Method: %s\n", FullPathname); + } + + /* Execution of a deferred opcode/node */ + + if (WalkState->DeferredNode) + { + FullPathname = AcpiNsGetExternalPathname ( + WalkState->DeferredNode); + + AcpiOsPrintf (AE_PREFIX + "Evaluating deferred node: %s\n", FullPathname); + } + + /* Get the currently executing AML opcode */ + + if ((WalkState->Opcode != AML_INT_METHODCALL_OP) && + FullPathname) + { + AcpiOsPrintf (AE_PREFIX + "Current AML Opcode in %s: [%s]-0x%4.4X at %p\n", + FullPathname, AcpiPsGetOpcodeName (WalkState->Opcode), + WalkState->Opcode, WalkState->Aml); + } + + if (FullPathname) + { + ACPI_FREE (FullPathname); + FullPathname = NULL; + } + + WalkState = WalkState->Next; + } + + ThreadList = ThreadList->Next; + } +} diff --git a/source/tools/acpiexec/aehandlers.c b/source/tools/acpiexec/aehandlers.c index 3a79109c8..b28541955 100644 --- a/source/tools/acpiexec/aehandlers.c +++ b/source/tools/acpiexec/aehandlers.c @@ -158,10 +158,6 @@ /* Local prototypes */ static void -AeDisplayMethodCallStack ( - void); - -static void AeNotifyHandler1 ( ACPI_HANDLE Device, UINT32 Value, @@ -186,14 +182,6 @@ AeDeviceNotifyHandler ( void *Context); static ACPI_STATUS -AeExceptionHandler ( - ACPI_STATUS AmlStatus, - ACPI_NAME Name, - UINT16 Opcode, - UINT32 AmlOffset, - void *Context); - -static ACPI_STATUS AeTableHandler ( UINT32 Event, void *Table, @@ -239,163 +227,6 @@ static AE_DEBUG_REGIONS AeRegions; /****************************************************************************** * - * FUNCTION: AeSignalHandler - * - * PARAMETERS: Sig - * - * RETURN: none - * - * DESCRIPTION: Master signal handler. Currently handles SIGINT (ctrl-c), - * and SIGSEGV (Segment violation). - * - *****************************************************************************/ - -void ACPI_SYSTEM_XFACE -AeSignalHandler ( - int Sig) -{ - - fflush(stdout); - AcpiOsPrintf ("\n" AE_PREFIX); - - switch (Sig) - { - case SIGINT: - signal(Sig, SIG_IGN); - AcpiOsPrintf ("<Control-C>\n"); - - /* Abort the application if there are no methods executing */ - - if (!AcpiGbl_MethodExecuting) - { - break; - } - - /* - * Abort the method(s). This will also dump the method call - * stack so there is no need to do it here. The application - * will then drop back into the debugger interface. - */ - AcpiGbl_AbortMethod = TRUE; - AcpiOsPrintf (AE_PREFIX "Control Method Call Stack:\n"); - signal (SIGINT, AeSignalHandler); - return; - - case SIGSEGV: - AcpiOsPrintf ("Segmentation Fault\n"); - AeDisplayMethodCallStack (); - break; - - default: - AcpiOsPrintf ("Unknown Signal, %X\n", Sig); - break; - } - - /* Terminate application -- cleanup then exit */ - - AcpiOsPrintf (AE_PREFIX "Terminating\n"); - (void) AcpiOsTerminate (); - exit (0); -} - - -/****************************************************************************** - * - * FUNCTION: AeDisplayMethodCallStack - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Display current method call stack, if possible. - * - *****************************************************************************/ - -static void -AeDisplayMethodCallStack ( - void) -{ - ACPI_WALK_STATE *WalkState; - ACPI_THREAD_STATE *ThreadList = AcpiGbl_CurrentWalkList; - char *FullPathname = NULL; - - - if (!AcpiGbl_MethodExecuting) - { - AcpiOsPrintf (AE_PREFIX "No method is executing\n"); - return; - } - - /* - * Try to find the currently executing control method(s) - * - * Note: The following code may fault if the data structures are - * in an indeterminate state when the interrupt occurs. However, - * in practice, this works quite well and can provide very - * valuable information. - * - * 1) Walk the global thread list - */ - while (ThreadList && - (ThreadList->DescriptorType == ACPI_DESC_TYPE_STATE_THREAD)) - { - /* 2) Walk the walk state list for this thread */ - - WalkState = ThreadList->WalkStateList; - while (WalkState && - (WalkState->DescriptorType == ACPI_DESC_TYPE_WALK)) - { - /* An executing control method */ - - if (WalkState->MethodNode) - { - FullPathname = AcpiNsGetExternalPathname ( - WalkState->MethodNode); - - AcpiOsPrintf (AE_PREFIX - "Executing Method: %s\n", - FullPathname); - } - - /* Execution of a deferred opcode/node */ - - if (WalkState->DeferredNode) - { - FullPathname = AcpiNsGetExternalPathname ( - WalkState->DeferredNode); - - AcpiOsPrintf (AE_PREFIX - "Evaluating deferred node: %s\n", - FullPathname); - } - - /* Get the currently executing AML opcode */ - - if ((WalkState->Opcode != AML_INT_METHODCALL_OP) && - FullPathname) - { - AcpiOsPrintf (AE_PREFIX - "Current AML Opcode in %s: [%s]-0x%4.4X at %p\n", - FullPathname, AcpiPsGetOpcodeName (WalkState->Opcode), - WalkState->Opcode, WalkState->Aml); - } - - if (FullPathname) - { - ACPI_FREE (FullPathname); - FullPathname = NULL; - } - - WalkState = WalkState->Next; - } - - ThreadList = ThreadList->Next; - } -} - - -/****************************************************************************** - * * FUNCTION: AeNotifyHandler(s) * * PARAMETERS: Standard notify handler parameters @@ -571,125 +402,6 @@ AeDeviceNotifyHandler ( /****************************************************************************** * - * FUNCTION: AeExceptionHandler - * - * PARAMETERS: Standard exception handler parameters - * - * RETURN: Status - * - * DESCRIPTION: System exception handler for AcpiExec utility. - * - *****************************************************************************/ - -static ACPI_STATUS -AeExceptionHandler ( - ACPI_STATUS AmlStatus, - ACPI_NAME Name, - UINT16 Opcode, - UINT32 AmlOffset, - void *Context) -{ - ACPI_STATUS NewAmlStatus = AmlStatus; - ACPI_STATUS Status; - ACPI_BUFFER ReturnObj; - ACPI_OBJECT_LIST ArgList; - ACPI_OBJECT Arg[3]; - const char *Exception; - ACPI_HANDLE ErrHandle; - - - Exception = AcpiFormatException (AmlStatus); - AcpiOsPrintf (AE_PREFIX - "Exception %s during execution\n", Exception); - if (Name) - { - AcpiOsPrintf (AE_PREFIX - "Evaluating Method or Node: [%4.4s]", - (char *) &Name); - } - - AcpiOsPrintf ("\n" AE_PREFIX - "AML Opcode [%s], Method Offset ~%5.5X\n", - AcpiPsGetOpcodeName (Opcode), AmlOffset); - - /* Invoke the _ERR method if present */ - - Status = AcpiGetHandle (NULL, "\\_ERR", &ErrHandle); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* Setup parameter object */ - - ArgList.Count = 3; - ArgList.Pointer = Arg; - - Arg[0].Type = ACPI_TYPE_INTEGER; - Arg[0].Integer.Value = AmlStatus; - - Arg[1].Type = ACPI_TYPE_STRING; - Arg[1].String.Pointer = ACPI_CAST_PTR (char, Exception); - Arg[1].String.Length = strlen (Exception); - - Arg[2].Type = ACPI_TYPE_INTEGER; - Arg[2].Integer.Value = AcpiOsGetThreadId(); - - /* Setup return buffer */ - - ReturnObj.Pointer = NULL; - ReturnObj.Length = ACPI_ALLOCATE_BUFFER; - - Status = AcpiEvaluateObject (ErrHandle, NULL, &ArgList, &ReturnObj); - if (ACPI_SUCCESS (Status)) - { - if (ReturnObj.Pointer) - { - /* Override original status */ - - NewAmlStatus = (ACPI_STATUS) - ((ACPI_OBJECT *) ReturnObj.Pointer)->Integer.Value; - - /* Free a buffer created via ACPI_ALLOCATE_BUFFER */ - - AcpiOsFree (ReturnObj.Pointer); - } - } - else if (Status != AE_NOT_FOUND) - { - AcpiOsPrintf (AE_PREFIX - "Could not execute _ERR method, %s\n", - AcpiFormatException (Status)); - } - -Cleanup: - - /* Global overrides */ - - if (AcpiGbl_IgnoreErrors) - { - NewAmlStatus = AE_OK; - } - else if (AmlStatus == AE_AML_INTERNAL) - { - NewAmlStatus = AE_AML_INTERNAL; - AcpiOsPrintf (AE_PREFIX - "Cannot override status %s\n\n", - AcpiFormatException (NewAmlStatus)); - } - else if (NewAmlStatus != AmlStatus) - { - AcpiOsPrintf (AE_PREFIX - "Exception override, new status %s\n\n", - AcpiFormatException (NewAmlStatus)); - } - - return (NewAmlStatus); -} - - -/****************************************************************************** - * * FUNCTION: AeTableHandler * * PARAMETERS: Table handler |