mirror of
https://github.com/acpica/acpica/
synced 2025-02-25 09:54:42 +03:00
Merge pull request #211 from debox1/feature-ex-in-place
compiler: disassembler: compile and disassemble externals in place
This commit is contained in:
commit
0c0d43e8a2
@ -1234,6 +1234,29 @@ AcpiDmEmitExternals (
|
||||
AcpiOsPrintf ("\n");
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmEmitExternal
|
||||
*
|
||||
* PARAMETERS: Op External Parse Object
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Emit an External() ASL statement for the current External
|
||||
* parse object
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDmEmitExternal (
|
||||
ACPI_PARSE_OBJECT *NameOp,
|
||||
ACPI_PARSE_OBJECT *TypeOp)
|
||||
{
|
||||
AcpiOsPrintf ("External (");
|
||||
AcpiDmNamestring (NameOp->Common.Value.Name);
|
||||
AcpiOsPrintf ("%s)\n",
|
||||
AcpiDmGetObjectTypeName (TypeOp->Common.Value.Integer));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
|
@ -357,8 +357,17 @@ CmDoCompile (
|
||||
{
|
||||
Event = UtBeginEvent ("Resolve all Externals");
|
||||
DbgPrint (ASL_DEBUG_OUTPUT, "\nResolve Externals\n\n");
|
||||
TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE,
|
||||
ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL);
|
||||
|
||||
if (Gbl_DoExternalsInPlace)
|
||||
{
|
||||
TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD,
|
||||
ExAmlExternalWalkBegin, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE,
|
||||
ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL);
|
||||
}
|
||||
UtEndEvent (Event);
|
||||
}
|
||||
|
||||
|
@ -254,6 +254,7 @@ ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_PruneParseTree, FALSE);
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_DoTypechecking, TRUE);
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_EnableReferenceTypechecking, FALSE);
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_DoExternals, TRUE);
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_DoExternalsInPlace, FALSE);
|
||||
|
||||
|
||||
#define HEX_OUTPUT_NONE 0
|
||||
|
@ -647,6 +647,16 @@ AslDoOptions (
|
||||
AcpiGbl_DmEmitExternalOpcodes = TRUE;
|
||||
break;
|
||||
|
||||
case 'E':
|
||||
|
||||
/*
|
||||
* iASL: keep External opcodes in place.
|
||||
* No affect if Gbl_DoExternals is false.
|
||||
*/
|
||||
|
||||
Gbl_DoExternalsInPlace = TRUE;
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
|
||||
/* Disable folding on "normal" expressions */
|
||||
|
@ -1078,15 +1078,13 @@ AcpiDmDisassembleOneOp (
|
||||
|
||||
if (AcpiGbl_DmEmitExternalOpcodes)
|
||||
{
|
||||
AcpiOsPrintf ("/* Opcode 0x15 */ ");
|
||||
|
||||
/* Fallthrough */
|
||||
}
|
||||
else
|
||||
{
|
||||
AcpiDmEmitExternal (AcpiPsGetArg(Op, 0),
|
||||
AcpiPsGetArg(Op, 1));
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
/* Just get the opcode name and print it */
|
||||
|
@ -135,6 +135,14 @@ AcpiDmEmitExternals (
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
AcpiDmEmitExternal (
|
||||
ACPI_PARSE_OBJECT *NameOp,
|
||||
ACPI_PARSE_OBJECT *TypeOp)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Local prototypes */
|
||||
@ -600,7 +608,11 @@ AcpiDmDescendingOp (
|
||||
|
||||
/* Emit all External() declarations here */
|
||||
|
||||
AcpiDmEmitExternals ();
|
||||
if (!AcpiGbl_DmEmitExternalOpcodes)
|
||||
{
|
||||
AcpiDmEmitExternals ();
|
||||
}
|
||||
|
||||
return (AE_OK);
|
||||
}
|
||||
}
|
||||
@ -679,6 +691,12 @@ AcpiDmDescendingOp (
|
||||
Info->Level--;
|
||||
}
|
||||
|
||||
if (Op->Common.AmlOpcode == AML_EXTERNAL_OP)
|
||||
{
|
||||
Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
|
||||
return (AE_CTRL_DEPTH);
|
||||
}
|
||||
|
||||
/* Start the opcode argument list if necessary */
|
||||
|
||||
if ((OpInfo->Flags & AML_HAS_ARGS) ||
|
||||
|
@ -874,6 +874,11 @@ void
|
||||
AcpiDmEmitExternals (
|
||||
void);
|
||||
|
||||
void
|
||||
AcpiDmEmitExternal (
|
||||
ACPI_PARSE_OBJECT *NameOp,
|
||||
ACPI_PARSE_OBJECT *TypeOp);
|
||||
|
||||
void
|
||||
AcpiDmUnresolvedWarning (
|
||||
UINT8 Type);
|
||||
|
Loading…
x
Reference in New Issue
Block a user