diff options
Diffstat (limited to 'source/compiler/asltree.c')
| -rw-r--r-- | source/compiler/asltree.c | 199 |
1 files changed, 140 insertions, 59 deletions
diff --git a/source/compiler/asltree.c b/source/compiler/asltree.c index b0efc9a738ed..c76720a4da99 100644 --- a/source/compiler/asltree.c +++ b/source/compiler/asltree.c @@ -55,10 +55,6 @@ static ACPI_PARSE_OBJECT * TrGetNextNode ( void); -static char * -TrGetNodeFlagName ( - UINT32 Flags); - /******************************************************************************* * @@ -187,7 +183,7 @@ TrUpdateNode ( } DbgPrint (ASL_PARSE_OUTPUT, - "\nUpdateNode: Old - %s, New - %s\n\n", + "\nUpdateNode: Old - %s, New - %s\n", UtGetOpName (Op->Asl.ParseOpcode), UtGetOpName (ParseOpcode)); @@ -261,90 +257,140 @@ TrUpdateNode ( /******************************************************************************* * - * FUNCTION: TrGetNodeFlagName + * FUNCTION: TrPrintNodeCompileFlags * * PARAMETERS: Flags - Flags word to be decoded * - * RETURN: Name string. Always returns a valid string pointer. + * RETURN: None * - * DESCRIPTION: Decode a flags word + * DESCRIPTION: Decode a flags word to text. Displays all flags that are set. * ******************************************************************************/ -static char * -TrGetNodeFlagName ( +void +TrPrintNodeCompileFlags ( UINT32 Flags) { + UINT32 i; + UINT32 FlagBit = 1; + char *FlagName = NULL; + - switch (Flags) + for (i = 0; i < 32; i++) { - case NODE_VISITED: + switch (Flags & FlagBit) + { + case NODE_VISITED: + + FlagName = "NODE_VISITED"; + break; + + case NODE_AML_PACKAGE: - return ("NODE_VISITED"); + FlagName = "NODE_AML_PACKAGE"; + break; + + case NODE_IS_TARGET: + + FlagName = "NODE_IS_TARGET"; + break; + + case NODE_IS_RESOURCE_DESC: - case NODE_AML_PACKAGE: + FlagName = "NODE_IS_RESOURCE_DESC"; + break; + + case NODE_IS_RESOURCE_FIELD: + + FlagName = "NODE_IS_RESOURCE_FIELD"; + break; - return ("NODE_AML_PACKAGE"); + case NODE_HAS_NO_EXIT: - case NODE_IS_TARGET: + FlagName = "NODE_HAS_NO_EXIT"; + break; - return ("NODE_IS_TARGET"); + case NODE_IF_HAS_NO_EXIT: - case NODE_IS_RESOURCE_DESC: + FlagName = "NODE_IF_HAS_NO_EXIT"; + break; - return ("NODE_IS_RESOURCE_DESC"); + case NODE_NAME_INTERNALIZED: - case NODE_IS_RESOURCE_FIELD: + FlagName = "NODE_NAME_INTERNALIZED"; + break; - return ("NODE_IS_RESOURCE_FIELD"); + case NODE_METHOD_NO_RETVAL: - case NODE_HAS_NO_EXIT: + FlagName = "NODE_METHOD_NO_RETVAL"; + break; - return ("NODE_HAS_NO_EXIT"); + case NODE_METHOD_SOME_NO_RETVAL: - case NODE_IF_HAS_NO_EXIT: + FlagName = "NODE_METHOD_SOME_NO_RETVAL"; + break; - return ("NODE_IF_HAS_NO_EXIT"); + case NODE_RESULT_NOT_USED: - case NODE_NAME_INTERNALIZED: + FlagName = "NODE_RESULT_NOT_USED"; + break; - return ("NODE_NAME_INTERNALIZED"); + case NODE_METHOD_TYPED: - case NODE_METHOD_NO_RETVAL: + FlagName = "NODE_METHOD_TYPED"; + break; - return ("NODE_METHOD_NO_RETVAL"); + case NODE_COMPILE_TIME_CONST: - case NODE_METHOD_SOME_NO_RETVAL: + FlagName = "NODE_COMPILE_TIME_CONST"; + break; - return ("NODE_METHOD_SOME_NO_RETVAL"); + case NODE_IS_TERM_ARG: - case NODE_RESULT_NOT_USED: + FlagName = "NODE_IS_TERM_ARG"; + break; - return ("NODE_RESULT_NOT_USED"); + case NODE_WAS_ONES_OP: - case NODE_METHOD_TYPED: + FlagName = "NODE_WAS_ONES_OP"; + break; - return ("NODE_METHOD_TYPED"); + case NODE_IS_NAME_DECLARATION: - case NODE_COMPILE_TIME_CONST: + FlagName = "NODE_IS_NAME_DECLARATION"; + break; - return ("NODE_COMPILE_TIME_CONST"); + case NODE_COMPILER_EMITTED: - case NODE_IS_TERM_ARG: + FlagName = "NODE_COMPILER_EMITTED"; + break; - return ("NODE_IS_TERM_ARG"); + case NODE_IS_DUPLICATE: - case NODE_WAS_ONES_OP: + FlagName = "NODE_IS_DUPLICATE"; + break; - return ("NODE_WAS_ONES_OP"); + case NODE_IS_RESOURCE_DATA: - case NODE_IS_NAME_DECLARATION: + FlagName = "NODE_IS_RESOURCE_DATA"; + break; - return ("NODE_IS_NAME_DECLARATION"); + case NODE_IS_NULL_RETURN: - default: + FlagName = "NODE_IS_NULL_RETURN"; + break; - return ("Multiple Flags (or unknown flag) set"); + default: + break; + } + + if (FlagName) + { + DbgPrint (ASL_PARSE_OUTPUT, " %s", FlagName); + FlagName = NULL; + } + + FlagBit <<= 1; } } @@ -368,15 +414,17 @@ TrSetNodeFlags ( UINT32 Flags) { - DbgPrint (ASL_PARSE_OUTPUT, - "\nSetNodeFlags: Op %p, %8.8X %s\n\n", Op, Flags, - TrGetNodeFlagName (Flags)); - if (!Op) { return (NULL); } + DbgPrint (ASL_PARSE_OUTPUT, + "\nSetNodeFlags: %s Op %p, %8.8X", Op->Asl.ParseOpName, Op, Flags); + + TrPrintNodeCompileFlags (Flags); + DbgPrint (ASL_PARSE_OUTPUT, "\n\n"); + Op->Asl.CompileFlags |= Flags; return (Op); } @@ -588,7 +636,40 @@ TrCreateLeafNode ( DbgPrint (ASL_PARSE_OUTPUT, "\nCreateLeafNode Ln/Col %u/%u NewNode %p Op %s\n\n", - Op->Asl.LineNumber, Op->Asl.Column, Op, UtGetOpName(ParseOpcode)); + Op->Asl.LineNumber, Op->Asl.Column, Op, UtGetOpName (ParseOpcode)); + + return (Op); +} + + +/******************************************************************************* + * + * FUNCTION: TrCreateNullTarget + * + * PARAMETERS: None + * + * RETURN: Pointer to the new node. Aborts on allocation failure + * + * DESCRIPTION: Create a "null" target node. This is defined by the ACPI + * specification to be a zero AML opcode, and indicates that + * no target has been specified for the parent operation + * + ******************************************************************************/ + +ACPI_PARSE_OBJECT * +TrCreateNullTarget ( + void) +{ + ACPI_PARSE_OBJECT *Op; + + + Op = TrAllocateNode (PARSEOP_ZERO); + Op->Asl.CompileFlags |= (NODE_IS_TARGET | NODE_COMPILE_TIME_CONST); + + DbgPrint (ASL_PARSE_OUTPUT, + "\nCreateNullTarget Ln/Col %u/%u NewNode %p Op %s\n", + Op->Asl.LineNumber, Op->Asl.Column, Op, + UtGetOpName (Op->Asl.ParseOpcode)); return (Op); } @@ -620,7 +701,6 @@ TrCreateConstantLeafNode ( time_t CurrentTime; char *StaticTimeString; char *TimeString; - char *Path; char *Filename; @@ -647,7 +727,7 @@ TrCreateConstantLeafNode ( /* Get the simple filename from the full path */ - FlSplitInputPathname (Op->Asl.Filename, &Path, &Filename); + FlSplitInputPathname (Op->Asl.Filename, NULL, &Filename); Op->Asl.Value.String = Filename; break; @@ -672,7 +752,7 @@ TrCreateConstantLeafNode ( } DbgPrint (ASL_PARSE_OUTPUT, - "\nCreateConstantLeafNode Ln/Col %u/%u NewNode %p Op %s Value %8.8X%8.8X ", + "\nCreateConstantLeafNode Ln/Col %u/%u NewNode %p Op %s Value %8.8X%8.8X \n", Op->Asl.LineNumber, Op->Asl.Column, Op, UtGetOpName (ParseOpcode), ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer)); return (Op); @@ -813,7 +893,8 @@ TrCreateValuedLeafNode ( case PARSEOP_INTEGER: - DbgPrint (ASL_PARSE_OUTPUT, "INTEGER"); + DbgPrint (ASL_PARSE_OUTPUT, "INTEGER->%8.8X%8.8X", + ACPI_FORMAT_UINT64 (Value)); break; default: @@ -948,7 +1029,7 @@ TrCreateNode ( } va_end(ap); - DbgPrint (ASL_PARSE_OUTPUT, "\n\n"); + DbgPrint (ASL_PARSE_OUTPUT, "\n"); return (Op); } @@ -1104,7 +1185,7 @@ TrLinkPeerNode ( DbgPrint (ASL_PARSE_OUTPUT, - "\nLinkPeerNode: 1=%p (%s), 2=%p (%s)\n\n", + "\nLinkPeerNode: 1=%p (%s), 2=%p (%s)\n", Op1, Op1 ? UtGetOpName(Op1->Asl.ParseOpcode) : NULL, Op2, Op2 ? UtGetOpName(Op2->Asl.ParseOpcode) : NULL); @@ -1130,7 +1211,7 @@ TrLinkPeerNode ( if (Op1 == Op2) { DbgPrint (ASL_DEBUG_OUTPUT, - "\n\n************* Internal error, linking node to itself %p\n\n\n", + "\n************* Internal error, linking node to itself %p\n", Op1); AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Op1, "Linking node to itself"); @@ -1214,7 +1295,7 @@ TrLinkPeerNodes ( } va_end (ap); - DbgPrint (ASL_PARSE_OUTPUT,"\n\n"); + DbgPrint (ASL_PARSE_OUTPUT,"\n"); return (Start); } @@ -1241,7 +1322,7 @@ TrLinkChildNode ( DbgPrint (ASL_PARSE_OUTPUT, - "\nLinkChildNode: Parent=%p (%s), Child=%p (%s)\n\n", + "\nLinkChildNode: Parent=%p (%s), Child=%p (%s)\n", Op1, Op1 ? UtGetOpName(Op1->Asl.ParseOpcode): NULL, Op2, Op2 ? UtGetOpName(Op2->Asl.ParseOpcode): NULL); |
