summaryrefslogtreecommitdiff
path: root/source/compiler/asltree.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/compiler/asltree.c')
-rw-r--r--source/compiler/asltree.c199
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);