Do not resolve returned index references

date	2001.03.02.00.09.00;	author rmoore1;	state Exp;
This commit is contained in:
aystarik 2005-06-29 17:07:09 +00:00
parent 5147a9c6e6
commit 970e7b2962

View File

@ -2,7 +2,7 @@
*
* Module Name: dsopcode - Dispatcher Op Region support and handling of
* "control" opcodes
* $Revision: 1.34 $
* $Revision: 1.35 $
*
*****************************************************************************/
@ -976,7 +976,6 @@ AcpiDsExecEndControlOp (
* an arg or local), resolve it now because it may
* cease to exist at the end of the method.
*/
Status = AcpiAmlResolveToValue (&WalkState->Operands [0], WalkState);
if (ACPI_FAILURE (Status))
{
@ -1001,12 +1000,19 @@ AcpiDsExecEndControlOp (
* If value being returned is a Reference (such as
* an arg or local), resolve it now because it may
* cease to exist at the end of the method.
*
* Allow references created by the Index operator to return unchanged.
*/
Status = AcpiAmlResolveToValue (&WalkState->Results->Results.ObjDesc [0], WalkState);
if (ACPI_FAILURE (Status))
if (VALID_DESCRIPTOR_TYPE (WalkState->Results->Results.ObjDesc [0], ACPI_DESC_TYPE_INTERNAL) &&
((WalkState->Results->Results.ObjDesc [0])->Common.Type == INTERNAL_TYPE_REFERENCE) &&
((WalkState->Results->Results.ObjDesc [0])->Reference.Opcode != AML_INDEX_OP))
{
return (Status);
Status = AcpiAmlResolveToValue (&WalkState->Results->Results.ObjDesc [0], WalkState);
if (ACPI_FAILURE (Status))
{
return (Status);
}
}
WalkState->ReturnDesc = WalkState->Results->Results.ObjDesc [0];