diff options
-rw-r--r-- | source/compiler/aslcompiler.l | 2 | ||||
-rw-r--r-- | source/compiler/aslmain.c | 9 | ||||
-rw-r--r-- | source/components/disassembler/dmwalk.c | 25 | ||||
-rw-r--r-- | source/include/acglobal.h | 4 |
4 files changed, 37 insertions, 3 deletions
diff --git a/source/compiler/aslcompiler.l b/source/compiler/aslcompiler.l index 6737c80e5..f98179678 100644 --- a/source/compiler/aslcompiler.l +++ b/source/compiler/aslcompiler.l @@ -273,7 +273,7 @@ NamePathTail [.]{NameSeg} "Mutex" { count (2); return (PARSEOP_MUTEX); } "Name" { count (2); return (PARSEOP_NAME); } "NAnd" { count (3); return (PARSEOP_NAND); } -"Noop" { count (3); return (PARSEOP_NOOP); } +"Noop" { if (!AcpiGbl_IgnoreNoopOperator) {count (3); return (PARSEOP_NOOP);} } "NOr" { count (3); return (PARSEOP_NOR); } "Not" { count (3); return (PARSEOP_NOT); } "Notify" { count (3); return (PARSEOP_NOTIFY); } diff --git a/source/compiler/aslmain.c b/source/compiler/aslmain.c index 5243024af..d4e18aada 100644 --- a/source/compiler/aslmain.c +++ b/source/compiler/aslmain.c @@ -225,6 +225,7 @@ Options ( ACPI_OPTION ("-oi", "Disable integer optimization to Zero/One/Ones"); ACPI_OPTION ("-on", "Disable named reference string optimization"); ACPI_OPTION ("-cr", "Disable Resource Descriptor error checking"); + ACPI_OPTION ("-in", "Ignore NoOp operators"); ACPI_OPTION ("-r <revision>", "Override table header Revision (1-255)"); printf ("\nASL Listing Files:\n"); @@ -244,6 +245,7 @@ Options ( ACPI_OPTION ("", "(Obtain DSDT from current system if no input file)"); ACPI_OPTION ("-e [f1,f2]", "Include ACPI table(s) for external symbol resolution"); ACPI_OPTION ("-g", "Get ACPI tables and write to files (*.dat)"); + ACPI_OPTION ("-in", "Ignore NoOp opcodes"); ACPI_OPTION ("-vt", "Dump binary table data in hex format within output file"); printf ("\nHelp:\n"); @@ -694,6 +696,13 @@ AslDoOptions ( Gbl_C_IncludeOutputFlag = TRUE; break; + case 'n': + + /* Compiler/Disassembler: Ignore the NOOP operator */ + + AcpiGbl_IgnoreNoopOperator = TRUE; + break; + default: printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); return (-1); diff --git a/source/components/disassembler/dmwalk.c b/source/components/disassembler/dmwalk.c index 93e6b2fe6..a9248302e 100644 --- a/source/components/disassembler/dmwalk.c +++ b/source/components/disassembler/dmwalk.c @@ -513,7 +513,30 @@ AcpiDmDescendingOp ( * This is a first-level element of a term list, * indent a new line */ - AcpiDmIndent (Level); + switch (Op->Common.AmlOpcode) + { + case AML_NOOP_OP: + /* + * Optionally just ignore this opcode. Some tables use + * NoOp opcodes for "padding" out packages that the BIOS + * changes dynamically. This can leave hundreds or + * thousands of NoOp opcodes that if disassembled, + * cannot be compiled because they are syntactically + * incorrect. + */ + if (AcpiGbl_IgnoreNoopOperator) + { + Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; + return (AE_OK); + } + + /* Fallthrough */ + + default: + AcpiDmIndent (Level); + break; + } + Info->LastLevel = Level; Info->Count = 0; } diff --git a/source/include/acglobal.h b/source/include/acglobal.h index d17082a03..7a71c33da 100644 --- a/source/include/acglobal.h +++ b/source/include/acglobal.h @@ -484,7 +484,7 @@ ACPI_EXTERN UINT32 AcpiGbl_TraceDbgLayer; /***************************************************************************** * - * Debugger globals + * Debugger and Disassembler globals * ****************************************************************************/ @@ -492,6 +492,8 @@ ACPI_EXTERN UINT8 AcpiGbl_DbOutputFlags; #ifdef ACPI_DISASSEMBLER +BOOLEAN ACPI_INIT_GLOBAL (AcpiGbl_IgnoreNoopOperator, FALSE); + ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_disasm; ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_verbose; ACPI_EXTERN ACPI_EXTERNAL_LIST *AcpiGbl_ExternalList; |