aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/dev/acpica/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/compiler')
-rw-r--r--sys/contrib/dev/acpica/compiler/aslallocate.c303
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcache.c481
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompile.c66
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.h71
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.l4
-rw-r--r--sys/contrib/dev/acpica/compiler/asldebug.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/aslerror.c794
-rw-r--r--sys/contrib/dev/acpica/compiler/aslfiles.c7
-rw-r--r--sys/contrib/dev/acpica/compiler/aslhelp.c1
-rw-r--r--sys/contrib/dev/acpica/compiler/aslload.c30
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmapenter.c4
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmaputils.c4
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmessages.c4
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmessages.h2
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmethod.c43
-rw-r--r--sys/contrib/dev/acpica/compiler/asloperands.c4
-rw-r--r--sys/contrib/dev/acpica/compiler/aslopt.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/asloptions.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/aslparseop.c55
-rw-r--r--sys/contrib/dev/acpica/compiler/aslprintf.c4
-rw-r--r--sys/contrib/dev/acpica/compiler/aslstartup.c4
-rw-r--r--sys/contrib/dev/acpica/compiler/aslsupport.l4
-rw-r--r--sys/contrib/dev/acpica/compiler/asltypes.h9
-rw-r--r--sys/contrib/dev/acpica/compiler/aslutils.c221
-rw-r--r--sys/contrib/dev/acpica/compiler/cvcompiler.c16
-rw-r--r--sys/contrib/dev/acpica/compiler/cvparser.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/dtcompile.c8
-rw-r--r--sys/contrib/dev/acpica/compiler/dtcompiler.h33
-rw-r--r--sys/contrib/dev/acpica/compiler/dtexpress.c1
-rw-r--r--sys/contrib/dev/acpica/compiler/dtfield.c1
-rw-r--r--sys/contrib/dev/acpica/compiler/dtio.c5
-rw-r--r--sys/contrib/dev/acpica/compiler/dtparser.y1
-rw-r--r--sys/contrib/dev/acpica/compiler/dtsubtable.c3
-rw-r--r--sys/contrib/dev/acpica/compiler/dttable.c1
-rw-r--r--sys/contrib/dev/acpica/compiler/dttable1.c1
-rw-r--r--sys/contrib/dev/acpica/compiler/dttable2.c377
-rw-r--r--sys/contrib/dev/acpica/compiler/dttemplate.c3
-rw-r--r--sys/contrib/dev/acpica/compiler/dttemplate.h46
-rw-r--r--sys/contrib/dev/acpica/compiler/dtutils.c153
-rw-r--r--sys/contrib/dev/acpica/compiler/prexpress.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/prmacros.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/prparser.y1
-rw-r--r--sys/contrib/dev/acpica/compiler/prscan.c1
-rw-r--r--sys/contrib/dev/acpica/compiler/prutils.c4
44 files changed, 1890 insertions, 892 deletions
diff --git a/sys/contrib/dev/acpica/compiler/aslallocate.c b/sys/contrib/dev/acpica/compiler/aslallocate.c
new file mode 100644
index 000000000000..e83a01f422ab
--- /dev/null
+++ b/sys/contrib/dev/acpica/compiler/aslallocate.c
@@ -0,0 +1,303 @@
+/******************************************************************************
+ *
+ * Module Name: aslallocate -- Local memory allocation
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************
+ *
+ * Alternatively, you may choose to be licensed under the terms of the
+ * following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * substantially similar to the "NO WARRANTY" disclaimer below
+ * ("Disclaimer") and any redistribution must be conditioned upon
+ * including a substantially similar Disclaimer requirement for further
+ * binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ * of any contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Alternatively, you may choose to be licensed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ *****************************************************************************/
+
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
+
+/*
+ * Local heap allocation wrappers. See aslcache.c for allocation from local
+ * cache alloctions
+ */
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: UtLocalCalloc
+ *
+ * PARAMETERS: Size - Bytes to be allocated
+ *
+ * RETURN: Pointer to the allocated memory. If this function returns
+ * (the compiler is not aborted), the pointer is guaranteed to
+ * be valid.
+ *
+ * DESCRIPTION: Allocate zero-initialized memory. The point of this function
+ * is to abort the compile on an allocation failure, on the
+ * assumption that nothing more can be accomplished.
+ *
+ * NOTE: For allocation from the local caches, see aslcache.c
+ *
+ ******************************************************************************/
+
+void *
+UtLocalCalloc (
+ UINT32 Size)
+{
+ void *Allocated;
+
+
+ Allocated = ACPI_ALLOCATE_ZEROED (Size);
+ if (!Allocated)
+ {
+ AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION,
+ Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
+ Gbl_InputByteCount, Gbl_CurrentColumn,
+ Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
+
+ CmCleanupAndExit ();
+ exit (1);
+ }
+
+ TotalAllocations++;
+ TotalAllocated += Size;
+ return (Allocated);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: UtExpandLineBuffers
+ *
+ * PARAMETERS: None. Updates global line buffer pointers.
+ *
+ * RETURN: None. Reallocates the global line buffers
+ *
+ * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates
+ * all global line buffers and updates Gbl_LineBufferSize. NOTE:
+ * Also used for the initial allocation of the buffers, when
+ * all of the buffer pointers are NULL. Initial allocations are
+ * of size ASL_DEFAULT_LINE_BUFFER_SIZE
+ *
+ *****************************************************************************/
+
+void
+UtExpandLineBuffers (
+ void)
+{
+ UINT32 NewSize;
+
+
+ /* Attempt to double the size of all line buffers */
+
+ NewSize = Gbl_LineBufferSize * 2;
+ if (Gbl_CurrentLineBuffer)
+ {
+ DbgPrint (ASL_DEBUG_OUTPUT,
+ "Increasing line buffer size from %u to %u\n",
+ Gbl_LineBufferSize, NewSize);
+ }
+
+ UtReallocLineBuffers (&Gbl_CurrentLineBuffer, Gbl_LineBufferSize, NewSize);
+ UtReallocLineBuffers (&Gbl_MainTokenBuffer, Gbl_LineBufferSize, NewSize);
+ UtReallocLineBuffers (&Gbl_MacroTokenBuffer, Gbl_LineBufferSize, NewSize);
+ UtReallocLineBuffers (&Gbl_ExpressionTokenBuffer, Gbl_LineBufferSize, NewSize);
+
+ Gbl_LineBufPtr = Gbl_CurrentLineBuffer;
+ Gbl_LineBufferSize = NewSize;
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: UtReallocLineBuffers
+ *
+ * PARAMETERS: Buffer - Buffer to realloc
+ * OldSize - Old size of Buffer
+ * NewSize - New size of Buffer
+ *
+ * RETURN: none
+ *
+ * DESCRIPTION: Reallocate and initialize Buffer
+ *
+ *****************************************************************************/
+
+void
+UtReallocLineBuffers (
+ char **Buffer,
+ UINT32 OldSize,
+ UINT32 NewSize)
+{
+
+ *Buffer = realloc (*Buffer, NewSize);
+ if (*Buffer)
+ {
+ memset (*Buffer + OldSize, 0, NewSize - OldSize);
+ return;
+ }
+
+ printf ("Could not increase line buffer size from %u to %u\n",
+ OldSize, NewSize);
+
+ AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, NULL, NULL);
+ AslAbort ();
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: UtFreeLineBuffers
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Free all line buffers
+ *
+ *****************************************************************************/
+
+void
+UtFreeLineBuffers (
+ void)
+{
+
+ free (Gbl_CurrentLineBuffer);
+ free (Gbl_MainTokenBuffer);
+ free (Gbl_MacroTokenBuffer);
+ free (Gbl_ExpressionTokenBuffer);
+}
diff --git a/sys/contrib/dev/acpica/compiler/aslcache.c b/sys/contrib/dev/acpica/compiler/aslcache.c
new file mode 100644
index 000000000000..1e54a2fa8d7c
--- /dev/null
+++ b/sys/contrib/dev/acpica/compiler/aslcache.c
@@ -0,0 +1,481 @@
+/******************************************************************************
+ *
+ * Module Name: aslcache -- Local cache support for iASL
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************
+ *
+ * Alternatively, you may choose to be licensed under the terms of the
+ * following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * substantially similar to the "NO WARRANTY" disclaimer below
+ * ("Disclaimer") and any redistribution must be conditioned upon
+ * including a substantially similar Disclaimer requirement for further
+ * binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ * of any contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Alternatively, you may choose to be licensed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ *****************************************************************************/
+
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
+
+/*
+ * Local caches. The caches are fully deleted after the compilation/disassembly
+ * of each individual input file. Thus, individual allocations from the cache
+ * memory do not need to be freed or even released back into the cache.
+ *
+ * See aslallocate.c for standard heap allocations.
+ */
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: UtLocalCacheCalloc
+ *
+ * PARAMETERS: Length - Size of buffer requested
+ *
+ * RETURN: Pointer to the buffer. Aborts compiler on allocation failure
+ *
+ * DESCRIPTION: Allocate a string buffer. Bypass the local
+ * dynamic memory manager for performance reasons (This has a
+ * major impact on the speed of the compiler.)
+ *
+ ******************************************************************************/
+
+char *
+UtLocalCacheCalloc (
+ UINT32 Length)
+{
+ char *Buffer;
+ ASL_CACHE_INFO *Cache;
+ UINT32 CacheSize = ASL_STRING_CACHE_SIZE;
+
+
+ if (Length > CacheSize)
+ {
+ CacheSize = Length;
+
+ if (Gbl_StringCacheList)
+ {
+ Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize);
+
+ /* Link new cache buffer just following head of list */
+
+ Cache->Next = Gbl_StringCacheList->Next;
+ Gbl_StringCacheList->Next = Cache;
+
+ /* Leave cache management pointers alone as they pertain to head */
+
+ Gbl_StringCount++;
+ Gbl_StringSize += Length;
+
+ return (Cache->Buffer);
+ }
+ }
+
+ if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast)
+ {
+ /* Allocate a new buffer */
+
+ Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize);
+
+ /* Link new cache buffer to head of list */
+
+ Cache->Next = Gbl_StringCacheList;
+ Gbl_StringCacheList = Cache;
+
+ /* Setup cache management pointers */
+
+ Gbl_StringCacheNext = Cache->Buffer;
+ Gbl_StringCacheLast = Gbl_StringCacheNext + CacheSize;
+ }
+
+ Gbl_StringCount++;
+ Gbl_StringSize += Length;
+
+ Buffer = Gbl_StringCacheNext;
+ Gbl_StringCacheNext += Length;
+ return (Buffer);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: UtParseOpCacheCalloc
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: New parse op. Aborts on allocation failure
+ *
+ * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local
+ * dynamic memory manager for performance reasons (This has a
+ * major impact on the speed of the compiler.)
+ *
+ ******************************************************************************/
+
+ACPI_PARSE_OBJECT *
+UtParseOpCacheCalloc (
+ void)
+{
+ ASL_CACHE_INFO *Cache;
+
+
+ if (Gbl_ParseOpCacheNext >= Gbl_ParseOpCacheLast)
+ {
+ /* Allocate a new buffer */
+
+ Cache = UtLocalCalloc (sizeof (Cache->Next) +
+ (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE));
+
+ /* Link new cache buffer to head of list */
+
+ Cache->Next = Gbl_ParseOpCacheList;
+ Gbl_ParseOpCacheList = Cache;
+
+ /* Setup cache management pointers */
+
+ Gbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer);
+ Gbl_ParseOpCacheLast = Gbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE;
+ }
+
+ Gbl_ParseOpCount++;
+ return (Gbl_ParseOpCacheNext++);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: UtSubtableCacheCalloc - Data Table compiler
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: Pointer to the buffer. Aborts on allocation failure
+ *
+ * DESCRIPTION: Allocate a subtable object buffer. Bypass the local
+ * dynamic memory manager for performance reasons (This has a
+ * major impact on the speed of the compiler.)
+ *
+ ******************************************************************************/
+
+DT_SUBTABLE *
+UtSubtableCacheCalloc (
+ void)
+{
+ ASL_CACHE_INFO *Cache;
+
+
+ if (Gbl_SubtableCacheNext >= Gbl_SubtableCacheLast)
+ {
+ /* Allocate a new buffer */
+
+ Cache = UtLocalCalloc (sizeof (Cache->Next) +
+ (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE));
+
+ /* Link new cache buffer to head of list */
+
+ Cache->Next = Gbl_SubtableCacheList;
+ Gbl_SubtableCacheList = Cache;
+
+ /* Setup cache management pointers */
+
+ Gbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer);
+ Gbl_SubtableCacheLast = Gbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE;
+ }
+
+ Gbl_SubtableCount++;
+ return (Gbl_SubtableCacheNext++);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: UtFieldCacheCalloc - Data Table compiler
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: Pointer to the buffer. Aborts on allocation failure
+ *
+ * DESCRIPTION: Allocate a field object buffer. Bypass the local
+ * dynamic memory manager for performance reasons (This has a
+ * major impact on the speed of the compiler.)
+ *
+ ******************************************************************************/
+
+DT_FIELD *
+UtFieldCacheCalloc (
+ void)
+{
+ ASL_CACHE_INFO *Cache;
+
+
+ if (Gbl_FieldCacheNext >= Gbl_FieldCacheLast)
+ {
+ /* Allocate a new buffer */
+
+ Cache = UtLocalCalloc (sizeof (Cache->Next) +
+ (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE));
+
+ /* Link new cache buffer to head of list */
+
+ Cache->Next = Gbl_FieldCacheList;
+ Gbl_FieldCacheList = Cache;
+
+ /* Setup cache management pointers */
+
+ Gbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer);
+ Gbl_FieldCacheLast = Gbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE;
+ }
+
+ Gbl_FieldCount++;
+ return (Gbl_FieldCacheNext++);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: UtDeleteLocalCaches
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Delete all local cache buffer blocks
+ *
+ ******************************************************************************/
+
+void
+UtDeleteLocalCaches (
+ void)
+{
+ UINT32 BufferCount;
+ ASL_CACHE_INFO *Next;
+
+
+ /*
+ * Generic cache, arbitrary size allocations
+ */
+ BufferCount = 0;
+ while (Gbl_StringCacheList)
+ {
+ Next = Gbl_StringCacheList->Next;
+ ACPI_FREE (Gbl_StringCacheList);
+ Gbl_StringCacheList = Next;
+ BufferCount++;
+ }
+
+ DbgPrint (ASL_DEBUG_OUTPUT,
+ "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n",
+ Gbl_StringCount, Gbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount);
+
+ /* Reset cache globals */
+
+ Gbl_StringSize = 0;
+ Gbl_StringCount = 0;
+ Gbl_StringCacheNext = NULL;
+ Gbl_StringCacheLast = NULL;
+
+
+ /*
+ * Parse Op cache
+ */
+ BufferCount = 0;
+ while (Gbl_ParseOpCacheList)
+ {
+ Next = Gbl_ParseOpCacheList->Next;
+ ACPI_FREE (Gbl_ParseOpCacheList);
+ Gbl_ParseOpCacheList = Next;
+ BufferCount++;
+ }
+
+ DbgPrint (ASL_DEBUG_OUTPUT,
+ "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n",
+ Gbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE,
+ (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount);
+
+ /* Reset cache globals */
+
+ Gbl_ParseOpCount = 0;
+ Gbl_ParseOpCacheNext = NULL;
+ Gbl_ParseOpCacheLast = NULL;
+ Gbl_ParseTreeRoot = NULL;
+
+
+ /*
+ * Table Compiler - Field cache
+ */
+ BufferCount = 0;
+ while (Gbl_FieldCacheList)
+ {
+ Next = Gbl_FieldCacheList->Next;
+ ACPI_FREE (Gbl_FieldCacheList);
+ Gbl_FieldCacheList = Next;
+ BufferCount++;
+ }
+
+ DbgPrint (ASL_DEBUG_OUTPUT,
+ "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n",
+ Gbl_FieldCount, ASL_FIELD_CACHE_SIZE,
+ (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount);
+
+ /* Reset cache globals */
+
+ Gbl_FieldCount = 0;
+ Gbl_FieldCacheNext = NULL;
+ Gbl_FieldCacheLast = NULL;
+
+
+ /*
+ * Table Compiler - Subtable cache
+ */
+ BufferCount = 0;
+ while (Gbl_SubtableCacheList)
+ {
+ Next = Gbl_SubtableCacheList->Next;
+ ACPI_FREE (Gbl_SubtableCacheList);
+ Gbl_SubtableCacheList = Next;
+ BufferCount++;
+ }
+
+ DbgPrint (ASL_DEBUG_OUTPUT,
+ "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n",
+ Gbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE,
+ (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount);
+
+ /* Reset cache globals */
+
+ Gbl_SubtableCount = 0;
+ Gbl_SubtableCacheNext = NULL;
+ Gbl_SubtableCacheLast = NULL;
+}
diff --git a/sys/contrib/dev/acpica/compiler/aslcompile.c b/sys/contrib/dev/acpica/compiler/aslcompile.c
index 5bd460def46b..826ae12f189b 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompile.c
+++ b/sys/contrib/dev/acpica/compiler/aslcompile.c
@@ -150,7 +150,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#include <contrib/dev/acpica/include/acnamesp.h>
#include <stdio.h>
@@ -932,70 +931,7 @@ CmCleanupAndExit (
if (!Gbl_DoAslConversion)
{
- CmDeleteCaches ();
+ UtDeleteLocalCaches ();
}
}
-
-
-/*******************************************************************************
- *
- * FUNCTION: CmDeleteCaches
- *
- * PARAMETERS: None
- *
- * RETURN: None
- *
- * DESCRIPTION: Delete all local cache buffer blocks
- *
- ******************************************************************************/
-
-void
-CmDeleteCaches (
- void)
-{
- UINT32 BufferCount;
- ASL_CACHE_INFO *Next;
-
-
- /* Parse Op cache */
-
- BufferCount = 0;
- while (Gbl_ParseOpCacheList)
- {
- Next = Gbl_ParseOpCacheList->Next;
- ACPI_FREE (Gbl_ParseOpCacheList);
- Gbl_ParseOpCacheList = Next;
- BufferCount++;
- }
-
- DbgPrint (ASL_DEBUG_OUTPUT,
- "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n",
- Gbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE,
- (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount);
-
- Gbl_ParseOpCount = 0;
- Gbl_ParseOpCacheNext = NULL;
- Gbl_ParseOpCacheLast = NULL;
- Gbl_ParseTreeRoot = NULL;
-
- /* Generic string cache */
-
- BufferCount = 0;
- while (Gbl_StringCacheList)
- {
- Next = Gbl_StringCacheList->Next;
- ACPI_FREE (Gbl_StringCacheList);
- Gbl_StringCacheList = Next;
- BufferCount++;
- }
-
- DbgPrint (ASL_DEBUG_OUTPUT,
- "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n",
- Gbl_StringCount, Gbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount);
-
- Gbl_StringSize = 0;
- Gbl_StringCount = 0;
- Gbl_StringCacheNext = NULL;
- Gbl_StringCacheLast = NULL;
-}
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.h b/sys/contrib/dev/acpica/compiler/aslcompiler.h
index fd7e7dbfee95..96bfc979c9f3 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.h
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.h
@@ -181,6 +181,7 @@
#include <contrib/dev/acpica/compiler/aslmessages.h>
#include <contrib/dev/acpica/compiler/aslglobal.h>
#include <contrib/dev/acpica/compiler/preprocess.h>
+#include <contrib/dev/acpica/compiler/dtcompiler.h>
/*******************************************************************************
@@ -265,8 +266,50 @@ void
CmCleanupAndExit (
void);
+
+/*
+ * aslallocate - memory allocation
+ */
+void *
+UtLocalCalloc (
+ UINT32 Size);
+
+void
+UtExpandLineBuffers (
+ void);
+
+void
+UtReallocLineBuffers (
+ char **Buffer,
+ UINT32 OldSize,
+ UINT32 NewSize);
+
+void
+UtFreeLineBuffers (
+ void);
+
+
+/*
+ * aslcache - local cache support
+ */
+char *
+UtLocalCacheCalloc (
+ UINT32 Length);
+
+ACPI_PARSE_OBJECT *
+UtParseOpCacheCalloc (
+ void);
+
+DT_SUBTABLE *
+UtSubtableCacheCalloc (
+ void);
+
+DT_FIELD *
+UtFieldCacheCalloc (
+ void);
+
void
-CmDeleteCaches (
+UtDeleteLocalCaches (
void);
@@ -407,6 +450,16 @@ AslAbort (
void);
void
+AslDualParseOpError (
+ UINT8 Level,
+ UINT16 MainMessageId,
+ ACPI_PARSE_OBJECT *MainOp,
+ char *MainMessage,
+ UINT16 SecondMessageId,
+ ACPI_PARSE_OBJECT *SecondOp,
+ char *SecondaryMessage);
+
+void
AslError (
UINT8 Level,
UINT16 MessageId,
@@ -1150,10 +1203,6 @@ void
UtEndEvent (
UINT8 Event);
-void *
-UtLocalCalloc (
- UINT32 Size);
-
void
UtDisplaySummary (
UINT32 FileId);
@@ -1176,18 +1225,6 @@ void
UtSetParseOpName (
ACPI_PARSE_OBJECT *Op);
-char *
-UtStringCacheCalloc (
- UINT32 Length);
-
-void
-UtExpandLineBuffers (
- void);
-
-void
-UtFreeLineBuffers (
- void);
-
ACPI_STATUS
UtInternalizeName (
char *ExternalName,
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.l b/sys/contrib/dev/acpica/compiler/aslcompiler.l
index 9a1a8d1e99e7..38fe15a2c922 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.l
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.l
@@ -813,7 +813,7 @@ NamePathTail [.]{NameSeg}
{NameSeg} { char *s;
count (0);
- s=UtStringCacheCalloc (ACPI_NAME_SIZE + 1);
+ s=UtLocalCacheCalloc (ACPI_NAME_SIZE + 1);
if (strcmp (AslCompilertext, "\\"))
{
strcpy (s, "____");
@@ -826,7 +826,7 @@ NamePathTail [.]{NameSeg}
{NameString} { char *s;
count (0);
- s=UtStringCacheCalloc (strlen (AslCompilertext)+1);
+ s=UtLocalCacheCalloc (strlen (AslCompilertext)+1);
AcpiUtStrupr (AslCompilertext);
strcpy (s, AslCompilertext);
AslCompilerlval.s = s;
diff --git a/sys/contrib/dev/acpica/compiler/asldebug.c b/sys/contrib/dev/acpica/compiler/asldebug.c
index 780d584fca2b..2129fc977f7c 100644
--- a/sys/contrib/dev/acpica/compiler/asldebug.c
+++ b/sys/contrib/dev/acpica/compiler/asldebug.c
@@ -356,7 +356,7 @@ UtCreateEscapeSequences (
/* New string buffer, 3 extra chars per escape (4 total) */
- OutString = UtLocalCalloc (InStringLength + (EscapeCount * 3));
+ OutString = UtLocalCacheCalloc (InStringLength + (EscapeCount * 3));
OutStringPtr = OutString;
/* Convert non-ascii or non-printable chars to escape sequences */
diff --git a/sys/contrib/dev/acpica/compiler/aslerror.c b/sys/contrib/dev/acpica/compiler/aslerror.c
index 013826e79bc7..f8c6c98d860b 100644
--- a/sys/contrib/dev/acpica/compiler/aslerror.c
+++ b/sys/contrib/dev/acpica/compiler/aslerror.c
@@ -170,6 +170,37 @@ AslIsExceptionDisabled (
UINT8 Level,
UINT16 MessageId);
+static void AslInitEnode (
+ ASL_ERROR_MSG **Enode,
+ UINT8 Level,
+ UINT16 MessageId,
+ UINT32 LineNumber,
+ UINT32 LogicalLineNumber,
+ UINT32 LogicalByteOffset,
+ UINT32 Column,
+ char *Filename,
+ char *Message,
+ char *SourceLine,
+ ASL_ERROR_MSG *SubError);
+
+static void
+AslLogNewError (
+ UINT8 Level,
+ UINT16 MessageId,
+ UINT32 LineNumber,
+ UINT32 LogicalLineNumber,
+ UINT32 LogicalByteOffset,
+ UINT32 Column,
+ char *Filename,
+ char *Message,
+ char *SourceLine,
+ ASL_ERROR_MSG *SubError);
+
+static void
+AePrintSubError (
+ FILE *OutputFile,
+ ASL_ERROR_MSG *Enode);
+
/*******************************************************************************
*
@@ -220,6 +251,7 @@ AeClearErrorLog (
ASL_ERROR_MSG *Enode = Gbl_ErrorLog;
ASL_ERROR_MSG *Next;
+
/* Walk the error node list */
while (Enode)
@@ -270,8 +302,7 @@ AeAddToErrorLog (
Prev = NULL;
Next = Gbl_ErrorLog;
- while ((Next) &&
- (Next->LogicalLineNumber <= Enode->LogicalLineNumber))
+ while ((Next) && (Next->LogicalLineNumber <= Enode->LogicalLineNumber))
{
Prev = Next;
Next = Next->Next;
@@ -294,94 +325,143 @@ AeAddToErrorLog (
/*******************************************************************************
*
- * FUNCTION: AePrintException
+ * FUNCTION: AeDecodeErrorMessageId
*
- * PARAMETERS: FileId - ID of output file
+ * PARAMETERS: OutputFile - Output file
* Enode - Error node to print
- * Header - Additional text before each message
+ * PrematureEOF - True = PrematureEOF has been reached
+ * Total - Total legth of line
*
* RETURN: None
*
- * DESCRIPTION: Print the contents of an error node.
- *
- * NOTE: We don't use the FlxxxFile I/O functions here because on error
- * they abort the compiler and call this function! Since we
- * are reporting errors here, we ignore most output errors and
- * just try to get out as much as we can.
+ * DESCRIPTION: Print the source line of an error.
*
******************************************************************************/
-void
-AePrintException (
- UINT32 FileId,
+static void
+AeDecodeErrorMessageId (
+ FILE *OutputFile,
ASL_ERROR_MSG *Enode,
- char *Header)
+ BOOLEAN PrematureEOF,
+ UINT32 Total)
{
- UINT8 SourceByte;
- int Actual;
- size_t RActual;
UINT32 MsgLength;
const char *MainMessage;
char *ExtraMessage;
UINT32 SourceColumn;
UINT32 ErrorColumn;
- FILE *OutputFile;
- FILE *SourceFile = NULL;
- long FileSize;
- BOOLEAN PrematureEOF = FALSE;
- UINT32 Total = 0;
- if (Gbl_NoErrors)
+ fprintf (OutputFile, "%s %4.4d -",
+ AeDecodeExceptionLevel (Enode->Level),
+ AeBuildFullExceptionCode (Enode->Level, Enode->MessageId));
+
+ MainMessage = AeDecodeMessageId (Enode->MessageId);
+ ExtraMessage = Enode->Message;
+
+ /* If a NULL line number, just print the decoded message */
+
+ if (!Enode->LineNumber)
{
+ fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage);
return;
}
- /*
- * Only listing files have a header, and remarks/optimizations
- * are always output
- */
- if (!Header)
+ MsgLength = strlen (MainMessage);
+ if (MsgLength == 0)
{
- /* Ignore remarks if requested */
+ /* Use the secondary/extra message as main message */
- switch (Enode->Level)
+ MainMessage = Enode->Message;
+ if (!MainMessage)
{
- case ASL_WARNING:
- case ASL_WARNING2:
- case ASL_WARNING3:
+ MainMessage = "";
+ }
- if (!Gbl_DisplayWarnings)
- {
- return;
- }
- break;
+ MsgLength = strlen (MainMessage);
+ ExtraMessage = NULL;
+ }
- case ASL_REMARK:
+ if (Gbl_VerboseErrors && !PrematureEOF)
+ {
+ if (Total >= 256)
+ {
+ fprintf (OutputFile, " %s",
+ MainMessage);
+ }
+ else
+ {
+ SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2;
+ ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1;
- if (!Gbl_DisplayRemarks)
+ if ((MsgLength + ErrorColumn) < (SourceColumn - 1))
{
- return;
+ fprintf (OutputFile, "%*s%s",
+ (int) ((SourceColumn - 1) - ErrorColumn),
+ MainMessage, " ^ ");
}
- break;
-
- case ASL_OPTIMIZATION:
-
- if (!Gbl_DisplayOptimizations)
+ else
{
- return;
+ fprintf (OutputFile, "%*s %s",
+ (int) ((SourceColumn - ErrorColumn) + 1), "^",
+ MainMessage);
}
- break;
+ }
+ }
+ else
+ {
+ fprintf (OutputFile, " %s", MainMessage);
+ }
- default:
+ /* Print the extra info message if present */
- break;
- }
+ if (ExtraMessage)
+ {
+ fprintf (OutputFile, " (%s)", ExtraMessage);
}
- /* Get the various required file handles */
+ if (PrematureEOF)
+ {
+ fprintf (OutputFile, " and premature End-Of-File");
+ }
+
+ fprintf (OutputFile, "\n");
+ if (Gbl_VerboseErrors && !Enode->SubError)
+ {
+ fprintf (OutputFile, "\n");
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AePrintErrorSourceLine
+ *
+ * PARAMETERS: OutputFile - Output file
+ * Enode - Error node to print
+ * PrematureEOF - True = PrematureEOF has been reached
+ * Total - amount of characters printed so far
+ *
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Print the source line of an error.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+AePrintErrorSourceLine (
+ FILE *OutputFile,
+ ASL_ERROR_MSG *Enode,
+ BOOLEAN *PrematureEOF,
+ UINT32 *Total)
+{
+ UINT8 SourceByte;
+ int Actual;
+ size_t RActual;
+ FILE *SourceFile = NULL;
+ long FileSize;
- OutputFile = Gbl_Files[FileId].Handle;
if (!Enode->SourceLine)
{
@@ -404,213 +484,272 @@ AePrintException (
if ((long) Enode->LogicalByteOffset >= FileSize)
{
- PrematureEOF = TRUE;
+ *PrematureEOF = TRUE;
}
}
- }
-
- if (Header)
- {
- fprintf (OutputFile, "%s", Header);
+ else
+ {
+ fprintf (OutputFile,
+ "[*** iASL: Source File Does not exist ***]\n");
+ return AE_IO_ERROR;
+ }
}
/* Print filename and line number if present and valid */
- if (Enode->Filename)
+ if (Gbl_VerboseErrors)
{
- if (Gbl_VerboseErrors)
+ fprintf (OutputFile, "%-8s", Enode->Filename);
+
+ if (Enode->SourceLine && Enode->LineNumber)
+ {
+ fprintf (OutputFile, " %6u: %s",
+ Enode->LineNumber, Enode->SourceLine);
+ }
+ else if (Enode->LineNumber)
{
- fprintf (OutputFile, "%-8s", Enode->Filename);
+ fprintf (OutputFile, " %6u: ", Enode->LineNumber);
- if (Enode->LineNumber)
+ /*
+ * If not at EOF, get the corresponding source code line
+ * and display it. Don't attempt this if we have a
+ * premature EOF condition.
+ */
+ if (*PrematureEOF)
{
- if (Enode->SourceLine)
- {
- fprintf (OutputFile, " %6u: %s",
- Enode->LineNumber, Enode->SourceLine);
- }
- else
+ fprintf (OutputFile, "\n");
+ return AE_OK;
+ }
+ /*
+ * Seek to the offset in the combined source file,
+ * read the source line, and write it to the output.
+ */
+ Actual = fseek (SourceFile,
+ (long) Enode->LogicalByteOffset, (int) SEEK_SET);
+ if (Actual)
+ {
+ fprintf (OutputFile,
+ "[*** iASL: Seek error on source code temp file %s ***]",
+ Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
+
+ fprintf (OutputFile, "\n");
+ return AE_OK;
+ }
+ RActual = fread (&SourceByte, 1, 1, SourceFile);
+ if (RActual != 1)
+ {
+ fprintf (OutputFile,
+ "[*** iASL: Read error on source code temp file %s ***]",
+ Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
+ return AE_IO_ERROR;
+ }
+ /* Read/write the source line, up to the maximum line length */
+
+ while (RActual && SourceByte && (SourceByte != '\n'))
+ {
+ if (*Total < 256)
{
- fprintf (OutputFile, " %6u: ", Enode->LineNumber);
-
- /*
- * If not at EOF, get the corresponding source code line
- * and display it. Don't attempt this if we have a
- * premature EOF condition.
- */
- if (!PrematureEOF)
+ /* After the max line length, we will just read the line, no write */
+
+ if (fwrite (&SourceByte, 1, 1, OutputFile) != 1)
{
- /*
- * Seek to the offset in the combined source file,
- * read the source line, and write it to the output.
- */
- Actual = fseek (SourceFile,
- (long) Enode->LogicalByteOffset, (int) SEEK_SET);
- if (Actual)
- {
- fprintf (OutputFile,
- "[*** iASL: Seek error on source code temp file %s ***]",
- Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
- }
- else
- {
- RActual = fread (&SourceByte, 1, 1, SourceFile);
- if (RActual != 1)
- {
- fprintf (OutputFile,
- "[*** iASL: Read error on source code temp file %s ***]",
- Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
- }
- else
- {
- /* Read/write the source line, up to the maximum line length */
-
- while (RActual && SourceByte && (SourceByte != '\n'))
- {
- if (Total < 256)
- {
- /* After the max line length, we will just read the line, no write */
-
- if (fwrite (&SourceByte, 1, 1, OutputFile) != 1)
- {
- printf ("[*** iASL: Write error on output file ***]\n");
- return;
- }
- }
- else if (Total == 256)
- {
- fprintf (OutputFile,
- "\n[*** iASL: Very long input line, message below refers to column %u ***]",
- Enode->Column);
- }
-
- RActual = fread (&SourceByte, 1, 1, SourceFile);
- if (RActual != 1)
- {
- fprintf (OutputFile,
- "[*** iASL: Read error on source code temp file %s ***]",
- Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
- return;
- }
- Total++;
- }
- }
- }
+ printf ("[*** iASL: Write error on output file ***]\n");
+ return AE_IO_ERROR;
}
+ }
+ else if (*Total == 256)
+ {
+ fprintf (OutputFile,
+ "\n[*** iASL: Very long input line, message below refers to column %u ***]",
+ Enode->Column);
+ }
+
+ RActual = fread (&SourceByte, 1, 1, SourceFile);
+ if (RActual != 1)
+ {
+ fprintf (OutputFile,
+ "[*** iASL: Read error on source code temp file %s ***]",
+ Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
- fprintf (OutputFile, "\n");
+ return AE_IO_ERROR;
}
+ *Total += 1;
}
- }
- else
- {
- /*
- * Less verbose version of the error message, enabled via the
- * -vi switch. The format is compatible with MS Visual Studio.
- */
- fprintf (OutputFile, "%s", Enode->Filename);
- if (Enode->LineNumber)
- {
- fprintf (OutputFile, "(%u) : ",
- Enode->LineNumber);
- }
+ fprintf (OutputFile, "\n");
}
}
-
- /* If a NULL message ID, just print the raw message */
-
- if (Enode->MessageId == 0)
+ else
{
- fprintf (OutputFile, "%s\n", Enode->Message);
- return;
+ /*
+ * Less verbose version of the error message, enabled via the
+ * -vi switch. The format is compatible with MS Visual Studio.
+ */
+ fprintf (OutputFile, "%s", Enode->Filename);
+
+ if (Enode->LineNumber)
+ {
+ fprintf (OutputFile, "(%u) : ",
+ Enode->LineNumber);
+ }
}
- /* Decode the message ID */
+ return AE_OK;
+}
- fprintf (OutputFile, "%s %4.4d -",
- AeDecodeExceptionLevel (Enode->Level),
- AeBuildFullExceptionCode (Enode->Level, Enode->MessageId));
+/*******************************************************************************
+ *
+ * FUNCTION: AePrintException
+ *
+ * PARAMETERS: FileId - ID of output file
+ * Enode - Error node to print
+ * Header - Additional text before each message
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Print the contents of an error node.
+ *
+ * NOTE: We don't use the FlxxxFile I/O functions here because on error
+ * they abort the compiler and call this function! Since we
+ * are reporting errors here, we ignore most output errors and
+ * just try to get out as much as we can.
+ *
+ ******************************************************************************/
- MainMessage = AeDecodeMessageId (Enode->MessageId);
- ExtraMessage = Enode->Message;
+void
+AePrintException (
+ UINT32 FileId,
+ ASL_ERROR_MSG *Enode,
+ char *Header)
+{
+ FILE *OutputFile;
+ BOOLEAN PrematureEOF = FALSE;
+ UINT32 Total = 0;
+ ACPI_STATUS Status;
+ ASL_ERROR_MSG *Child = Enode->SubError;
- /* If a NULL line number, just print the decoded message */
- if (!Enode->LineNumber)
+ if (Gbl_NoErrors)
{
- fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage);
return;
}
- MsgLength = strlen (MainMessage);
- if (MsgLength == 0)
+ /*
+ * Only listing files have a header, and remarks/optimizations
+ * are always output
+ */
+ if (!Header)
{
- /* Use the secondary/extra message as main message */
+ /* Ignore remarks if requested */
- MainMessage = Enode->Message;
- if (!MainMessage)
+ switch (Enode->Level)
{
- MainMessage = "";
- }
+ case ASL_WARNING:
+ case ASL_WARNING2:
+ case ASL_WARNING3:
- MsgLength = strlen (MainMessage);
- ExtraMessage = NULL;
- }
+ if (!Gbl_DisplayWarnings)
+ {
+ return;
+ }
+ break;
- if (Gbl_VerboseErrors && !PrematureEOF)
- {
- if (Total >= 256)
- {
- fprintf (OutputFile, " %s",
- MainMessage);
- }
- else
- {
- SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2;
- ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1;
+ case ASL_REMARK:
- if ((MsgLength + ErrorColumn) < (SourceColumn - 1))
+ if (!Gbl_DisplayRemarks)
{
- fprintf (OutputFile, "%*s%s",
- (int) ((SourceColumn - 1) - ErrorColumn),
- MainMessage, " ^ ");
+ return;
}
- else
+ break;
+
+ case ASL_OPTIMIZATION:
+
+ if (!Gbl_DisplayOptimizations)
{
- fprintf (OutputFile, "%*s %s",
- (int) ((SourceColumn - ErrorColumn) + 1), "^",
- MainMessage);
+ return;
}
+ break;
+
+ default:
+
+ break;
}
}
- else
+
+ /* Get the various required file handles */
+
+ OutputFile = Gbl_Files[FileId].Handle;
+
+ if (Header)
{
- fprintf (OutputFile, " %s", MainMessage);
+ fprintf (OutputFile, "%s", Header);
}
- /* Print the extra info message if present */
+ if (!Enode->Filename)
+ {
+ AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total);
+ return;
+ }
- if (ExtraMessage)
+ Status = AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total);
+ if (ACPI_FAILURE (Status))
{
- fprintf (OutputFile, " (%s)", ExtraMessage);
+ return;
}
- if (PrematureEOF)
+ /* If a NULL message ID, just print the raw message */
+
+ if (Enode->MessageId == 0)
{
- fprintf (OutputFile, " and premature End-Of-File");
+ fprintf (OutputFile, "%s\n", Enode->Message);
+ return;
}
- fprintf (OutputFile, "\n");
- if (Gbl_VerboseErrors)
+ AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total);
+
+ while (Child)
{
fprintf (OutputFile, "\n");
+ AePrintSubError (OutputFile, Child);
+ Child = Child->SubError;
}
}
/*******************************************************************************
*
+ * FUNCTION: AePrintSubError
+ *
+ * PARAMETERS: OutputFile - Output file
+ * Enode - Error node to print
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Print the contents of an error nodes. This function is tailored
+ * to print error nodes that are SubErrors within ASL_ERROR_MSG
+ *
+ ******************************************************************************/
+
+static void
+AePrintSubError (
+ FILE *OutputFile,
+ ASL_ERROR_MSG *Enode)
+{
+ UINT32 Total = 0;
+ BOOLEAN PrematureEOF = FALSE;
+ const char *MainMessage;
+
+
+ MainMessage = AeDecodeMessageId (Enode->MessageId);
+
+ fprintf (OutputFile, " %s%s", MainMessage, "\n ");
+ (void) AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total);
+ fprintf (OutputFile, "\n");
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AePrintErrorLog
*
* PARAMETERS: FileId - Where to output the error log
@@ -640,54 +779,72 @@ AePrintErrorLog (
/*******************************************************************************
*
- * FUNCTION: AslCommonError2
+ * FUNCTION: AslInitEnode
*
- * PARAMETERS: Level - Seriousness (Warning/error, etc.)
+ * PARAMETERS: InputEnode - Input Error node to initialize
+ * Level - Seriousness (Warning/error, etc.)
* MessageId - Index into global message buffer
- * LineNumber - Actual file line number
+ * CurrentLineNumber - Actual file line number
+ * LogicalLineNumber - Cumulative line number
+ * LogicalByteOffset - Byte offset in source file
* Column - Column in current line
- * SourceLine - Actual source code line
* Filename - source filename
* ExtraMessage - additional error message
+ * SourceLine - Line of error source code
+ * SubError - SubError of this InputEnode
*
* RETURN: None
*
- * DESCRIPTION: Create a new error node and add it to the error log
+ * DESCRIPTION: Initialize an Error node
*
******************************************************************************/
-void
-AslCommonError2 (
+static void AslInitEnode (
+ ASL_ERROR_MSG **InputEnode,
UINT8 Level,
UINT16 MessageId,
UINT32 LineNumber,
+ UINT32 LogicalLineNumber,
+ UINT32 LogicalByteOffset,
UINT32 Column,
- char *SourceLine,
char *Filename,
- char *ExtraMessage)
+ char *ExtraMessage,
+ char *SourceLine,
+ ASL_ERROR_MSG *SubError)
{
- char *MessageBuffer = NULL;
- char *LineBuffer;
ASL_ERROR_MSG *Enode;
- Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
+ *InputEnode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
+ Enode = *InputEnode;
+ Enode->Level = Level;
+ Enode->MessageId = MessageId;
+ Enode->LineNumber = LineNumber;
+ Enode->LogicalLineNumber = LogicalLineNumber;
+ Enode->LogicalByteOffset = LogicalByteOffset;
+ Enode->Column = Column;
+ Enode->SubError = SubError;
+ Enode->Message = NULL;
+ Enode->SourceLine = NULL;
+ Enode->Filename = NULL;
if (ExtraMessage)
{
/* Allocate a buffer for the message and a new error node */
- MessageBuffer = UtStringCacheCalloc (strlen (ExtraMessage) + 1);
+ Enode->Message = UtLocalCacheCalloc (strlen (ExtraMessage) + 1);
/* Keep a copy of the extra message */
- strcpy (MessageBuffer, ExtraMessage);
+ strcpy (Enode->Message, ExtraMessage);
}
- LineBuffer = UtLocalCalloc (strlen (SourceLine) + 1);
- strcpy (LineBuffer, SourceLine);
+ if (SourceLine)
+ {
+ Enode->SourceLine = UtLocalCalloc (strlen (SourceLine) + 1);
+ strcpy (Enode->SourceLine, SourceLine);
+ }
- /* Initialize the error node */
if (Filename)
{
@@ -698,28 +855,39 @@ AslCommonError2 (
Enode->FilenameLength = 6;
}
}
+}
- Enode->MessageId = MessageId;
- Enode->Level = Level;
- Enode->LineNumber = LineNumber;
- Enode->LogicalLineNumber = LineNumber;
- Enode->LogicalByteOffset = 0;
- Enode->Column = Column;
- Enode->Message = MessageBuffer;
- Enode->SourceLine = LineBuffer;
-
- /* Add the new node to the error node list */
-
- AeAddToErrorLog (Enode);
-
- if (Gbl_DebugFlag)
- {
- /* stderr is a file, send error to it immediately */
- AePrintException (ASL_FILE_STDERR, Enode, NULL);
- }
+/*******************************************************************************
+ *
+ * FUNCTION: AslCommonError2
+ *
+ * PARAMETERS: Level - Seriousness (Warning/error, etc.)
+ * MessageId - Index into global message buffer
+ * LineNumber - Actual file line number
+ * Column - Column in current line
+ * SourceLine - Actual source code line
+ * Filename - source filename
+ * ExtraMessage - additional error message
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Create a new error node and add it to the error log
+ *
+ ******************************************************************************/
- Gbl_ExceptionCount[Level]++;
+void
+AslCommonError2 (
+ UINT8 Level,
+ UINT16 MessageId,
+ UINT32 LineNumber,
+ UINT32 Column,
+ char *SourceLine,
+ char *Filename,
+ char *ExtraMessage)
+{
+ AslLogNewError (Level, MessageId, LineNumber, LineNumber, 0, Column,
+ Filename, ExtraMessage, SourceLine, NULL);
}
@@ -753,48 +921,51 @@ AslCommonError (
char *Filename,
char *ExtraMessage)
{
- char *MessageBuffer = NULL;
- ASL_ERROR_MSG *Enode;
-
-
- if (AslIsExceptionIgnored (Level, MessageId))
- {
- return;
- }
-
- Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
-
- if (ExtraMessage)
- {
- /* Allocate a buffer for the message and a new error node */
-
- MessageBuffer = UtStringCacheCalloc (strlen (ExtraMessage) + 1);
-
- /* Keep a copy of the extra message */
+ AslLogNewError (Level, MessageId, CurrentLineNumber, LogicalLineNumber,
+ LogicalByteOffset, Column, Filename, ExtraMessage,
+ NULL, NULL);
+}
- strcpy (MessageBuffer, ExtraMessage);
- }
- /* Initialize the error node */
+/*******************************************************************************
+ *
+ * FUNCTION: AslLogNewError
+ *
+ * PARAMETERS: Level - Seriousness (Warning/error, etc.)
+ * MessageId - Index into global message buffer
+ * CurrentLineNumber - Actual file line number
+ * LogicalLineNumber - Cumulative line number
+ * LogicalByteOffset - Byte offset in source file
+ * Column - Column in current line
+ * Filename - source filename
+ * Message - additional error message
+ * SourceLine - Actual line of source code
+ * SubError - Sub-error associated with this error
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Create a new error node and add it to the error log
+ *
+ ******************************************************************************/
+static void
+AslLogNewError (
+ UINT8 Level,
+ UINT16 MessageId,
+ UINT32 LineNumber,
+ UINT32 LogicalLineNumber,
+ UINT32 LogicalByteOffset,
+ UINT32 Column,
+ char *Filename,
+ char *Message,
+ char *SourceLine,
+ ASL_ERROR_MSG *SubError)
+{
+ ASL_ERROR_MSG *Enode = NULL;
- if (Filename)
- {
- Enode->Filename = Filename;
- Enode->FilenameLength = strlen (Filename);
- if (Enode->FilenameLength < 6)
- {
- Enode->FilenameLength = 6;
- }
- }
- Enode->MessageId = MessageId;
- Enode->Level = Level;
- Enode->LineNumber = CurrentLineNumber;
- Enode->LogicalLineNumber = LogicalLineNumber;
- Enode->LogicalByteOffset = LogicalByteOffset;
- Enode->Column = Column;
- Enode->Message = MessageBuffer;
- Enode->SourceLine = NULL;
+ AslInitEnode (&Enode, Level, MessageId, LineNumber, LogicalLineNumber,
+ LogicalByteOffset, Column, Filename, Message, SourceLine,
+ SubError);
/* Add the new node to the error node list */
@@ -825,8 +996,8 @@ AslCommonError (
*
* FUNCTION: AslIsExceptionIgnored
*
- * PARAMETERS: Level - Seriousness (Warning/error, etc.)
- * MessageId - Index into global message buffer
+ * PARAMETERS: Level - Seriousness (Warning/error, etc.)
+ * MessageId - Index into global message buffer
*
* RETURN: BOOLEAN
*
@@ -840,7 +1011,7 @@ AslIsExceptionIgnored (
UINT8 Level,
UINT16 MessageId)
{
- BOOLEAN ExceptionIgnored;
+ BOOLEAN ExceptionIgnored;
/* Note: this allows exception to be disabled and expected */
@@ -869,7 +1040,8 @@ void
AslCheckExpectedExceptions (
void)
{
- UINT8 i;
+ UINT8 i;
+
for (i = 0; i < Gbl_ExpectedMessagesIndex; ++i)
{
@@ -980,8 +1152,8 @@ AslDisableException (
*
* FUNCTION: AslIsExceptionDisabled
*
- * PARAMETERS: Level - Seriousness (Warning/error, etc.)
- * MessageId - Index into global message buffer
+ * PARAMETERS: Level - Seriousness (Warning/error, etc.)
+ * MessageId - Index into global message buffer
*
* RETURN: TRUE if exception/message should be ignored
*
@@ -999,9 +1171,8 @@ AslIsExceptionExpected (
UINT32 i;
- /*
- * Mark this exception as received
- */
+ /* Mark this exception as received */
+
EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId);
for (i = 0; i < Gbl_ExpectedMessagesIndex; i++)
{
@@ -1082,6 +1253,61 @@ AslIsExceptionDisabled (
/*******************************************************************************
*
+ * FUNCTION: AslDualParseOpError
+ *
+ * PARAMETERS: Level - Seriousness (Warning/error, etc.)
+ * MainMsgId - Index into global message buffer
+ * MainOp - Parse node where error happened
+ * MainMsg - Message pertaining to the MainOp
+ * SubMsgId - Index into global message buffer
+ * SubOp - Additional parse node for better message
+ * SubMsg - Message pertainint to SubOp
+ *
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Main error reporting routine for the ASL compiler for error
+ * messages that point to multiple parse objects.
+ *
+ ******************************************************************************/
+
+void
+AslDualParseOpError (
+ UINT8 Level,
+ UINT16 MainMsgId,
+ ACPI_PARSE_OBJECT *MainOp,
+ char *MainMsg,
+ UINT16 SubMsgId,
+ ACPI_PARSE_OBJECT *SubOp,
+ char *SubMsg)
+{
+ ASL_ERROR_MSG *SubEnode = NULL;
+
+
+ /* Check if user wants to ignore this exception */
+
+ if (AslIsExceptionIgnored (Level, MainMsgId) || !MainOp)
+ {
+ return;
+ }
+
+ if (SubOp)
+ {
+ AslInitEnode (&SubEnode, Level, SubMsgId, SubOp->Asl.LineNumber,
+ SubOp->Asl.LogicalLineNumber, SubOp->Asl.LogicalByteOffset,
+ SubOp->Asl.Column, SubOp->Asl.Filename, SubMsg,
+ NULL, NULL);
+ }
+
+ AslLogNewError (Level, MainMsgId, MainOp->Asl.LineNumber,
+ MainOp->Asl.LogicalLineNumber, MainOp->Asl.LogicalByteOffset,
+ MainOp->Asl.Column, MainOp->Asl.Filename, MainMsg,
+ NULL, SubEnode);
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AslError
*
* PARAMETERS: Level - Seriousness (Warning/error, etc.)
diff --git a/sys/contrib/dev/acpica/compiler/aslfiles.c b/sys/contrib/dev/acpica/compiler/aslfiles.c
index 1ebfb9f48ff4..e5d6f85a0be3 100644
--- a/sys/contrib/dev/acpica/compiler/aslfiles.c
+++ b/sys/contrib/dev/acpica/compiler/aslfiles.c
@@ -151,7 +151,6 @@
#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include <contrib/dev/acpica/include/acapps.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslfiles")
@@ -326,14 +325,14 @@ FlMergePathnames (
(*FilePathname == '/') ||
(FilePathname[1] == ':'))
{
- Pathname = UtStringCacheCalloc (strlen (FilePathname) + 1);
+ Pathname = UtLocalCacheCalloc (strlen (FilePathname) + 1);
strcpy (Pathname, FilePathname);
goto ConvertBackslashes;
}
/* Need a local copy of the prefix directory path */
- CommonPath = UtStringCacheCalloc (strlen (PrefixDir) + 1);
+ CommonPath = UtLocalCacheCalloc (strlen (PrefixDir) + 1);
strcpy (CommonPath, PrefixDir);
/*
@@ -369,7 +368,7 @@ FlMergePathnames (
/* Build the final merged pathname */
ConcatenatePaths:
- Pathname = UtStringCacheCalloc (
+ Pathname = UtLocalCacheCalloc (
strlen (CommonPath) + strlen (FilePathname) + 2);
if (LastElement && *CommonPath)
{
diff --git a/sys/contrib/dev/acpica/compiler/aslhelp.c b/sys/contrib/dev/acpica/compiler/aslhelp.c
index 1c0278c9833f..ed3a33298fa9 100644
--- a/sys/contrib/dev/acpica/compiler/aslhelp.c
+++ b/sys/contrib/dev/acpica/compiler/aslhelp.c
@@ -173,6 +173,7 @@ void
Usage (
void)
{
+ printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
printf ("%s\n\n", ASL_COMPLIANCE);
ACPI_USAGE_HEADER ("iasl [Options] [Files]");
diff --git a/sys/contrib/dev/acpica/compiler/aslload.c b/sys/contrib/dev/acpica/compiler/aslload.c
index 7480f232afb1..19864533267a 100644
--- a/sys/contrib/dev/acpica/compiler/aslload.c
+++ b/sys/contrib/dev/acpica/compiler/aslload.c
@@ -327,8 +327,9 @@ LdLoadFieldElements (
* The name already exists in this scope
* But continue processing the elements
*/
- AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child,
- Child->Asl.Value.String);
+ AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child,
+ Child->Asl.Value.String, ASL_MSG_FOUND_HERE, Node->Op,
+ Node->Op->Asl.ExternalName);
}
}
else
@@ -388,8 +389,10 @@ LdLoadResourceElements (
{
/* Actual node causing the error was saved in ParentMethod */
- AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS,
- (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod, Op->Asl.Namepath);
+ AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS,
+ (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod,
+ Op->Asl.Namepath, ASL_MSG_FOUND_HERE, Node->Op,
+ Node->Op->Asl.ExternalName);
return (AE_OK);
}
return (Status);
@@ -805,8 +808,8 @@ LdNamespace1Begin (
/*
* Allow one create on an object or segment that was
* previously declared External only if WalkState->OwnerId and
- * Node->OwnerId are found in different tables (meaning that
- * they have differnt OwnerIds).
+ * Node->OwnerId are different (meaning that the current WalkState
+ * and the Node are in different tables).
*/
Node->Flags &= ~ANOBJ_IS_EXTERNAL;
Node->Type = (UINT8) ObjectType;
@@ -827,8 +830,9 @@ LdNamespace1Begin (
if (Node->OwnerId == WalkState->OwnerId &&
!(Node->Flags & IMPLICIT_EXTERNAL))
{
- AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
- Op->Asl.ExternalName);
+ AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
+ Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op,
+ Node->Op->Asl.ExternalName);
}
if (Node->Flags & IMPLICIT_EXTERNAL)
{
@@ -849,8 +853,9 @@ LdNamespace1Begin (
if (Node->OwnerId == WalkState->OwnerId)
{
- AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
- Op->Asl.ExternalName);
+ AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
+ Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op,
+ Node->Op->Asl.ExternalName);
}
}
else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
@@ -905,8 +910,9 @@ LdNamespace1Begin (
{
/* Valid error, object already exists */
- AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
- Op->Asl.ExternalName);
+ AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
+ Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op,
+ Node->Op->Asl.ExternalName);
return_ACPI_STATUS (AE_OK);
}
}
diff --git a/sys/contrib/dev/acpica/compiler/aslmapenter.c b/sys/contrib/dev/acpica/compiler/aslmapenter.c
index 6e391097eabb..8476654e40a0 100644
--- a/sys/contrib/dev/acpica/compiler/aslmapenter.c
+++ b/sys/contrib/dev/acpica/compiler/aslmapenter.c
@@ -332,7 +332,7 @@ MpCreateGpioInfo (
* sorted by both source device name and then the pin number. There is
* one block per pin.
*/
- Buffer = UtStringCacheCalloc (sizeof (ACPI_GPIO_INFO));
+ Buffer = UtLocalCacheCalloc (sizeof (ACPI_GPIO_INFO));
Info = ACPI_CAST_PTR (ACPI_GPIO_INFO, Buffer);
NextGpio = Gbl_GpioList;
@@ -409,7 +409,7 @@ MpCreateSerialInfo (
* Allocate a new info block and insert it into the global Serial list
* sorted by both source device name and then the address.
*/
- Buffer = UtStringCacheCalloc (sizeof (ACPI_SERIAL_INFO));
+ Buffer = UtLocalCacheCalloc (sizeof (ACPI_SERIAL_INFO));
Info = ACPI_CAST_PTR (ACPI_SERIAL_INFO, Buffer);
NextSerial = Gbl_SerialList;
diff --git a/sys/contrib/dev/acpica/compiler/aslmaputils.c b/sys/contrib/dev/acpica/compiler/aslmaputils.c
index c17f090cea6b..37333041203e 100644
--- a/sys/contrib/dev/acpica/compiler/aslmaputils.c
+++ b/sys/contrib/dev/acpica/compiler/aslmaputils.c
@@ -212,7 +212,7 @@ MpGetHidFromParseTree (
/* Convert EISAID to a string */
- HidString = UtStringCacheCalloc (ACPI_EISAID_STRING_SIZE);
+ HidString = UtLocalCacheCalloc (ACPI_EISAID_STRING_SIZE);
AcpiExEisaIdToString (HidString, Arg->Asl.Value.Integer);
return (HidString);
@@ -277,7 +277,7 @@ MpGetHidValue (
/* Convert EISAID to a string */
- HidString = UtStringCacheCalloc (ACPI_EISAID_STRING_SIZE);
+ HidString = UtLocalCacheCalloc (ACPI_EISAID_STRING_SIZE);
AcpiExEisaIdToString (HidString, HidNode->Object->Integer.Value);
return (HidString);
diff --git a/sys/contrib/dev/acpica/compiler/aslmessages.c b/sys/contrib/dev/acpica/compiler/aslmessages.c
index efe7e9945c91..1ced65479513 100644
--- a/sys/contrib/dev/acpica/compiler/aslmessages.c
+++ b/sys/contrib/dev/acpica/compiler/aslmessages.c
@@ -350,7 +350,9 @@ const char *AslCompilerMsgs [] =
/* ASL_MSG_CONSTANT_REQUIRED */ "Non-reducible expression",
/* ASL_MSG_CROSS_TABLE_SCOPE */ "Illegal open scope on external object from within DSDT",
/* ASL_MSG_EXCEPTION_NOT_RECEIVED */ "Expected remark, warning, or error did not occur. Message ID:",
-/* ASL_MSG_NULL_RESOURCE_TEMPLATE */ "Empty Resource Template (END_TAG only)"
+/* ASL_MSG_NULL_RESOURCE_TEMPLATE */ "Empty Resource Template (END_TAG only)",
+/* ASL_MSG_FOUND_HERE */ "Original name creation/declaration below: ",
+/* ASL_MSG_ILLEGAL_RECURSION */ "Illegal recursive call to method that creates named objects"
};
/* Table compiler */
diff --git a/sys/contrib/dev/acpica/compiler/aslmessages.h b/sys/contrib/dev/acpica/compiler/aslmessages.h
index d69c05a176c6..a80184016ce1 100644
--- a/sys/contrib/dev/acpica/compiler/aslmessages.h
+++ b/sys/contrib/dev/acpica/compiler/aslmessages.h
@@ -353,6 +353,8 @@ typedef enum
ASL_MSG_CROSS_TABLE_SCOPE,
ASL_MSG_EXCEPTION_NOT_RECEIVED,
ASL_MSG_NULL_RESOURCE_TEMPLATE,
+ ASL_MSG_FOUND_HERE,
+ ASL_MSG_ILLEGAL_RECURSION,
/* These messages are used by the Data Table compiler only */
diff --git a/sys/contrib/dev/acpica/compiler/aslmethod.c b/sys/contrib/dev/acpica/compiler/aslmethod.c
index a4b1c6f97f78..ca48bc82133f 100644
--- a/sys/contrib/dev/acpica/compiler/aslmethod.c
+++ b/sys/contrib/dev/acpica/compiler/aslmethod.c
@@ -347,10 +347,31 @@ MtMethodAnalysisWalkBegin (
case PARSEOP_METHODCALL:
+ /* Check for a recursive method call */
+
if (MethodInfo &&
(Op->Asl.Node == MethodInfo->Op->Asl.Node))
{
- AslError (ASL_REMARK, ASL_MSG_RECURSION, Op, Op->Asl.ExternalName);
+ if (MethodInfo->CreatesNamedObjects)
+ {
+ /*
+ * This is an error, as it will fail at runtime on all ACPI
+ * implementations. Any named object declarations will be
+ * executed twice, causing failure the second time. Note,
+ * this is independent of whether the method is declared
+ * Serialized, because the same thread is attempting to
+ * reenter the method, and this will always succeed.
+ */
+ AslDualParseOpError (ASL_ERROR, ASL_MSG_ILLEGAL_RECURSION, Op,
+ Op->Asl.Value.String, ASL_MSG_FOUND_HERE, MethodInfo->Op,
+ MethodInfo->Op->Asl.ExternalName);
+ }
+ else
+ {
+ /* Method does not create objects, issue a remark */
+
+ AslError (ASL_REMARK, ASL_MSG_RECURSION, Op, Op->Asl.ExternalName);
+ }
}
break;
@@ -622,20 +643,28 @@ MtCheckNamedObjectInMethod (
return;
}
- /* Determine if we are creating a named object */
+ /* Determine if we are creating a named object within a method */
+
+ if (!MethodInfo)
+ {
+ return;
+ }
OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
if (OpInfo->Class == AML_CLASS_NAMED_OBJECT)
{
/*
- * If we have a named object created within a non-serialized method,
- * emit a remark that the method should be serialized.
+ * 1) Mark the method as a method that creates named objects.
+ *
+ * 2) If the method is non-serialized, emit a remark that the method
+ * should be serialized.
*
* Reason: If a thread blocks within the method for any reason, and
- * another thread enters the method, the method will fail because an
- * attempt will be made to create the same object twice.
+ * another thread enters the method, the method will fail because
+ * an attempt will be made to create the same object twice.
*/
- if (MethodInfo && !MethodInfo->ShouldBeSerialized)
+ MethodInfo->CreatesNamedObjects = TRUE;
+ if (!MethodInfo->ShouldBeSerialized)
{
AslError (ASL_REMARK, ASL_MSG_SERIALIZED_REQUIRED, MethodInfo->Op,
"due to creation of named objects within");
diff --git a/sys/contrib/dev/acpica/compiler/asloperands.c b/sys/contrib/dev/acpica/compiler/asloperands.c
index 0a5f1443911e..c6e001fe49bf 100644
--- a/sys/contrib/dev/acpica/compiler/asloperands.c
+++ b/sys/contrib/dev/acpica/compiler/asloperands.c
@@ -1037,7 +1037,7 @@ OpnDoDefinitionBlock (
* We will use the AML filename that is embedded in the source file
* for the output filename.
*/
- Filename = UtStringCacheCalloc (strlen (Gbl_DirectoryPath) +
+ Filename = UtLocalCacheCalloc (strlen (Gbl_DirectoryPath) +
strlen ((char *) Child->Asl.Value.Buffer) + 1);
/* Prepend the current directory path */
@@ -1094,7 +1094,7 @@ OpnDoDefinitionBlock (
if (Child->Asl.Value.String)
{
Length = strlen (Child->Asl.Value.String);
- Gbl_TableId = UtStringCacheCalloc (Length + 1);
+ Gbl_TableId = UtLocalCacheCalloc (Length + 1);
strcpy (Gbl_TableId, Child->Asl.Value.String);
/*
diff --git a/sys/contrib/dev/acpica/compiler/aslopt.c b/sys/contrib/dev/acpica/compiler/aslopt.c
index 0019a07cbf42..6aaa386a59d8 100644
--- a/sys/contrib/dev/acpica/compiler/aslopt.c
+++ b/sys/contrib/dev/acpica/compiler/aslopt.c
@@ -275,7 +275,7 @@ OptSearchToRoot (
/* We must allocate a new string for the name (TargetPath gets deleted) */
- *NewPath = UtStringCacheCalloc (ACPI_NAME_SIZE + 1);
+ *NewPath = UtLocalCacheCalloc (ACPI_NAME_SIZE + 1);
strcpy (*NewPath, Path);
if (strncmp (*NewPath, "_T_", 3))
diff --git a/sys/contrib/dev/acpica/compiler/asloptions.c b/sys/contrib/dev/acpica/compiler/asloptions.c
index a22949bb6317..45fe735e86d2 100644
--- a/sys/contrib/dev/acpica/compiler/asloptions.c
+++ b/sys/contrib/dev/acpica/compiler/asloptions.c
@@ -204,7 +204,6 @@ AslCommandLine (
if (argc < 2)
{
- printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
Usage ();
exit (1);
}
@@ -538,7 +537,6 @@ AslDoOptions (
{
case '^':
- printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
Usage ();
exit (0);
diff --git a/sys/contrib/dev/acpica/compiler/aslparseop.c b/sys/contrib/dev/acpica/compiler/aslparseop.c
index f23091bb62f0..7a8db74c72fc 100644
--- a/sys/contrib/dev/acpica/compiler/aslparseop.c
+++ b/sys/contrib/dev/acpica/compiler/aslparseop.c
@@ -158,13 +158,6 @@
ACPI_MODULE_NAME ("aslparseop")
-/* Local prototypes */
-
-static ACPI_PARSE_OBJECT *
-TrGetOpFromCache (
- void);
-
-
/*******************************************************************************
*
* FUNCTION: TrCreateOp
@@ -490,7 +483,7 @@ TrCreateTargetOp (
return (NULL);
}
- Op = TrGetOpFromCache ();
+ Op = UtParseOpCacheCalloc ();
/* Copy the pertinent values (omit link pointer fields) */
@@ -788,7 +781,7 @@ TrAllocateOp (
ACPI_PARSE_OBJECT *LatestOp;
- Op = TrGetOpFromCache ();
+ Op = UtParseOpCacheCalloc ();
Op->Asl.ParseOpcode = (UINT16) ParseOpcode;
Op->Asl.Filename = Gbl_Files[ASL_FILE_INPUT].Filename;
@@ -877,50 +870,6 @@ TrAllocateOp (
/*******************************************************************************
*
- * FUNCTION: TrGetOpFromCache
- *
- * PARAMETERS: None
- *
- * RETURN: New parse op. Aborts on allocation failure
- *
- * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local
- * dynamic memory manager for performance reasons (This has a
- * major impact on the speed of the compiler.)
- *
- ******************************************************************************/
-
-static ACPI_PARSE_OBJECT *
-TrGetOpFromCache (
- void)
-{
- ASL_CACHE_INFO *Cache;
-
-
- if (Gbl_ParseOpCacheNext >= Gbl_ParseOpCacheLast)
- {
- /* Allocate a new buffer */
-
- Cache = UtLocalCalloc (sizeof (Cache->Next) +
- (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE));
-
- /* Link new cache buffer to head of list */
-
- Cache->Next = Gbl_ParseOpCacheList;
- Gbl_ParseOpCacheList = Cache;
-
- /* Setup cache management pointers */
-
- Gbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer);
- Gbl_ParseOpCacheLast = Gbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE;
- }
-
- Gbl_ParseOpCount++;
- return (Gbl_ParseOpCacheNext++);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: TrPrintOpFlags
*
* PARAMETERS: Flags - Flags word to be decoded
diff --git a/sys/contrib/dev/acpica/compiler/aslprintf.c b/sys/contrib/dev/acpica/compiler/aslprintf.c
index a626f24a232f..00e218d05df7 100644
--- a/sys/contrib/dev/acpica/compiler/aslprintf.c
+++ b/sys/contrib/dev/acpica/compiler/aslprintf.c
@@ -293,7 +293,7 @@ OpcParsePrintf (
if (StringToProcess)
{
- NewString = UtStringCacheCalloc (StringLength + 1);
+ NewString = UtLocalCacheCalloc (StringLength + 1);
strncpy (NewString, StartPosition, StringLength);
NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL);
@@ -382,7 +382,7 @@ OpcParsePrintf (
if (StringToProcess)
{
- NewString = UtStringCacheCalloc (StringLength + 1);
+ NewString = UtLocalCacheCalloc (StringLength + 1);
strncpy (NewString, StartPosition, StringLength);
NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL);
diff --git a/sys/contrib/dev/acpica/compiler/aslstartup.c b/sys/contrib/dev/acpica/compiler/aslstartup.c
index 8ce0375d296c..df75e1b72701 100644
--- a/sys/contrib/dev/acpica/compiler/aslstartup.c
+++ b/sys/contrib/dev/acpica/compiler/aslstartup.c
@@ -410,7 +410,7 @@ AslDoDisassembly (
Gbl_Files[ASL_FILE_INPUT].Filename = NULL;
- CmDeleteCaches ();
+ UtDeleteLocalCaches ();
return (AE_OK);
}
@@ -453,7 +453,7 @@ AslDoOneFile (
/* Take a copy of the input filename, convert any backslashes */
Gbl_Files[ASL_FILE_INPUT].Filename =
- UtStringCacheCalloc (strlen (Filename) + 1);
+ UtLocalCacheCalloc (strlen (Filename) + 1);
strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename);
UtConvertBackslashes (Gbl_Files[ASL_FILE_INPUT].Filename);
diff --git a/sys/contrib/dev/acpica/compiler/aslsupport.l b/sys/contrib/dev/acpica/compiler/aslsupport.l
index 42cee752a952..40cead33c3c5 100644
--- a/sys/contrib/dev/acpica/compiler/aslsupport.l
+++ b/sys/contrib/dev/acpica/compiler/aslsupport.l
@@ -382,7 +382,7 @@ AslPushInputFileStack (
/* Reset the global line count and filename */
Gbl_Files[ASL_FILE_INPUT].Filename =
- UtStringCacheCalloc (strlen (Filename) + 1);
+ UtLocalCacheCalloc (strlen (Filename) + 1);
strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename);
@@ -1009,7 +1009,7 @@ CompletedString:
*/
*StringBuffer = 0;
- CleanString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
+ CleanString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1);
strcpy (CleanString, MsgBuffer);
AslCompilerlval.s = CleanString;
return (TRUE);
diff --git a/sys/contrib/dev/acpica/compiler/asltypes.h b/sys/contrib/dev/acpica/compiler/asltypes.h
index e4250871fd12..f72226d5e0c9 100644
--- a/sys/contrib/dev/acpica/compiler/asltypes.h
+++ b/sys/contrib/dev/acpica/compiler/asltypes.h
@@ -202,6 +202,7 @@ typedef struct asl_method_info
UINT8 ArgInitialized[ACPI_METHOD_NUM_ARGS];
UINT8 HasBeenTyped;
UINT8 ShouldBeSerialized;
+ UINT8 CreatesNamedObjects;
} ASL_METHOD_INFO;
@@ -337,8 +338,11 @@ typedef struct asl_include_dir
} ASL_INCLUDE_DIR;
-/* An entry in the exception list, one for each error/warning */
-
+/*
+ * An entry in the exception list, one for each error/warning
+ * Note: SubError nodes would be treated with the same messageId and Level
+ * as the parent error node.
+ */
typedef struct asl_error_msg
{
UINT32 LineNumber;
@@ -347,6 +351,7 @@ typedef struct asl_error_msg
UINT32 Column;
char *Message;
struct asl_error_msg *Next;
+ struct asl_error_msg *SubError;
char *Filename;
char *SourceLine;
UINT32 FilenameLength;
diff --git a/sys/contrib/dev/acpica/compiler/aslutils.c b/sys/contrib/dev/acpica/compiler/aslutils.c
index e800970f8ef1..e34f21ee2c15 100644
--- a/sys/contrib/dev/acpica/compiler/aslutils.c
+++ b/sys/contrib/dev/acpica/compiler/aslutils.c
@@ -174,12 +174,6 @@ UtAttachNameseg (
ACPI_PARSE_OBJECT *Op,
char *Name);
-static void
-UtReallocLineBuffers (
- char **Buffer,
- UINT32 OldSize,
- UINT32 NewSize);
-
/*******************************************************************************
*
@@ -311,45 +305,6 @@ UtDisplayConstantOpcodes (
/*******************************************************************************
*
- * FUNCTION: UtLocalCalloc
- *
- * PARAMETERS: Size - Bytes to be allocated
- *
- * RETURN: Pointer to the allocated memory. Guaranteed to be valid.
- *
- * DESCRIPTION: Allocate zero-initialized memory. Aborts the compile on an
- * allocation failure, on the assumption that nothing more can be
- * accomplished.
- *
- ******************************************************************************/
-
-void *
-UtLocalCalloc (
- UINT32 Size)
-{
- void *Allocated;
-
-
- Allocated = ACPI_ALLOCATE_ZEROED (Size);
- if (!Allocated)
- {
- AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION,
- Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
- Gbl_InputByteCount, Gbl_CurrentColumn,
- Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
-
- CmCleanupAndExit ();
- exit (1);
- }
-
- TotalAllocations++;
- TotalAllocated += Size;
- return (Allocated);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: UtBeginEvent
*
* PARAMETERS: Name - Ascii name of this event
@@ -637,180 +592,6 @@ UtCheckIntegerRange (
/*******************************************************************************
*
- * FUNCTION: UtStringCacheCalloc
- *
- * PARAMETERS: Length - Size of buffer requested
- *
- * RETURN: Pointer to the buffer. Aborts compiler on allocation failure
- *
- * DESCRIPTION: Allocate a string buffer. Bypass the local
- * dynamic memory manager for performance reasons (This has a
- * major impact on the speed of the compiler.)
- *
- ******************************************************************************/
-
-char *
-UtStringCacheCalloc (
- UINT32 Length)
-{
- char *Buffer;
- ASL_CACHE_INFO *Cache;
- UINT32 CacheSize = ASL_STRING_CACHE_SIZE;
-
-
- if (Length > CacheSize)
- {
- CacheSize = Length;
-
- if (Gbl_StringCacheList)
- {
- Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize);
-
- /* Link new cache buffer just following head of list */
-
- Cache->Next = Gbl_StringCacheList->Next;
- Gbl_StringCacheList->Next = Cache;
-
- /* Leave cache management pointers alone as they pertain to head */
-
- Gbl_StringCount++;
- Gbl_StringSize += Length;
-
- return (Cache->Buffer);
- }
- }
-
- if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast)
- {
- /* Allocate a new buffer */
-
- Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize);
-
- /* Link new cache buffer to head of list */
-
- Cache->Next = Gbl_StringCacheList;
- Gbl_StringCacheList = Cache;
-
- /* Setup cache management pointers */
-
- Gbl_StringCacheNext = Cache->Buffer;
- Gbl_StringCacheLast = Gbl_StringCacheNext + CacheSize;
- }
-
- Gbl_StringCount++;
- Gbl_StringSize += Length;
-
- Buffer = Gbl_StringCacheNext;
- Gbl_StringCacheNext += Length;
- return (Buffer);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: UtExpandLineBuffers
- *
- * PARAMETERS: None. Updates global line buffer pointers.
- *
- * RETURN: None. Reallocates the global line buffers
- *
- * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates
- * all global line buffers and updates Gbl_LineBufferSize. NOTE:
- * Also used for the initial allocation of the buffers, when
- * all of the buffer pointers are NULL. Initial allocations are
- * of size ASL_DEFAULT_LINE_BUFFER_SIZE
- *
- *****************************************************************************/
-
-void
-UtExpandLineBuffers (
- void)
-{
- UINT32 NewSize;
-
-
- /* Attempt to double the size of all line buffers */
-
- NewSize = Gbl_LineBufferSize * 2;
- if (Gbl_CurrentLineBuffer)
- {
- DbgPrint (ASL_DEBUG_OUTPUT,
- "Increasing line buffer size from %u to %u\n",
- Gbl_LineBufferSize, NewSize);
- }
-
- UtReallocLineBuffers (&Gbl_CurrentLineBuffer, Gbl_LineBufferSize, NewSize);
- UtReallocLineBuffers (&Gbl_MainTokenBuffer, Gbl_LineBufferSize, NewSize);
- UtReallocLineBuffers (&Gbl_MacroTokenBuffer, Gbl_LineBufferSize, NewSize);
- UtReallocLineBuffers (&Gbl_ExpressionTokenBuffer, Gbl_LineBufferSize, NewSize);
-
- Gbl_LineBufPtr = Gbl_CurrentLineBuffer;
- Gbl_LineBufferSize = NewSize;
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: UtReallocLineBuffers
- *
- * PARAMETERS: Buffer - Buffer to realloc
- * OldSize - Old size of Buffer
- * NewSize - New size of Buffer
- *
- * RETURN: none
- *
- * DESCRIPTION: Reallocate and initialize Buffer
- *
- *****************************************************************************/
-
-static void
-UtReallocLineBuffers (
- char **Buffer,
- UINT32 OldSize,
- UINT32 NewSize)
-{
-
- *Buffer = realloc (*Buffer, NewSize);
- if (*Buffer)
- {
- memset (*Buffer + OldSize, 0, NewSize - OldSize);
- return;
- }
-
- printf ("Could not increase line buffer size from %u to %u\n",
- OldSize, NewSize);
-
- AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, NULL, NULL);
- AslAbort ();
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: UtFreeLineBuffers
- *
- * PARAMETERS: None
- *
- * RETURN: None
- *
- * DESCRIPTION: Free all line buffers
- *
- *****************************************************************************/
-
-void
-UtFreeLineBuffers (
- void)
-{
-
- free (Gbl_CurrentLineBuffer);
- free (Gbl_MainTokenBuffer);
- free (Gbl_MacroTokenBuffer);
- free (Gbl_ExpressionTokenBuffer);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: UtInternalizeName
*
* PARAMETERS: ExternalName - Name to convert
@@ -843,7 +624,7 @@ UtInternalizeName (
/* We need a segment to store the internal name */
- Info.InternalName = UtStringCacheCalloc (Info.Length);
+ Info.InternalName = UtLocalCacheCalloc (Info.Length);
/* Build the name */
diff --git a/sys/contrib/dev/acpica/compiler/cvcompiler.c b/sys/contrib/dev/acpica/compiler/cvcompiler.c
index 57eef4b682bb..0e9746a4d2cf 100644
--- a/sys/contrib/dev/acpica/compiler/cvcompiler.c
+++ b/sys/contrib/dev/acpica/compiler/cvcompiler.c
@@ -193,7 +193,7 @@ CvProcessComment (
*StringBuffer = 0;
CvDbgPrint ("Multi-line comment\n");
- CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
+ CommentString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1);
strcpy (CommentString, MsgBuffer);
CvDbgPrint ("CommentString: %s\n", CommentString);
@@ -208,7 +208,7 @@ CvProcessComment (
if (LineToken)
{
- FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1);
+ FinalLineToken = UtLocalCacheCalloc (strlen (LineToken) + 1);
strcpy (FinalLineToken, LineToken);
/* Get rid of any carriage returns */
@@ -238,7 +238,7 @@ CvProcessComment (
}
}
- FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1);
+ FinalLineToken = UtLocalCacheCalloc (strlen (LineToken) + 1);
strcat (FinalLineToken, LineToken);
/* Get rid of any carriage returns */
@@ -268,7 +268,7 @@ CvProcessComment (
* spacing.
*/
FinalCommentString =
- UtStringCacheCalloc (strlen (CommentString) +
+ UtLocalCacheCalloc (strlen (CommentString) +
CurrentState.SpacesBefore + 1);
for (i = 0; (CurrentState.CommentType != ASL_COMMENT_STANDARD) &&
@@ -313,7 +313,7 @@ CvProcessCommentType2 (
{
*StringBuffer = 0; /* null terminate */
CvDbgPrint ("Single-line comment\n");
- CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
+ CommentString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1);
strcpy (CommentString, MsgBuffer);
/* If this comment lies on the same line as the latest parse op,
@@ -342,7 +342,7 @@ CvProcessCommentType2 (
* [ (spaces) (comment) ( * /) ('\0') ]
*
*/
- FinalCommentString = UtStringCacheCalloc (CurrentState.SpacesBefore +
+ FinalCommentString = UtLocalCacheCalloc (CurrentState.SpacesBefore +
strlen (CommentString) + 3 + 1);
for (i = 0; (CurrentState.CommentType != 1) &&
@@ -507,7 +507,7 @@ CgWriteAmlDefBlockComment(
/* First, print the file name comment after changing .asl to .dsl */
- NewFilename = UtStringCacheCalloc (strlen (Op->Asl.Filename));
+ NewFilename = UtLocalCacheCalloc (strlen (Op->Asl.Filename));
strcpy (NewFilename, Op->Asl.Filename);
DirectoryPosition = strrchr (NewFilename, '/');
Position = strrchr (NewFilename, '.');
@@ -944,7 +944,7 @@ CvAppendInlineComment (
Size = strlen (ToAdd);
Size += strlen (InlineComment);
- Str = UtStringCacheCalloc (Size + 1);
+ Str = UtLocalCacheCalloc (Size + 1);
strcpy (Str, InlineComment);
strcat (Str, ToAdd);
diff --git a/sys/contrib/dev/acpica/compiler/cvparser.c b/sys/contrib/dev/acpica/compiler/cvparser.c
index eb89c4638958..77cffd027bae 100644
--- a/sys/contrib/dev/acpica/compiler/cvparser.c
+++ b/sys/contrib/dev/acpica/compiler/cvparser.c
@@ -714,7 +714,7 @@ CvCaptureCommentsOnly (
UINT8 *Aml = ParserState->Aml;
UINT16 Opcode = (UINT16) ACPI_GET8 (Aml);
UINT32 Length = 0;
- UINT8 CommentOption = (UINT16) ACPI_GET8 (Aml+1);
+ UINT8 CommentOption;
BOOLEAN StdDefBlockFlag = FALSE;
ACPI_COMMENT_NODE *CommentNode;
ACPI_FILE_NODE *FileNode;
diff --git a/sys/contrib/dev/acpica/compiler/dtcompile.c b/sys/contrib/dev/acpica/compiler/dtcompile.c
index b3d4fe27a5ec..67607a5f08e7 100644
--- a/sys/contrib/dev/acpica/compiler/dtcompile.c
+++ b/sys/contrib/dev/acpica/compiler/dtcompile.c
@@ -152,7 +152,6 @@
#define _DECLARE_DT_GLOBALS
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#define _COMPONENT DT_COMPILER
ACPI_MODULE_NAME ("dtcompile")
@@ -281,7 +280,6 @@ DtDoCompile (
CleanupAndExit:
AcpiUtDeleteCaches ();
- DtDeleteCaches ();
CmCleanupAndExit ();
return (Status);
}
@@ -412,7 +410,7 @@ DtCompileDataTable (
return (AE_ERROR);
}
- Gbl_Signature = UtStringCacheCalloc (strlen (Signature) + 1);
+ Gbl_Signature = UtLocalCacheCalloc (strlen (Signature) + 1);
strcpy (Gbl_Signature, Signature);
/*
@@ -585,7 +583,7 @@ DtCompileTable (
if (Length > 0)
{
- String = UtStringCacheCalloc (Length);
+ String = UtLocalCacheCalloc (Length);
Subtable->Buffer = ACPI_CAST_PTR (UINT8, String);
}
@@ -828,7 +826,7 @@ DtCompilePadding (
if (Length > 0)
{
- String = UtStringCacheCalloc (Length);
+ String = UtLocalCacheCalloc (Length);
Subtable->Buffer = ACPI_CAST_PTR (UINT8, String);
}
diff --git a/sys/contrib/dev/acpica/compiler/dtcompiler.h b/sys/contrib/dev/acpica/compiler/dtcompiler.h
index bf4a9a84b5ce..244784da83a9 100644
--- a/sys/contrib/dev/acpica/compiler/dtcompiler.h
+++ b/sys/contrib/dev/acpica/compiler/dtcompiler.h
@@ -154,7 +154,6 @@
#ifndef _DTCOMPILER
#define _DTCOMPILER
-#include <stdio.h>
#include <contrib/dev/acpica/include/acdisasm.h>
@@ -510,18 +509,6 @@ void
DtSetTableLength(
void);
-DT_SUBTABLE *
-UtSubtableCacheCalloc (
- void);
-
-DT_FIELD *
-UtFieldCacheCalloc (
- void);
-
-void
-DtDeleteCaches (
- void);
-
/* dttable - individual table compilation */
@@ -622,15 +609,19 @@ DtCompileNfit (
void **PFieldList);
ACPI_STATUS
-DtCompilePmtt (
+DtCompilePcct (
void **PFieldList);
ACPI_STATUS
-DtCompilePptt (
+DtCompilePdtt (
void **PFieldList);
ACPI_STATUS
-DtCompilePcct (
+DtCompilePmtt (
+ void **PFieldList);
+
+ACPI_STATUS
+DtCompilePptt (
void **PFieldList);
ACPI_STATUS
@@ -642,6 +633,10 @@ DtCompileS3pt (
DT_FIELD **PFieldList);
ACPI_STATUS
+DtCompileSdev (
+ void **PFieldList);
+
+ACPI_STATUS
DtCompileSlic (
void **PFieldList);
@@ -662,6 +657,10 @@ DtCompileTcpa (
void **PFieldList);
ACPI_STATUS
+DtCompileTpm2 (
+ void **PFieldList);
+
+ACPI_STATUS
DtCompileUefi (
void **PFieldList);
@@ -724,6 +723,7 @@ extern const unsigned char TemplateMsdm[];
extern const unsigned char TemplateMtmr[];
extern const unsigned char TemplateNfit[];
extern const unsigned char TemplatePcct[];
+extern const unsigned char TemplatePdtt[];
extern const unsigned char TemplatePmtt[];
extern const unsigned char TemplatePptt[];
extern const unsigned char TemplateRasf[];
@@ -731,6 +731,7 @@ extern const unsigned char TemplateRsdt[];
extern const unsigned char TemplateS3pt[];
extern const unsigned char TemplateSbst[];
extern const unsigned char TemplateSdei[];
+extern const unsigned char TemplateSdev[];
extern const unsigned char TemplateSlic[];
extern const unsigned char TemplateSlit[];
extern const unsigned char TemplateSpcr[];
diff --git a/sys/contrib/dev/acpica/compiler/dtexpress.c b/sys/contrib/dev/acpica/compiler/dtexpress.c
index b5ba58b85b6e..68211c03def2 100644
--- a/sys/contrib/dev/acpica/compiler/dtexpress.c
+++ b/sys/contrib/dev/acpica/compiler/dtexpress.c
@@ -150,7 +150,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#include "dtparser.y.h"
#define _COMPONENT DT_COMPILER
diff --git a/sys/contrib/dev/acpica/compiler/dtfield.c b/sys/contrib/dev/acpica/compiler/dtfield.c
index b22a1ae7946b..96c3ea9b5bff 100644
--- a/sys/contrib/dev/acpica/compiler/dtfield.c
+++ b/sys/contrib/dev/acpica/compiler/dtfield.c
@@ -150,7 +150,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#define _COMPONENT DT_COMPILER
ACPI_MODULE_NAME ("dtfield")
diff --git a/sys/contrib/dev/acpica/compiler/dtio.c b/sys/contrib/dev/acpica/compiler/dtio.c
index 90015acc70bf..3b081a02dd12 100644
--- a/sys/contrib/dev/acpica/compiler/dtio.c
+++ b/sys/contrib/dev/acpica/compiler/dtio.c
@@ -150,7 +150,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#include <contrib/dev/acpica/include/acapps.h>
#define _COMPONENT DT_COMPILER
@@ -239,7 +238,7 @@ DtTrim (
if (!strcmp (String, " "))
{
- ReturnString = UtStringCacheCalloc (1);
+ ReturnString = UtLocalCacheCalloc (1);
return (ReturnString);
}
@@ -287,7 +286,7 @@ DtTrim (
/* Create the trimmed return string */
Length = ACPI_PTR_DIFF (End, Start) + 1;
- ReturnString = UtStringCacheCalloc (Length + 1);
+ ReturnString = UtLocalCacheCalloc (Length + 1);
if (strlen (Start))
{
strncpy (ReturnString, Start, Length);
diff --git a/sys/contrib/dev/acpica/compiler/dtparser.y b/sys/contrib/dev/acpica/compiler/dtparser.y
index 1d6cb8e8b806..38bc96922526 100644
--- a/sys/contrib/dev/acpica/compiler/dtparser.y
+++ b/sys/contrib/dev/acpica/compiler/dtparser.y
@@ -151,7 +151,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#define _COMPONENT DT_COMPILER
ACPI_MODULE_NAME ("dtparser")
diff --git a/sys/contrib/dev/acpica/compiler/dtsubtable.c b/sys/contrib/dev/acpica/compiler/dtsubtable.c
index d75fa927a072..a258a61eb5ca 100644
--- a/sys/contrib/dev/acpica/compiler/dtsubtable.c
+++ b/sys/contrib/dev/acpica/compiler/dtsubtable.c
@@ -150,7 +150,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#define _COMPONENT DT_COMPILER
ACPI_MODULE_NAME ("dtsubtable")
@@ -186,7 +185,7 @@ DtCreateSubtable (
/* Create a new buffer for the subtable data */
- String = UtStringCacheCalloc (Length);
+ String = UtLocalCacheCalloc (Length);
Subtable->Buffer = ACPI_CAST_PTR (UINT8, String);
memcpy (Subtable->Buffer, Buffer, Length);
diff --git a/sys/contrib/dev/acpica/compiler/dttable.c b/sys/contrib/dev/acpica/compiler/dttable.c
index 0d1df7fe612b..7c3e9db9e06d 100644
--- a/sys/contrib/dev/acpica/compiler/dttable.c
+++ b/sys/contrib/dev/acpica/compiler/dttable.c
@@ -152,7 +152,6 @@
/* Compile routines for the basic ACPI tables */
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#define _COMPONENT DT_COMPILER
ACPI_MODULE_NAME ("dttable")
diff --git a/sys/contrib/dev/acpica/compiler/dttable1.c b/sys/contrib/dev/acpica/compiler/dttable1.c
index 81a61b3accf2..5d4aca11a21c 100644
--- a/sys/contrib/dev/acpica/compiler/dttable1.c
+++ b/sys/contrib/dev/acpica/compiler/dttable1.c
@@ -152,7 +152,6 @@
/* Compile all complex data tables, signatures starting with A-I */
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#define _COMPONENT DT_COMPILER
ACPI_MODULE_NAME ("dttable1")
diff --git a/sys/contrib/dev/acpica/compiler/dttable2.c b/sys/contrib/dev/acpica/compiler/dttable2.c
index 4460394de9bb..51f5b2c488ff 100644
--- a/sys/contrib/dev/acpica/compiler/dttable2.c
+++ b/sys/contrib/dev/acpica/compiler/dttable2.c
@@ -152,7 +152,6 @@
/* Compile all complex data tables, signatures starting with L-Z */
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#define _COMPONENT DT_COMPILER
ACPI_MODULE_NAME ("dttable2")
@@ -904,6 +903,66 @@ DtCompilePcct (
/******************************************************************************
*
+ * FUNCTION: DtCompilePdtt
+ *
+ * PARAMETERS: List - Current field list pointer
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Compile PDTT.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+DtCompilePdtt (
+ void **List)
+{
+ ACPI_STATUS Status;
+ DT_SUBTABLE *Subtable;
+ DT_SUBTABLE *ParentTable;
+ DT_FIELD **PFieldList = (DT_FIELD **) List;
+ ACPI_TABLE_PDTT *PdttHeader;
+ UINT32 Count = 0;
+
+
+ /* Main table */
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt, &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+
+ PdttHeader = ACPI_CAST_PTR (ACPI_TABLE_PDTT, ParentTable->Buffer);
+ PdttHeader->ArrayOffset = sizeof (ACPI_TABLE_PDTT);
+
+ /* There is only one type of subtable at this time, no need to decode */
+
+ while (*PFieldList)
+ {
+ /* List of subchannel IDs, each 2 bytes */
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt0,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ DtInsertSubtable (ParentTable, Subtable);
+ Count++;
+ }
+
+ PdttHeader->TriggerCount = (UINT8) Count;
+ return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
* FUNCTION: DtCompilePmtt
*
* PARAMETERS: List - Current field list pointer
@@ -1285,6 +1344,219 @@ DtCompileS3pt (
/******************************************************************************
*
+ * FUNCTION: DtCompileSdev
+ *
+ * PARAMETERS: List - Current field list pointer
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Compile SDEV.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+DtCompileSdev (
+ void **List)
+{
+ ACPI_STATUS Status;
+ ACPI_SDEV_HEADER *SdevHeader;
+ DT_SUBTABLE *Subtable;
+ DT_SUBTABLE *ParentTable;
+ ACPI_DMTABLE_INFO *InfoTable;
+ DT_FIELD **PFieldList = (DT_FIELD **) List;
+ DT_FIELD *SubtableStart;
+ ACPI_SDEV_PCIE *Pcie = NULL;
+ ACPI_SDEV_NAMESPACE *Namesp = NULL;
+ UINT32 EntryCount;
+
+
+ /* Subtables */
+
+ while (*PFieldList)
+ {
+ /* Compile common SDEV subtable header */
+
+ SubtableStart = *PFieldList;
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdevHdr,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+ DtPushSubtable (Subtable);
+
+ SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer);
+ SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER));
+
+ switch (SdevHeader->Type)
+ {
+ case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
+
+ InfoTable = AcpiDmTableInfoSdev0;
+ Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable->Buffer);
+ break;
+
+ case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
+
+ InfoTable = AcpiDmTableInfoSdev1;
+ Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable->Buffer);
+ break;
+
+ default:
+
+ DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV");
+ return (AE_ERROR);
+ }
+
+ /* Compile SDEV subtable body */
+
+ Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+
+ /* Optional data fields are appended to the main subtable body */
+
+ switch (SdevHeader->Type)
+ {
+ case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
+
+ /* Append DeviceId namespace string */
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev0a,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ if (!Subtable)
+ {
+ break;
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+
+ Namesp->DeviceIdOffset = sizeof (ACPI_SDEV_NAMESPACE);
+ Namesp->DeviceIdLength = (UINT16) Subtable->Length;
+
+ /* Append Vendor data */
+
+ Namesp->VendorDataLength = 0;
+ Namesp->VendorDataOffset = 0;
+
+ if (*PFieldList)
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ if (Subtable)
+ {
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+
+ Namesp->VendorDataOffset =
+ Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
+ Namesp->VendorDataLength =
+ (UINT16) Subtable->Length;
+ }
+ }
+
+ /* Final size of entire namespace structure */
+
+ SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_NAMESPACE) +
+ Subtable->Length + Namesp->DeviceIdLength);
+ break;
+
+ case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
+
+ /* Append the PCIe path info first */
+
+ EntryCount = 0;
+ while (*PFieldList && !strcmp ((*PFieldList)->Name, "Device"))
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1a,
+ &Subtable, FALSE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ if (!Subtable)
+ {
+ DtPopSubtable ();
+ break;
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+ EntryCount++;
+ }
+
+ /* Path offset will point immediately after the main subtable */
+
+ Pcie->PathOffset = sizeof (ACPI_SDEV_PCIE);
+ Pcie->PathLength = (UINT16)
+ (EntryCount * sizeof (ACPI_SDEV_PCIE_PATH));
+
+ /* Append the Vendor Data last */
+
+ Pcie->VendorDataLength = 0;
+ Pcie->VendorDataOffset = 0;
+
+ if (*PFieldList)
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ if (Subtable)
+ {
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+
+ Pcie->VendorDataOffset =
+ Pcie->PathOffset + Pcie->PathLength;
+ Pcie->VendorDataLength = (UINT16)
+ Subtable->Length;
+ }
+ }
+
+ SdevHeader->Length =
+ sizeof (ACPI_SDEV_PCIE) +
+ Pcie->PathLength + Pcie->VendorDataLength;
+ break;
+
+ default:
+
+ DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV");
+ return (AE_ERROR);
+ }
+
+ DtPopSubtable ();
+ }
+
+ return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
* FUNCTION: DtCompileSlic
*
* PARAMETERS: List - Current field list pointer
@@ -1603,6 +1875,109 @@ DtCompileTcpa (
/******************************************************************************
*
+ * FUNCTION: DtCompileTpm2
+ *
+ * PARAMETERS: PFieldList - Current field list pointer
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Compile TPM2.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+DtCompileTpm2 (
+ void **List)
+{
+ DT_FIELD **PFieldList = (DT_FIELD **) List;
+ DT_SUBTABLE *Subtable;
+ ACPI_TABLE_TPM2 *Tpm2Header;
+ DT_SUBTABLE *ParentTable;
+ ACPI_STATUS Status = AE_OK;
+
+
+ /* Compile the main table */
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+
+ Tpm2Header = ACPI_CAST_PTR (ACPI_TABLE_TPM2, ParentTable->Buffer);
+
+ /* Method parameters */
+ /* Optional: Log area minimum length */
+ /* Optional: Log area start address */
+ /* TBD: Optional fields above not fully implemented (not optional at this time) */
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2a,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+
+
+ /* Subtable type depends on the StartMethod */
+
+ switch (Tpm2Header->StartMethod)
+ {
+ case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC:
+
+ /* Subtable specific to to ARM_SMC */
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm211,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+ break;
+
+ case ACPI_TPM2_START_METHOD:
+ case ACPI_TPM2_MEMORY_MAPPED:
+ case ACPI_TPM2_COMMAND_BUFFER:
+ case ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD:
+ break;
+
+ case ACPI_TPM2_RESERVED1:
+ case ACPI_TPM2_RESERVED3:
+ case ACPI_TPM2_RESERVED4:
+ case ACPI_TPM2_RESERVED5:
+ case ACPI_TPM2_RESERVED9:
+ case ACPI_TPM2_RESERVED10:
+
+ AcpiOsPrintf ("\n**** Reserved TPM2 Start Method type 0x%X\n",
+ Tpm2Header->StartMethod);
+ Status = AE_ERROR;
+ break;
+
+ case ACPI_TPM2_NOT_ALLOWED:
+ default:
+
+ AcpiOsPrintf ("\n**** Unknown TPM2 Start Method type 0x%X\n",
+ Tpm2Header->StartMethod);
+ Status = AE_ERROR;
+ break;
+ }
+
+ return (Status);
+}
+
+
+/******************************************************************************
+ *
* FUNCTION: DtGetGenericTableInfo
*
* PARAMETERS: Name - Generic type name
diff --git a/sys/contrib/dev/acpica/compiler/dttemplate.c b/sys/contrib/dev/acpica/compiler/dttemplate.c
index 7ece577c2082..309386c54939 100644
--- a/sys/contrib/dev/acpica/compiler/dttemplate.c
+++ b/sys/contrib/dev/acpica/compiler/dttemplate.c
@@ -151,7 +151,6 @@
#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include <contrib/dev/acpica/include/acapps.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#include <contrib/dev/acpica/compiler/dttemplate.h> /* Contains the hex ACPI table templates */
#define _COMPONENT DT_COMPILER
@@ -315,7 +314,7 @@ Exit:
/* Shutdown ACPICA subsystem */
(void) AcpiTerminate ();
- CmDeleteCaches ();
+ UtDeleteLocalCaches ();
return (Status);
}
diff --git a/sys/contrib/dev/acpica/compiler/dttemplate.h b/sys/contrib/dev/acpica/compiler/dttemplate.h
index 8d27359d9ad0..38750f79d979 100644
--- a/sys/contrib/dev/acpica/compiler/dttemplate.h
+++ b/sys/contrib/dev/acpica/compiler/dttemplate.h
@@ -1079,6 +1079,17 @@ const unsigned char TemplatePcct[] =
0x55,0x55,0x55,0x55,0x55,0x55 /* 00000248 "UUUUUU| */
};
+const unsigned char TemplatePdtt[] =
+{
+ 0x50,0x44,0x54,0x54,0x34,0x00,0x00,0x00, /* 00000000 "PDTT4..." */
+ 0x01,0xCB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
+ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
+ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
+ 0x31,0x08,0x17,0x20,0x04,0x00,0x00,0x00, /* 00000020 "1.. ...." */
+ 0x2C,0x00,0x00,0x00,0xAA,0x03,0xBB,0x02, /* 00000028 ",......." */
+ 0xCC,0x01,0xDD,0x00 /* 00000030 "...." */
+};
+
const unsigned char TemplatePmtt[] =
{
0x50,0x4D,0x54,0x54,0xB4,0x00,0x00,0x00, /* 00000000 "PMTT...." */
@@ -1187,6 +1198,25 @@ const unsigned char TemplateSdei[] =
0x30,0x09,0x16,0x20 /* 00000028 "0.. " */
};
+const unsigned char TemplateSdev[] =
+{
+ 0x53,0x44,0x45,0x56,0x72,0x00,0x00,0x00, /* 00000000 "SDEVr..." */
+ 0x01,0x2F,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "./INTEL " */
+ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
+ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
+ 0x31,0x08,0x17,0x20,0x00,0x01,0x2A,0x00, /* 00000020 "1.. ..*." */
+ 0x0C,0x00,0x16,0x00,0x22,0x00,0x08,0x00, /* 00000028 "...."..." */
+ 0x5C,0x5C,0x5F,0x53,0x42,0x5F,0x2E,0x50, /* 00000030 "\\_SB_.P" */
+ 0x43,0x49,0x30,0x2E,0x55,0x53,0x42,0x31, /* 00000038 "CI0.USB1" */
+ 0x2E,0x53,0x55,0x42,0x31,0x00,0x00,0x11, /* 00000040 ".SUB1..." */
+ 0x22,0x33,0x44,0x55,0x66,0x77,0x01,0x01, /* 00000048 ""3DUfw.." */
+ 0x24,0x00,0x10,0x00,0x20,0x00,0x10,0x00, /* 00000050 "$... ..." */
+ 0x04,0x00,0x14,0x00,0x10,0x00,0x11,0x22, /* 00000058 "......."" */
+ 0x33,0x44,0xEE,0xDD,0xCC,0xBB,0xAA,0x55, /* 00000060 "3D.....U" */
+ 0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD, /* 00000068 "fw......" */
+ 0xEE,0xFF /* 00000070 ".." */
+};
+
const unsigned char TemplateSlic[] =
{
0x53,0x4C,0x49,0x43,0x76,0x01,0x00,0x00, /* 00000000 "SLICv..." */
@@ -1388,13 +1418,17 @@ const unsigned char TemplateTcpa[] =
const unsigned char TemplateTpm2[] =
{
- 0x54,0x50,0x4D,0x32,0x34,0x00,0x00,0x00, /* 00000000 "TPM24..." */
- 0x03,0x42,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".BINTEL " */
- 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
+ 0x54,0x50,0x4D,0x32,0x58,0x00,0x00,0x00, /* 00000000 "TPM2X..." */
+ 0x03,0xAB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
+ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
- 0x14,0x11,0x12,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */
- 0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00, /* 00000028 "wfUD3".." */
- 0x01,0x00,0x00,0x00 /* 00000030 "...." */
+ 0x31,0x08,0x17,0x20,0x01,0x00,0x00,0x00, /* 00000020 "1.. ...." */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
+ 0x0B,0x00,0x00,0x00,0x01,0x02,0x03,0x04, /* 00000030 "........" */
+ 0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C, /* 00000038 "........" */
+ 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */
+ 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000048 "........" */
+ 0x01,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF /* 00000050 "........" */
};
const unsigned char TemplateUefi[] =
diff --git a/sys/contrib/dev/acpica/compiler/dtutils.c b/sys/contrib/dev/acpica/compiler/dtutils.c
index 1d4e23396967..54832f7b24bf 100644
--- a/sys/contrib/dev/acpica/compiler/dtutils.c
+++ b/sys/contrib/dev/acpica/compiler/dtutils.c
@@ -150,7 +150,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#include <contrib/dev/acpica/include/actables.h>
#define _COMPONENT DT_COMPILER
@@ -570,6 +569,7 @@ DtGetFieldLength (
case ACPI_DMT_PCCT:
case ACPI_DMT_PMTT:
case ACPI_DMT_PPTT:
+ case ACPI_DMT_SDEV:
case ACPI_DMT_SRAT:
case ACPI_DMT_ASF:
case ACPI_DMT_HESTNTYP:
@@ -602,6 +602,7 @@ DtGetFieldLength (
case ACPI_DMT_NAME4:
case ACPI_DMT_SIG:
case ACPI_DMT_LPIT:
+ case ACPI_DMT_TPM2:
ByteLength = 4;
break;
@@ -920,153 +921,3 @@ DtWalkTableTree (
}
}
}
-
-
-/*******************************************************************************
- *
- * FUNCTION: UtSubtableCacheCalloc
- *
- * PARAMETERS: None
- *
- * RETURN: Pointer to the buffer. Aborts on allocation failure
- *
- * DESCRIPTION: Allocate a subtable object buffer. Bypass the local
- * dynamic memory manager for performance reasons (This has a
- * major impact on the speed of the compiler.)
- *
- ******************************************************************************/
-
-DT_SUBTABLE *
-UtSubtableCacheCalloc (
- void)
-{
- ASL_CACHE_INFO *Cache;
-
-
- if (Gbl_SubtableCacheNext >= Gbl_SubtableCacheLast)
- {
- /* Allocate a new buffer */
-
- Cache = UtLocalCalloc (sizeof (Cache->Next) +
- (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE));
-
- /* Link new cache buffer to head of list */
-
- Cache->Next = Gbl_SubtableCacheList;
- Gbl_SubtableCacheList = Cache;
-
- /* Setup cache management pointers */
-
- Gbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer);
- Gbl_SubtableCacheLast = Gbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE;
- }
-
- Gbl_SubtableCount++;
- return (Gbl_SubtableCacheNext++);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: UtFieldCacheCalloc
- *
- * PARAMETERS: None
- *
- * RETURN: Pointer to the buffer. Aborts on allocation failure
- *
- * DESCRIPTION: Allocate a field object buffer. Bypass the local
- * dynamic memory manager for performance reasons (This has a
- * major impact on the speed of the compiler.)
- *
- ******************************************************************************/
-
-DT_FIELD *
-UtFieldCacheCalloc (
- void)
-{
- ASL_CACHE_INFO *Cache;
-
-
- if (Gbl_FieldCacheNext >= Gbl_FieldCacheLast)
- {
- /* Allocate a new buffer */
-
- Cache = UtLocalCalloc (sizeof (Cache->Next) +
- (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE));
-
- /* Link new cache buffer to head of list */
-
- Cache->Next = Gbl_FieldCacheList;
- Gbl_FieldCacheList = Cache;
-
- /* Setup cache management pointers */
-
- Gbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer);
- Gbl_FieldCacheLast = Gbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE;
- }
-
- Gbl_FieldCount++;
- return (Gbl_FieldCacheNext++);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: DtDeleteCaches
- *
- * PARAMETERS: None
- *
- * RETURN: None
- *
- * DESCRIPTION: Delete all local cache buffer blocks
- *
- ******************************************************************************/
-
-void
-DtDeleteCaches (
- void)
-{
- UINT32 BufferCount;
- ASL_CACHE_INFO *Next;
-
-
- /* Field cache */
-
- BufferCount = 0;
- while (Gbl_FieldCacheList)
- {
- Next = Gbl_FieldCacheList->Next;
- ACPI_FREE (Gbl_FieldCacheList);
- Gbl_FieldCacheList = Next;
- BufferCount++;
- }
-
- DbgPrint (ASL_DEBUG_OUTPUT,
- "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n",
- Gbl_FieldCount, ASL_FIELD_CACHE_SIZE,
- (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount);
-
- Gbl_FieldCount = 0;
- Gbl_FieldCacheNext = NULL;
- Gbl_FieldCacheLast = NULL;
-
- /* Subtable cache */
-
- BufferCount = 0;
- while (Gbl_SubtableCacheList)
- {
- Next = Gbl_SubtableCacheList->Next;
- ACPI_FREE (Gbl_SubtableCacheList);
- Gbl_SubtableCacheList = Next;
- BufferCount++;
- }
-
- DbgPrint (ASL_DEBUG_OUTPUT,
- "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n",
- Gbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE,
- (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount);
-
- Gbl_SubtableCount = 0;
- Gbl_SubtableCacheNext = NULL;
- Gbl_SubtableCacheLast = NULL;
-}
diff --git a/sys/contrib/dev/acpica/compiler/prexpress.c b/sys/contrib/dev/acpica/compiler/prexpress.c
index 892e73dcfc90..df2fc46cdea6 100644
--- a/sys/contrib/dev/acpica/compiler/prexpress.c
+++ b/sys/contrib/dev/acpica/compiler/prexpress.c
@@ -150,8 +150,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
-
#define _COMPONENT ASL_PREPROCESSOR
ACPI_MODULE_NAME ("prexpress")
diff --git a/sys/contrib/dev/acpica/compiler/prmacros.c b/sys/contrib/dev/acpica/compiler/prmacros.c
index 82b221a7e37f..e1aaa3bcecab 100644
--- a/sys/contrib/dev/acpica/compiler/prmacros.c
+++ b/sys/contrib/dev/acpica/compiler/prmacros.c
@@ -150,8 +150,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
-
#define _COMPONENT ASL_PREPROCESSOR
ACPI_MODULE_NAME ("prmacros")
diff --git a/sys/contrib/dev/acpica/compiler/prparser.y b/sys/contrib/dev/acpica/compiler/prparser.y
index 22655076c550..ec9c0c58d807 100644
--- a/sys/contrib/dev/acpica/compiler/prparser.y
+++ b/sys/contrib/dev/acpica/compiler/prparser.y
@@ -151,7 +151,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
#define _COMPONENT ASL_PREPROCESSOR
ACPI_MODULE_NAME ("prparser")
diff --git a/sys/contrib/dev/acpica/compiler/prscan.c b/sys/contrib/dev/acpica/compiler/prscan.c
index 02df42770571..23391d2c7f20 100644
--- a/sys/contrib/dev/acpica/compiler/prscan.c
+++ b/sys/contrib/dev/acpica/compiler/prscan.c
@@ -152,7 +152,6 @@
#define _DECLARE_PR_GLOBALS
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
/*
* TBDs:
diff --git a/sys/contrib/dev/acpica/compiler/prutils.c b/sys/contrib/dev/acpica/compiler/prutils.c
index 45da8146222b..3d7e5fe7fc8f 100644
--- a/sys/contrib/dev/acpica/compiler/prutils.c
+++ b/sys/contrib/dev/acpica/compiler/prutils.c
@@ -150,8 +150,6 @@
*****************************************************************************/
#include <contrib/dev/acpica/compiler/aslcompiler.h>
-#include <contrib/dev/acpica/compiler/dtcompiler.h>
-
#define _COMPONENT ASL_PREPROCESSOR
ACPI_MODULE_NAME ("prutils")
@@ -514,7 +512,7 @@ PrPushInputFileStack (
/* Reset the global line count and filename */
Gbl_Files[ASL_FILE_INPUT].Filename =
- UtStringCacheCalloc (strlen (Filename) + 1);
+ UtLocalCacheCalloc (strlen (Filename) + 1);
strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename);
Gbl_Files[ASL_FILE_INPUT].Handle = InputFile;