diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2016-02-12 18:53:29 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2016-02-12 18:53:29 +0000 |
commit | 67ac2c42d552618270f8ba5431d63944a35a0ee7 (patch) | |
tree | 5c13158cdf7d0b9ff31cb1f23b72fa64440df238 /source/components/disassembler/dmwalk.c | |
parent | 176870a6cad869aa9bbb6b7906be146cc651c359 (diff) |
Notes
Diffstat (limited to 'source/components/disassembler/dmwalk.c')
-rw-r--r-- | source/components/disassembler/dmwalk.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/source/components/disassembler/dmwalk.c b/source/components/disassembler/dmwalk.c index 8dd001108b2a4..43f5686a4566e 100644 --- a/source/components/disassembler/dmwalk.c +++ b/source/components/disassembler/dmwalk.c @@ -410,6 +410,7 @@ AcpiDmDescendingOp ( const ACPI_OPCODE_INFO *OpInfo; UINT32 Name; ACPI_PARSE_OBJECT *NextOp; + ACPI_PARSE_OBJECT *NextOp2; UINT32 AmlOffset; @@ -436,8 +437,7 @@ AcpiDmDescendingOp ( AcpiUtDumpBuffer ( (Info->StartAml + Info->AmlOffset), (Op->Common.Aml - Info->PreviousAml), - DB_BYTE_DISPLAY, - Info->AmlOffset); + DB_BYTE_DISPLAY, Info->AmlOffset); AcpiOsPrintf ("\n"); } @@ -455,6 +455,33 @@ AcpiDmDescendingOp ( return (AE_CTRL_DEPTH); } + if (Op->Common.AmlOpcode == AML_IF_OP) + { + NextOp = AcpiPsGetDepthNext (NULL, Op); + if (NextOp) + { + NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; + } + + /* + * A Zero predicate indicates the possibility of one or more + * External() opcodes within the If() block. + */ + if (NextOp->Common.AmlOpcode == AML_ZERO_OP) + { + NextOp2 = NextOp->Common.Next; + + if (NextOp2 && + (NextOp2->Common.AmlOpcode == AML_EXTERNAL_OP)) + { + /* Ignore the If 0 block and all children */ + + Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; + return (AE_CTRL_DEPTH); + } + } + } + /* Level 0 is at the Definition Block level */ if (Level == 0) @@ -788,8 +815,8 @@ AcpiDmDescendingOp ( NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; return (AE_OK); - case AML_VAR_PACKAGE_OP: case AML_IF_OP: + case AML_VAR_PACKAGE_OP: case AML_WHILE_OP: /* The next op is the size or predicate parameter */ |