diff options
Diffstat (limited to 'source/components/disassembler/dmwalk.c')
-rw-r--r-- | source/components/disassembler/dmwalk.c | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/source/components/disassembler/dmwalk.c b/source/components/disassembler/dmwalk.c index 92f27e5..823ce18 100644 --- a/source/components/disassembler/dmwalk.c +++ b/source/components/disassembler/dmwalk.c @@ -285,7 +285,8 @@ AcpiDmBlockType ( case AML_BUFFER_OP: if ((Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) || - (Op->Common.DisasmOpcode == ACPI_DASM_UUID)) + (Op->Common.DisasmOpcode == ACPI_DASM_UUID) || + (Op->Common.DisasmOpcode == ACPI_DASM_PLD_METHOD)) { return (BLOCK_NONE); } @@ -301,6 +302,17 @@ AcpiDmBlockType ( return (BLOCK_PAREN); + case AML_INT_METHODCALL_OP: + + if (Op->Common.Parent && + ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || + (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP))) + { + /* This is a reference to a method, not an invocation */ + + return (BLOCK_NONE); + } + default: OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); @@ -477,13 +489,20 @@ AcpiDmDescendingOp ( * keep track of the current column. */ Info->Count++; - if (Info->Count /* +Info->LastLevel */ > 10) + if (Info->Count /* +Info->LastLevel */ > 12) { Info->Count = 0; AcpiOsPrintf ("\n"); AcpiDmIndent (Info->LastLevel + 1); } + /* If ASL+ is enabled, check for a C-style operator */ + + if (AcpiDmCheckForSymbolicOpcode (Op, Info)) + { + return (AE_OK); + } + /* Print the opcode name */ AcpiDmDisassembleOneOp (NULL, Info, Op); @@ -563,7 +582,6 @@ AcpiDmDescendingOp ( AcpiDmPredefinedDescription (Op); break; - case AML_NAME_OP: /* Check for _HID and related EISAID() */ @@ -572,13 +590,11 @@ AcpiDmDescendingOp ( AcpiOsPrintf (", "); break; - case AML_REGION_OP: AcpiDmRegionFlags (Op); break; - case AML_POWER_RES_OP: /* Mark the next two Ops as part of the parameter list */ @@ -591,7 +607,6 @@ AcpiDmDescendingOp ( NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; return (AE_OK); - case AML_PROCESSOR_OP: /* Mark the next three Ops as part of the parameter list */ @@ -607,20 +622,17 @@ AcpiDmDescendingOp ( NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; return (AE_OK); - case AML_MUTEX_OP: case AML_DATA_REGION_OP: AcpiOsPrintf (", "); return (AE_OK); - case AML_EVENT_OP: case AML_ALIAS_OP: return (AE_OK); - case AML_SCOPE_OP: case AML_DEVICE_OP: case AML_THERMAL_ZONE_OP: @@ -628,7 +640,6 @@ AcpiDmDescendingOp ( AcpiOsPrintf (")"); break; - default: AcpiOsPrintf ("*** Unhandled named opcode %X\n", @@ -825,9 +836,9 @@ AcpiDmAscendingOp ( { case BLOCK_PAREN: - /* Completed an op that has arguments, add closing paren */ + /* Completed an op that has arguments, add closing paren if needed */ - AcpiOsPrintf (")"); + AcpiDmCloseOperator (Op); if (Op->Common.AmlOpcode == AML_NAME_OP) { @@ -999,8 +1010,21 @@ AcpiDmAscendingOp ( { Info->Level++; } + + /* + * For ASL+, check for and emit a C-style symbol. If valid, the + * symbol string has been deferred until after the first operand + */ + if (AcpiGbl_CstyleDisassembly) + { + if (Op->Asl.OperatorSymbol) + { + AcpiOsPrintf ("%s", Op->Asl.OperatorSymbol); + Op->Asl.OperatorSymbol = NULL; + } + } + return (AE_OK); } - #endif /* ACPI_DISASSEMBLER */ |