aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2020-04-30 23:40:36 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2020-04-30 23:40:36 +0000
commita95d9dd0e22ace9a8f960e939af923c79e7a271e (patch)
tree99b9b07bd34bc3ebedbbeeaff97882b0e0778346
parenta117a0a6c82c5a5030040bd2b75704a1366741d6 (diff)
downloadsrc-a95d9dd0e22ace9a8f960e939af923c79e7a271e.tar.gz
src-a95d9dd0e22ace9a8f960e939af923c79e7a271e.zip
Import ACPICA 20200430.vendor/acpica/20200430
Notes
Notes: svn path=/vendor-sys/acpica/dist/; revision=360512 svn path=/vendor-sys/acpica/20200430/; revision=360513; tag=vendor/acpica/20200430
-rw-r--r--changes.txt59
-rw-r--r--source/common/acgetline.c2
-rw-r--r--source/common/dmtbdump2.c4
-rw-r--r--source/compiler/aslcompiler.l2
-rw-r--r--source/compiler/aslload.c81
-rw-r--r--source/compiler/aslmessages.c1
-rw-r--r--source/compiler/aslmessages.h1
-rw-r--r--source/compiler/aslpredef.c2
-rw-r--r--source/compiler/aslxref.c165
-rw-r--r--source/compiler/dtutils.c11
-rw-r--r--source/components/debugger/dbhistry.c1
-rw-r--r--source/components/disassembler/dmbuffer.c19
-rw-r--r--source/components/dispatcher/dsfield.c24
-rw-r--r--source/components/executer/exfield.c2
-rw-r--r--source/include/acglobal.h1
-rw-r--r--source/include/acpixf.h2
-rw-r--r--source/include/acpredef.h4
-rw-r--r--source/tools/acpiexec/aemain.c15
18 files changed, 313 insertions, 83 deletions
diff --git a/changes.txt b/changes.txt
index 27a2ee349ff3..ec64db275f84 100644
--- a/changes.txt
+++ b/changes.txt
@@ -1,4 +1,61 @@
----------------------------------------
+
+
+30 April 2020. Summary of changes for version 20200430:
+
+
+1) ACPICA kernel-resident subsystem:
+
+Cleaned up the coding style of a couple of global variables
+(AcpiGbl_NextCmdNum and AcpiProtocolLengths) caught by static analyzers.
+AcpiProtocolLengths was made static, and the definition of
+AcpiGbl_NextCmdNum was moved to acglobal.h.
+
+
+2) iASL Compiler/Disassembler and ACPICA tools:
+
+iASL DataTable Compiler: Fixed a segfault on errors that aren't directly
+associated with a field.
+
+Disassembler: has been made more resilient so that it will continue to
+parse AML even if the AML generates ACPI namespace errors. This enables
+iASL to disassemble some AML that may have been compiled using older
+versions of iASL that no longer compile with newer versions of iASL.
+
+iASL: Fixed the required parameters for _NIH and _NIG. Previously, there
+was a mixup where _NIG required one parameter and _NIH required zero
+parameters. This change swaps these parameter requirements. Now it is
+required that _NIH must be called with one parameter and _NIG requires
+zero parameters.
+
+iASL: Allow use of undefined externals as long as they are protected by
+an if (CondRefOf (...)) block when compiling multiple definition blocks.
+
+iASL: Fixed the type override behavior of named objects that are declared
+as External. External declarations will no longer override the type of
+the actual definition if it already exists.
+
+AcpiNames: Added setargv.obj to the MSVC 2017 link sequence to enable
+command line wildcard support on Windows. Note: the AcpiNames utility is
+essentially redundant with the AcpiExec utility (using the "namespace"
+command) and is therefore deprecated. It will be removed in future
+releases of ACPICA.
+
+Disassembler: ignore AE_ALREADY_EXISTS status when parsing create*
+operators. The disassembler is intended to emit existing ASL code as-is.
+Therefore, error messages emitted during disassembly should be ignored or
+handled in a way such that the disassembler can continue to parse the
+AML. This change ignores AE_ALREADY_EXISTS errors during the deferred Op
+parsing for create operators in order to complete parsing ASL termlists.
+
+iASL DataTable Compiler: IVRS table: fix potentially uninitialized
+variable warning. Some compilers catch potential uninitialized variables.
+This is done by examining branches of if/else statements. This change
+replaces an "else if" with an "else" to fix the uninitialized variable
+warning.
+
+
+----------------------------------------
26 March 2020. Summary of changes for version 20200326:
@@ -674,7 +731,7 @@ temporary.
iASL: Emit error for creation of a zero-length operation region. Such a
region is rather pointless. If encountered, a runtime error is also
-implemented in the interpeter.
+implemented in the interpreter.
Debugger: Fix a possible fault with the "test objects" command.
diff --git a/source/common/acgetline.c b/source/common/acgetline.c
index cf9d779a7f71..e1ddaa69c703 100644
--- a/source/common/acgetline.c
+++ b/source/common/acgetline.c
@@ -189,8 +189,6 @@ AcpiAcClearLine (
#define _ASCII_LEFT_ARROW 'D'
#define _ASCII_NEWLINE '\n'
-extern UINT32 AcpiGbl_NextCmdNum;
-
/* Erase a single character on the input command line */
#define ACPI_CLEAR_CHAR() \
diff --git a/source/common/dmtbdump2.c b/source/common/dmtbdump2.c
index 688a2cf94f48..45484825a1da 100644
--- a/source/common/dmtbdump2.c
+++ b/source/common/dmtbdump2.c
@@ -528,8 +528,10 @@ AcpiDmDumpIvrs (
DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
sizeof (ACPI_IVRS_HARDWARE1));
}
- else if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2)
+ else
{
+ /* ACPI_IVRS_TYPE_HARDWARE2 subtable type */
+
EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE2);
DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
sizeof (ACPI_IVRS_HARDWARE2));
diff --git a/source/compiler/aslcompiler.l b/source/compiler/aslcompiler.l
index 4c3fbde3ae93..c12eb90bbb64 100644
--- a/source/compiler/aslcompiler.l
+++ b/source/compiler/aslcompiler.l
@@ -819,7 +819,7 @@ NamePathTail [.]{NameSeg}
}
/*
- * The eror code is contained inside the
+ * The error code is contained inside the
* {ErrorCode} pattern. Extract it and log it
* as the expected error code.
*/
diff --git a/source/compiler/aslload.c b/source/compiler/aslload.c
index bd2fc97745ca..bdc0d805e678 100644
--- a/source/compiler/aslload.c
+++ b/source/compiler/aslload.c
@@ -1,6 +1,6 @@
/******************************************************************************
*
- * Module Name: dswload - Dispatcher namespace load callbacks
+ * Module Name: aslload - compiler namespace load callbacks
*
*****************************************************************************/
@@ -201,7 +201,6 @@ LdAnalyzeExternals (
ACPI_NAMESPACE_NODE *Node,
ACPI_PARSE_OBJECT *Op,
ACPI_OBJECT_TYPE ExternalOpType,
- ACPI_OBJECT_TYPE ObjectType,
ACPI_WALK_STATE *WalkState);
@@ -515,7 +514,6 @@ LdNamespace1Begin (
ACPI_PARSE_OBJECT *MethodOp;
ACPI_STATUS Status;
ACPI_OBJECT_TYPE ObjectType;
- ACPI_OBJECT_TYPE ActualObjectType = ACPI_TYPE_ANY;
char *Path;
UINT32 Flags = ACPI_NS_NO_UPSEARCH;
ACPI_PARSE_OBJECT *Arg;
@@ -689,8 +687,7 @@ LdNamespace1Begin (
*
* first child is name, next child is ObjectType
*/
- ActualObjectType = (UINT8) Op->Asl.Child->Asl.Next->Asl.Value.Integer;
- ObjectType = ACPI_TYPE_ANY;
+ ObjectType = (UINT8) Op->Asl.Child->Asl.Next->Asl.Value.Integer;
/*
* We will mark every new node along the path as "External". This
@@ -709,7 +706,7 @@ LdNamespace1Begin (
* Store (\_SB_.PCI0.ABCD, Local0)
* }
*/
- Flags |= ACPI_NS_EXTERNAL;
+ Flags |= ACPI_NS_EXTERNAL | ACPI_NS_DONT_OPEN_SCOPE;
break;
case PARSEOP_DEFAULT_ARG:
@@ -913,8 +910,7 @@ LdNamespace1Begin (
else if ((Node->Flags & ANOBJ_IS_EXTERNAL) ||
(Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
{
- Status = LdAnalyzeExternals (Node, Op, ActualObjectType,
- ObjectType, WalkState);
+ Status = LdAnalyzeExternals (Node, Op, ObjectType, WalkState);
if (ACPI_FAILURE (Status))
{
if (Status == AE_ERROR)
@@ -929,6 +925,19 @@ LdNamespace1Begin (
}
return_ACPI_STATUS (Status);
}
+
+ if (!(Node->Flags & ANOBJ_IS_EXTERNAL) &&
+ (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
+ {
+ /*
+ * If we get to here, it means that an actual definition of
+ * the object declared external exists. Meaning that Op
+ * loading this this Op should have no change to the ACPI
+ * namespace. By going to FinishNode, we skip the
+ * assignment of Node->Op = Op.
+ */
+ goto FinishNode;
+ }
}
else
{
@@ -980,30 +989,15 @@ LdNamespace1Begin (
}
}
-FinishNode:
- /*
- * Point the parse node to the new namespace node, and point
- * the Node back to the original Parse node
- */
- Op->Asl.Node = Node;
+ /* Point the Node back to the original Parse node */
+
Node->Op = Op;
- /*
- * Set the actual data type if appropriate (EXTERNAL term only)
- * As of 11/19/2019, ASL External() does not support parameter
- * counts. When an External method is loaded, the parameter count is
- * recorded in the external's arg count parameter. The parameter count may
- * or may not be known in the declaration. If the value of this node turns
- * out to be ASL_EXTERNAL_METHOD_UNKNOWN_PARAMS, it indicates that
- * we do not know the parameter count and that we must look at the usage of
- * the External method call to get this information.
- */
- if (ActualObjectType != ACPI_TYPE_ANY)
- {
- Node->Type = (UINT8) ActualObjectType;
- Node->Value = (UINT32)
- Op->Asl.Child->Asl.Next->Asl.Next->Asl.Value.Integer;
- }
+FinishNode:
+
+ /* Point the parse node to the new namespace node */
+
+ Op->Asl.Node = Node;
if (Op->Asl.ParseOpcode == PARSEOP_METHOD)
{
@@ -1013,6 +1007,13 @@ FinishNode:
*/
Node->Value = (UINT32) Op->Asl.Extra;
}
+ else if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL &&
+ Node->Type == ACPI_TYPE_METHOD &&
+ (Node->Flags & ANOBJ_IS_EXTERNAL))
+ {
+ Node->Value =
+ (UINT32) Op->Asl.Child->Asl.Next->Asl.Next->Asl.Value.Integer;
+ }
return_ACPI_STATUS (Status);
}
@@ -1020,7 +1021,7 @@ FinishNode:
/*******************************************************************************
*
- * FUNCTION: LdAnalyzeExternals
+ * FUNCTION: LdMatchExternType
*
* PARAMETERS: Type1
* Type2
@@ -1037,7 +1038,7 @@ FinishNode:
******************************************************************************/
static BOOLEAN
-LdTypesMatchExternType (
+LdMatchExternType (
ACPI_OBJECT_TYPE Type1,
ACPI_OBJECT_TYPE Type2)
{
@@ -1093,7 +1094,6 @@ LdTypesMatchExternType (
* PARAMETERS: Node - Node that represents the named object
* Op - Named object declaring this named object
* ExternalOpType - Type of ExternalOp
- * ObjectType - Type of Declared object
* WalkState - Current WalkState
*
* RETURN: Status
@@ -1111,7 +1111,6 @@ LdAnalyzeExternals (
ACPI_NAMESPACE_NODE *Node,
ACPI_PARSE_OBJECT *Op,
ACPI_OBJECT_TYPE ExternalOpType,
- ACPI_OBJECT_TYPE ObjectType,
ACPI_WALK_STATE *WalkState)
{
ACPI_STATUS Status = AE_OK;
@@ -1135,12 +1134,12 @@ LdAnalyzeExternals (
else
{
ActualExternalOpType = Node->Type;
- ActualOpType = ObjectType;
+ ActualOpType = ExternalOpType;
}
if ((ActualOpType != ACPI_TYPE_ANY) &&
(ActualExternalOpType != ACPI_TYPE_ANY) &&
- !LdTypesMatchExternType (ActualExternalOpType, ActualOpType))
+ !LdMatchExternType (ActualExternalOpType, ActualOpType))
{
if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL &&
Node->Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)
@@ -1168,6 +1167,8 @@ LdAnalyzeExternals (
}
}
+ /* Set the object type of the external */
+
if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
(Op->Asl.ParseOpcode != PARSEOP_EXTERNAL))
{
@@ -1176,13 +1177,13 @@ LdAnalyzeExternals (
* previously declared External
*/
Node->Flags &= ~ANOBJ_IS_EXTERNAL;
- Node->Type = (UINT8) ObjectType;
+ Node->Type = (UINT8) ExternalOpType;
/* Just retyped a node, probably will need to open a scope */
- if (AcpiNsOpensScope (ObjectType))
+ if (AcpiNsOpensScope (ExternalOpType))
{
- Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
+ Status = AcpiDsScopeStackPush (Node, ExternalOpType, WalkState);
if (ACPI_FAILURE (Status))
{
return (Status);
@@ -1203,7 +1204,7 @@ LdAnalyzeExternals (
}
else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
(Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
- (ObjectType == ACPI_TYPE_ANY))
+ (ExternalOpType == ACPI_TYPE_ANY))
{
/* Allow update of externals of unknown type. */
diff --git a/source/compiler/aslmessages.c b/source/compiler/aslmessages.c
index 81280b28cb45..eb3449409b53 100644
--- a/source/compiler/aslmessages.c
+++ b/source/compiler/aslmessages.c
@@ -380,6 +380,7 @@ const char *AslCompilerMsgs [] =
/* ASL_MSG_TYPE_MISMATCH_FOUND_HERE */ "Actual object declaration:",
/* ASL_MSG_DUPLICATE_EXTERN_MISMATCH */ "Type mismatch between multiple external declarations detected",
/* ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE */"Duplicate external declaration:",
+/* ASL_MSG_CONDREF_NEEDS_EXTERNAL_DECL */"CondRefOf parameter requires External() declaration",
};
/* Table compiler */
diff --git a/source/compiler/aslmessages.h b/source/compiler/aslmessages.h
index 6d5ffd4d6d5b..9a7215c63f23 100644
--- a/source/compiler/aslmessages.h
+++ b/source/compiler/aslmessages.h
@@ -382,6 +382,7 @@ typedef enum
ASL_MSG_TYPE_MISMATCH_FOUND_HERE,
ASL_MSG_DUPLICATE_EXTERN_MISMATCH,
ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE,
+ ASL_MSG_CONDREF_NEEDS_EXTERNAL_DECL,
/* These messages are used by the Data Table compiler only */
diff --git a/source/compiler/aslpredef.c b/source/compiler/aslpredef.c
index afef94a0d64a..1ee4fd495e5b 100644
--- a/source/compiler/aslpredef.c
+++ b/source/compiler/aslpredef.c
@@ -674,7 +674,7 @@ ApCheckForSpecialName (
/*
* Was not actually emitted by the compiler. This is a special case,
* however. If the ASL code being compiled was the result of a
- * dissasembly, it may possibly contain valid compiler-emitted names
+ * disassembly, it may possibly contain valid compiler-emitted names
* of the form "_T_x". We don't want to issue an error or even a
* warning and force the user to manually change the names. So, we
* will issue a remark instead.
diff --git a/source/compiler/aslxref.c b/source/compiler/aslxref.c
index 38356aa2ef51..0df33e3117ff 100644
--- a/source/compiler/aslxref.c
+++ b/source/compiler/aslxref.c
@@ -199,6 +199,16 @@ XfCheckFieldRange (
UINT32 FieldBitLength,
UINT32 AccessBitWidth);
+static BOOLEAN
+XfFindCondRefOfName (
+ ACPI_NAMESPACE_NODE *Node,
+ ACPI_PARSE_OBJECT *Op);
+
+static BOOLEAN
+XfRefIsGuardedByIfCondRefOf (
+ ACPI_NAMESPACE_NODE *Node,
+ ACPI_PARSE_OBJECT *Op);
+
/*******************************************************************************
*
@@ -582,17 +592,6 @@ XfNamespaceLocateBegin (
}
/*
- * One special case: CondRefOf operator - we don't care if the name exists
- * or not at this point, just ignore it, the point of the operator is to
- * determine if the name exists at runtime.
- */
- if ((Op->Asl.Parent) &&
- (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONDREFOF))
- {
- return_ACPI_STATUS (AE_OK);
- }
-
- /*
* We must enable the "search-to-root" for single NameSegs, but
* we have to be very careful about opening up scopes
*/
@@ -600,7 +599,8 @@ XfNamespaceLocateBegin (
if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) ||
(Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
(Op->Asl.ParseOpcode == PARSEOP_METHODCALL) ||
- (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
+ (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) ||
+ (Op->Asl.ParseOpcode == PARSEOP_CONDREFOF))
{
/*
* These are name references, do not push the scope stack
@@ -665,7 +665,22 @@ XfNamespaceLocateBegin (
* We didn't find the name reference by path -- we can qualify this
* a little better before we print an error message
*/
- if (strlen (Path) == ACPI_NAMESEG_SIZE)
+
+ if ((Op->Asl.Parent) &&
+ (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONDREFOF))
+ {
+ /*
+ * One special case: CondRefOf operator - if the name doesn't
+ * exist at this point, it means that there's no actual or
+ * external declaration. If the name is not found, just ignore
+ * it, the point of the operator is to determine if the name
+ * exists at runtime. We wanted to see if this named object
+ * exists to facilitate analysis to allow protected usage of
+ * undeclared externals.
+ */
+ return_ACPI_STATUS (AE_OK);
+ }
+ else if (strlen (Path) == ACPI_NAMESEG_SIZE)
{
/* A simple, one-segment ACPI name */
@@ -1190,6 +1205,7 @@ XfNamespaceLocateBegin (
/*
* 5) Check for external resolution
+ *
* By this point, everything should be loaded in the namespace. If a
* namespace lookup results in a namespace node that is an external, it
* means that this named object was not defined in the input ASL. This
@@ -1197,11 +1213,38 @@ XfNamespaceLocateBegin (
* use the external keyword to suppress compiler errors about undefined
* objects. Note: this only applies when compiling multiple definition
* blocks.
+ *
+ * Do not check for external resolution in the following cases:
+ *
+ * case 1) External (ABCD)
+ *
+ * This declares ABCD as an external so there is no requirement for
+ * ABCD to be loaded in the namespace when analyzing the actual
+ * External() statement.
+ *
+ * case 2) CondRefOf (ABCD)
+ *
+ * This operator will query the ACPI namespace on the existence of
+ * ABCD. If ABCD does not exist, this operator will return a 0
+ * without incurring AML runtime errors. Therefore, ABCD is allowed
+ * to not exist when analyzing the CondRefOf operator.
+ *
+ * case 3) External (ABCD)
+ * if (CondRefOf (ABCD))
+ * {
+ * Store (0, ABCD)
+ * }
+ *
+ * In this case, ABCD is accessed only if it exists due to the if
+ * statement so there is no need to flag the ABCD nested in the
+ * store operator.
*/
if (AslGbl_ParseTreeRoot->Asl.Child && AslGbl_ParseTreeRoot->Asl.Child->Asl.Next &&
- (Op->Asl.ParseOpcode != PARSEOP_EXTERNAL &&
- Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_EXTERNAL) &&
- (Node->Flags & ANOBJ_IS_EXTERNAL))
+ (Node->Flags & ANOBJ_IS_EXTERNAL) &&
+ Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_EXTERNAL &&
+ Op->Asl.ParseOpcode != PARSEOP_EXTERNAL &&
+ Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_CONDREFOF &&
+ !XfRefIsGuardedByIfCondRefOf (Node, Op))
{
AslError (ASL_ERROR, ASL_MSG_UNDEFINED_EXTERNAL, Op, NULL);
}
@@ -1221,6 +1264,96 @@ XfNamespaceLocateBegin (
/*******************************************************************************
*
+ * FUNCTION: XfRefIsGuardedByIfCondRefOf
+ *
+ * PARAMETERS: Node - Named object reference node
+ * Op - Named object reference parse node
+ *
+ * RETURN: BOOLEAN
+ *
+ * DESCRIPTION: returns true if Op checked inside if (CondRefOf (...))
+ * refers to Node.
+ *
+ ******************************************************************************/
+
+static BOOLEAN
+XfRefIsGuardedByIfCondRefOf (
+ ACPI_NAMESPACE_NODE *Node,
+ ACPI_PARSE_OBJECT *Op)
+{
+ ACPI_PARSE_OBJECT *Parent = Op->Asl.Parent;
+
+
+ while (Parent)
+ {
+ if (Parent->Asl.ParseOpcode == PARSEOP_IF &&
+ XfFindCondRefOfName (Node, Parent->Asl.Child))
+ {
+ return (TRUE);
+ }
+
+ Parent = Parent->Asl.Parent;
+ }
+
+ return (FALSE);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: XfRefIsGuardedByIfCondRefOf
+ *
+ * PARAMETERS: Node - Named object reference node
+ * Op - Named object reference parse node
+ *
+ * RETURN: BOOLEAN
+ *
+ * DESCRIPTION: returns true if Op checked inside if (CondRefOf (...))
+ * refers to Node.
+ *
+ ******************************************************************************/
+
+static BOOLEAN
+XfFindCondRefOfName (
+ ACPI_NAMESPACE_NODE *Node,
+ ACPI_PARSE_OBJECT *Op)
+{
+ BOOLEAN CondRefOfFound = FALSE;
+
+
+ if (!Op)
+ {
+ return (FALSE);
+ }
+
+ switch (Op->Asl.ParseOpcode)
+ {
+ case PARSEOP_CONDREFOF:
+
+ return (Op->Asl.Child->Common.Node == Node);
+ break;
+
+ case PARSEOP_LAND:
+
+ CondRefOfFound = XfFindCondRefOfName (Node, Op->Asl.Child);
+ if (CondRefOfFound)
+ {
+ return (TRUE);
+ }
+
+ return (XfFindCondRefOfName (Node, Op->Asl.Child->Asl.Next));
+ break;
+
+ default:
+
+ return (FALSE);
+ break;
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: XfNamespaceLocateEnd
*
* PARAMETERS: ASL_WALK_CALLBACK
diff --git a/source/compiler/dtutils.c b/source/compiler/dtutils.c
index bb07894e2813..55093a7676a6 100644
--- a/source/compiler/dtutils.c
+++ b/source/compiler/dtutils.c
@@ -186,11 +186,20 @@ DtError (
DT_FIELD *FieldObject,
char *ExtraMessage)
{
+ UINT32 Line = 0;
+
+
+ /* Field object could be NULL */
+
+ if (FieldObject)
+ {
+ Line = FieldObject->Line;
+ }
/* Check if user wants to ignore this exception */
if (AslIsExceptionIgnored (AslGbl_Files[ASL_FILE_INPUT].Filename,
- FieldObject->Line, Level, MessageId))
+ Line, Level, MessageId))
{
return;
}
diff --git a/source/components/debugger/dbhistry.c b/source/components/debugger/dbhistry.c
index 554115bfab3f..b9b2ed8727ea 100644
--- a/source/components/debugger/dbhistry.c
+++ b/source/components/debugger/dbhistry.c
@@ -175,7 +175,6 @@ static HISTORY_INFO AcpiGbl_HistoryBuffer[HISTORY_SIZE];
static UINT16 AcpiGbl_LoHistory = 0;
static UINT16 AcpiGbl_NumHistory = 0;
static UINT16 AcpiGbl_NextHistoryIndex = 0;
-UINT32 AcpiGbl_NextCmdNum = 1;
/*******************************************************************************
diff --git a/source/components/disassembler/dmbuffer.c b/source/components/disassembler/dmbuffer.c
index 1d734d4fcff0..47279a2c2a82 100644
--- a/source/components/disassembler/dmbuffer.c
+++ b/source/components/disassembler/dmbuffer.c
@@ -400,6 +400,10 @@ AcpiDmIsUuidBuffer (
/* Buffer size is the buffer argument */
SizeOp = Op->Common.Value.Arg;
+ if (!SizeOp)
+ {
+ return (FALSE);
+ }
/* Next, the initializer byte list to examine */
@@ -520,6 +524,10 @@ AcpiDmIsUnicodeBuffer (
/* Buffer size is the buffer argument */
SizeOp = Op->Common.Value.Arg;
+ if (!SizeOp)
+ {
+ return (FALSE);
+ }
/* Next, the initializer byte list to examine */
@@ -596,6 +604,10 @@ AcpiDmIsStringBuffer (
/* Buffer size is the buffer argument */
SizeOp = Op->Common.Value.Arg;
+ if (!SizeOp)
+ {
+ return (FALSE);
+ }
/* Next, the initializer byte list to examine */
@@ -675,13 +687,18 @@ AcpiDmIsPldBuffer (
UINT64 InitializerSize;
+ if (!Op)
+ {
+ return (FALSE);
+ }
+
/*
* Get the BufferSize argument - Buffer(BufferSize)
* If the buffer was generated by the ToPld macro, it must
* be a BYTE constant.
*/
SizeOp = Op->Common.Value.Arg;
- if (SizeOp->Common.AmlOpcode != AML_BYTE_OP)
+ if (!SizeOp || SizeOp->Common.AmlOpcode != AML_BYTE_OP)
{
return (FALSE);
}
diff --git a/source/components/dispatcher/dsfield.c b/source/components/dispatcher/dsfield.c
index e2576606e58d..f4199078006b 100644
--- a/source/components/dispatcher/dsfield.c
+++ b/source/components/dispatcher/dsfield.c
@@ -341,7 +341,12 @@ AcpiDsCreateBufferField (
Status = AcpiNsLookup (WalkState->ScopeInfo,
Arg->Common.Value.String, ACPI_TYPE_ANY,
ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &Node);
- if (ACPI_FAILURE (Status))
+ if ((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) &&
+ Status == AE_ALREADY_EXISTS)
+ {
+ Status = AE_OK;
+ }
+ else if (ACPI_FAILURE (Status))
{
ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
Arg->Common.Value.String, Status);
@@ -682,12 +687,21 @@ AcpiDsCreateField (
Info.RegionNode = RegionNode;
Status = AcpiDsGetFieldNames (&Info, WalkState, Arg->Common.Next);
- if (Info.RegionNode->Object->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM &&
- !(RegionNode->Object->Field.InternalPccBuffer
- = ACPI_ALLOCATE_ZEROED(Info.RegionNode->Object->Region.Length)))
+ if (ACPI_FAILURE (Status))
{
- return_ACPI_STATUS (AE_NO_MEMORY);
+ return_ACPI_STATUS (Status);
}
+
+ if (Info.RegionNode->Object->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM)
+ {
+ RegionNode->Object->Field.InternalPccBuffer =
+ ACPI_ALLOCATE_ZEROED(Info.RegionNode->Object->Region.Length);
+ if (!RegionNode->Object->Field.InternalPccBuffer)
+ {
+ return_ACPI_STATUS (AE_NO_MEMORY);
+ }
+ }
+
return_ACPI_STATUS (Status);
}
diff --git a/source/components/executer/exfield.c b/source/components/executer/exfield.c
index 167d182c67d0..897c2d47d5d0 100644
--- a/source/components/executer/exfield.c
+++ b/source/components/executer/exfield.c
@@ -167,7 +167,7 @@
#define ACPI_INVALID_PROTOCOL_ID 0x80
#define ACPI_MAX_PROTOCOL_ID 0x0F
-const UINT8 AcpiProtocolLengths[] =
+static const UINT8 AcpiProtocolLengths[] =
{
ACPI_INVALID_PROTOCOL_ID, /* 0 - reserved */
ACPI_INVALID_PROTOCOL_ID, /* 1 - reserved */
diff --git a/source/include/acglobal.h b/source/include/acglobal.h
index d41f24c8e403..a45ece02303d 100644
--- a/source/include/acglobal.h
+++ b/source/include/acglobal.h
@@ -436,6 +436,7 @@ ACPI_GLOBAL (ACPI_EXTERNAL_FILE *, AcpiGbl_ExternalFileList);
#ifdef ACPI_DEBUGGER
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_AbortMethod, FALSE);
ACPI_INIT_GLOBAL (ACPI_THREAD_ID, AcpiGbl_DbThreadId, ACPI_INVALID_THREAD_ID);
+ACPI_INIT_GLOBAL (UINT32, AcpiGbl_NextCmdNum, 1);
ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbOpt_NoIniMethods);
ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbOpt_NoRegionSupport);
diff --git a/source/include/acpixf.h b/source/include/acpixf.h
index eeb63cd5c80c..ed2804251fa4 100644
--- a/source/include/acpixf.h
+++ b/source/include/acpixf.h
@@ -154,7 +154,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20200326
+#define ACPI_CA_VERSION 0x20200430
#include "acconfig.h"
#include "actypes.h"
diff --git a/source/include/acpredef.h b/source/include/acpredef.h
index 99c48b066ea7..924d7b90af9a 100644
--- a/source/include/acpredef.h
+++ b/source/include/acpredef.h
@@ -769,10 +769,10 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] =
{{"_NIC", METHOD_0ARGS, /* ACPI 6.3 */
METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
- {{"_NIG", METHOD_1ARGS (ACPI_TYPE_BUFFER), /* ACPI 6.3 */
+ {{"_NIG", METHOD_0ARGS, /* ACPI 6.3 */
METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
- {{"_NIH", METHOD_0ARGS, /* ACPI 6.3 */
+ {{"_NIH", METHOD_1ARGS (ACPI_TYPE_BUFFER), /* ACPI 6.3 */
METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
{{"_NTT", METHOD_0ARGS,
diff --git a/source/tools/acpiexec/aemain.c b/source/tools/acpiexec/aemain.c
index 502684a473fc..3a4f503b3e6d 100644
--- a/source/tools/acpiexec/aemain.c
+++ b/source/tools/acpiexec/aemain.c
@@ -633,6 +633,7 @@ main (
ACPI_CHECK_OK (AcpiInitializeSubsystem, Status);
if (ACPI_FAILURE (Status))
{
+ ExitCode = -1;
goto ErrorExit;
}
@@ -646,6 +647,7 @@ main (
ACPI_CHECK_OK (AcpiInitializeDebugger, Status);
if (ACPI_FAILURE (Status))
{
+ ExitCode = -1;
goto ErrorExit;
}
@@ -707,6 +709,7 @@ main (
Status = AeBuildLocalTables (ListHead);
if (ACPI_FAILURE (Status))
{
+ ExitCode = -1;
goto ErrorExit;
}
@@ -743,8 +746,9 @@ main (
Status = AeLoadTables ();
if (ACPI_FAILURE (Status))
{
- ExitCode = -1;
- goto ErrorExit;
+ printf ("**** Could not load ACPI tables, %s\n",
+ AcpiFormatException (Status));
+ goto EnterDebugger;
}
/*
@@ -757,13 +761,6 @@ main (
goto EnterDebugger;
}
- if (ACPI_FAILURE (Status))
- {
- printf ("**** Could not load ACPI tables, %s\n",
- AcpiFormatException (Status));
- goto EnterDebugger;
- }
-
/* Setup initialization flags for ACPICA */
InitFlags = (ACPI_NO_HANDLER_INIT | ACPI_NO_ACPI_ENABLE);