153289f6aSNate Lawson /****************************************************************************** 253289f6aSNate Lawson * 353289f6aSNate Lawson * Module Name: aslerror - Error handling and statistics 453289f6aSNate Lawson * 553289f6aSNate Lawson *****************************************************************************/ 653289f6aSNate Lawson 70d84335fSJung-uk Kim /****************************************************************************** 80d84335fSJung-uk Kim * 90d84335fSJung-uk Kim * 1. Copyright Notice 100d84335fSJung-uk Kim * 11*804fe266SJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. 1253289f6aSNate Lawson * All rights reserved. 1353289f6aSNate Lawson * 140d84335fSJung-uk Kim * 2. License 150d84335fSJung-uk Kim * 160d84335fSJung-uk Kim * 2.1. This is your license from Intel Corp. under its intellectual property 170d84335fSJung-uk Kim * rights. You may have additional license terms from the party that provided 180d84335fSJung-uk Kim * you this software, covering your right to use that party's intellectual 190d84335fSJung-uk Kim * property rights. 200d84335fSJung-uk Kim * 210d84335fSJung-uk Kim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 220d84335fSJung-uk Kim * copy of the source code appearing in this file ("Covered Code") an 230d84335fSJung-uk Kim * irrevocable, perpetual, worldwide license under Intel's copyrights in the 240d84335fSJung-uk Kim * base code distributed originally by Intel ("Original Intel Code") to copy, 250d84335fSJung-uk Kim * make derivatives, distribute, use and display any portion of the Covered 260d84335fSJung-uk Kim * Code in any form, with the right to sublicense such rights; and 270d84335fSJung-uk Kim * 280d84335fSJung-uk Kim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 290d84335fSJung-uk Kim * license (with the right to sublicense), under only those claims of Intel 300d84335fSJung-uk Kim * patents that are infringed by the Original Intel Code, to make, use, sell, 310d84335fSJung-uk Kim * offer to sell, and import the Covered Code and derivative works thereof 320d84335fSJung-uk Kim * solely to the minimum extent necessary to exercise the above copyright 330d84335fSJung-uk Kim * license, and in no event shall the patent license extend to any additions 340d84335fSJung-uk Kim * to or modifications of the Original Intel Code. No other license or right 350d84335fSJung-uk Kim * is granted directly or by implication, estoppel or otherwise; 360d84335fSJung-uk Kim * 370d84335fSJung-uk Kim * The above copyright and patent license is granted only if the following 380d84335fSJung-uk Kim * conditions are met: 390d84335fSJung-uk Kim * 400d84335fSJung-uk Kim * 3. Conditions 410d84335fSJung-uk Kim * 420d84335fSJung-uk Kim * 3.1. Redistribution of Source with Rights to Further Distribute Source. 430d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 440d84335fSJung-uk Kim * Code or modification with rights to further distribute source must include 450d84335fSJung-uk Kim * the above Copyright Notice, the above License, this list of Conditions, 460d84335fSJung-uk Kim * and the following Disclaimer and Export Compliance provision. In addition, 470d84335fSJung-uk Kim * Licensee must cause all Covered Code to which Licensee contributes to 480d84335fSJung-uk Kim * contain a file documenting the changes Licensee made to create that Covered 490d84335fSJung-uk Kim * Code and the date of any change. Licensee must include in that file the 500d84335fSJung-uk Kim * documentation of any changes made by any predecessor Licensee. Licensee 510d84335fSJung-uk Kim * must include a prominent statement that the modification is derived, 520d84335fSJung-uk Kim * directly or indirectly, from Original Intel Code. 530d84335fSJung-uk Kim * 540d84335fSJung-uk Kim * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 550d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 560d84335fSJung-uk Kim * Code or modification without rights to further distribute source must 570d84335fSJung-uk Kim * include the following Disclaimer and Export Compliance provision in the 580d84335fSJung-uk Kim * documentation and/or other materials provided with distribution. In 590d84335fSJung-uk Kim * addition, Licensee may not authorize further sublicense of source of any 600d84335fSJung-uk Kim * portion of the Covered Code, and must include terms to the effect that the 610d84335fSJung-uk Kim * license from Licensee to its licensee is limited to the intellectual 620d84335fSJung-uk Kim * property embodied in the software Licensee provides to its licensee, and 630d84335fSJung-uk Kim * not to intellectual property embodied in modifications its licensee may 640d84335fSJung-uk Kim * make. 650d84335fSJung-uk Kim * 660d84335fSJung-uk Kim * 3.3. Redistribution of Executable. Redistribution in executable form of any 670d84335fSJung-uk Kim * substantial portion of the Covered Code or modification must reproduce the 680d84335fSJung-uk Kim * above Copyright Notice, and the following Disclaimer and Export Compliance 690d84335fSJung-uk Kim * provision in the documentation and/or other materials provided with the 700d84335fSJung-uk Kim * distribution. 710d84335fSJung-uk Kim * 720d84335fSJung-uk Kim * 3.4. Intel retains all right, title, and interest in and to the Original 730d84335fSJung-uk Kim * Intel Code. 740d84335fSJung-uk Kim * 750d84335fSJung-uk Kim * 3.5. Neither the name Intel nor any other trademark owned or controlled by 760d84335fSJung-uk Kim * Intel shall be used in advertising or otherwise to promote the sale, use or 770d84335fSJung-uk Kim * other dealings in products derived from or relating to the Covered Code 780d84335fSJung-uk Kim * without prior written authorization from Intel. 790d84335fSJung-uk Kim * 800d84335fSJung-uk Kim * 4. Disclaimer and Export Compliance 810d84335fSJung-uk Kim * 820d84335fSJung-uk Kim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 830d84335fSJung-uk Kim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 840d84335fSJung-uk Kim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 850d84335fSJung-uk Kim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 860d84335fSJung-uk Kim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 870d84335fSJung-uk Kim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 880d84335fSJung-uk Kim * PARTICULAR PURPOSE. 890d84335fSJung-uk Kim * 900d84335fSJung-uk Kim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 910d84335fSJung-uk Kim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 920d84335fSJung-uk Kim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 930d84335fSJung-uk Kim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 940d84335fSJung-uk Kim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 950d84335fSJung-uk Kim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 960d84335fSJung-uk Kim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 970d84335fSJung-uk Kim * LIMITED REMEDY. 980d84335fSJung-uk Kim * 990d84335fSJung-uk Kim * 4.3. Licensee shall not export, either directly or indirectly, any of this 1000d84335fSJung-uk Kim * software or system incorporating such software without first obtaining any 1010d84335fSJung-uk Kim * required license or other approval from the U. S. Department of Commerce or 1020d84335fSJung-uk Kim * any other agency or department of the United States Government. In the 1030d84335fSJung-uk Kim * event Licensee exports any such software from the United States or 1040d84335fSJung-uk Kim * re-exports any such software from a foreign destination, Licensee shall 1050d84335fSJung-uk Kim * ensure that the distribution and export/re-export of the software is in 1060d84335fSJung-uk Kim * compliance with all laws, regulations, orders, or other restrictions of the 1070d84335fSJung-uk Kim * U.S. Export Administration Regulations. Licensee agrees that neither it nor 1080d84335fSJung-uk Kim * any of its subsidiaries will export/re-export any technical data, process, 1090d84335fSJung-uk Kim * software, or service, directly or indirectly, to any country for which the 1100d84335fSJung-uk Kim * United States government or any agency thereof requires an export license, 1110d84335fSJung-uk Kim * other governmental approval, or letter of assurance, without first obtaining 1120d84335fSJung-uk Kim * such license, approval or letter. 1130d84335fSJung-uk Kim * 1140d84335fSJung-uk Kim ***************************************************************************** 1150d84335fSJung-uk Kim * 1160d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 1170d84335fSJung-uk Kim * following license: 1180d84335fSJung-uk Kim * 119d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 120d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 121d244b227SJung-uk Kim * are met: 122d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 123d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 124d244b227SJung-uk Kim * without modification. 125d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 126d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 127d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 128d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 129d244b227SJung-uk Kim * binary redistribution. 130d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 131d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 132d244b227SJung-uk Kim * from this software without specific prior written permission. 13353289f6aSNate Lawson * 1340d84335fSJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1350d84335fSJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1360d84335fSJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1370d84335fSJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1380d84335fSJung-uk Kim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 1390d84335fSJung-uk Kim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1400d84335fSJung-uk Kim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1410d84335fSJung-uk Kim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 1420d84335fSJung-uk Kim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1430d84335fSJung-uk Kim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1440d84335fSJung-uk Kim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1450d84335fSJung-uk Kim * 1460d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 147d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 148d244b227SJung-uk Kim * Software Foundation. 14953289f6aSNate Lawson * 1500d84335fSJung-uk Kim *****************************************************************************/ 15153289f6aSNate Lawson 152ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 15353289f6aSNate Lawson 15453289f6aSNate Lawson #define _COMPONENT ACPI_COMPILER 15553289f6aSNate Lawson ACPI_MODULE_NAME ("aslerror") 15653289f6aSNate Lawson 157fba7fc7eSJung-uk Kim /* Local prototypes */ 158fba7fc7eSJung-uk Kim 159fba7fc7eSJung-uk Kim static void 160fba7fc7eSJung-uk Kim AeAddToErrorLog ( 161fba7fc7eSJung-uk Kim ASL_ERROR_MSG *Enode); 162fba7fc7eSJung-uk Kim 1635f9b24faSJung-uk Kim static BOOLEAN 1645f9b24faSJung-uk Kim AslIsExceptionExpected ( 1653ee58df5SJung-uk Kim char *Filename, 1663ee58df5SJung-uk Kim UINT32 LineNumber, 1675f9b24faSJung-uk Kim UINT8 Level, 1685f9b24faSJung-uk Kim UINT16 MessageId); 1695f9b24faSJung-uk Kim 1705f9b24faSJung-uk Kim static BOOLEAN 1715f9b24faSJung-uk Kim AslIsExceptionDisabled ( 1725f9b24faSJung-uk Kim UINT8 Level, 1735f9b24faSJung-uk Kim UINT16 MessageId); 1745f9b24faSJung-uk Kim 1753ee58df5SJung-uk Kim static void 1763ee58df5SJung-uk Kim AslInitEnode ( 17767d9aa44SJung-uk Kim ASL_ERROR_MSG **Enode, 17867d9aa44SJung-uk Kim UINT8 Level, 17967d9aa44SJung-uk Kim UINT16 MessageId, 18067d9aa44SJung-uk Kim UINT32 LineNumber, 18167d9aa44SJung-uk Kim UINT32 LogicalLineNumber, 18267d9aa44SJung-uk Kim UINT32 LogicalByteOffset, 18367d9aa44SJung-uk Kim UINT32 Column, 18467d9aa44SJung-uk Kim char *Filename, 18567d9aa44SJung-uk Kim char *Message, 18667d9aa44SJung-uk Kim char *SourceLine, 18767d9aa44SJung-uk Kim ASL_ERROR_MSG *SubError); 18867d9aa44SJung-uk Kim 18967d9aa44SJung-uk Kim static void 19067d9aa44SJung-uk Kim AslLogNewError ( 19167d9aa44SJung-uk Kim UINT8 Level, 19267d9aa44SJung-uk Kim UINT16 MessageId, 19367d9aa44SJung-uk Kim UINT32 LineNumber, 19467d9aa44SJung-uk Kim UINT32 LogicalLineNumber, 19567d9aa44SJung-uk Kim UINT32 LogicalByteOffset, 19667d9aa44SJung-uk Kim UINT32 Column, 19767d9aa44SJung-uk Kim char *Filename, 19867d9aa44SJung-uk Kim char *Message, 19967d9aa44SJung-uk Kim char *SourceLine, 20067d9aa44SJung-uk Kim ASL_ERROR_MSG *SubError); 20167d9aa44SJung-uk Kim 20267d9aa44SJung-uk Kim static void 20367d9aa44SJung-uk Kim AePrintSubError ( 20467d9aa44SJung-uk Kim FILE *OutputFile, 20567d9aa44SJung-uk Kim ASL_ERROR_MSG *Enode); 20667d9aa44SJung-uk Kim 20790b566fdSJung-uk Kim static UINT8 20890b566fdSJung-uk Kim GetModifiedLevel ( 20990b566fdSJung-uk Kim UINT8 Level, 21090b566fdSJung-uk Kim UINT16 MessageId); 21190b566fdSJung-uk Kim 21253289f6aSNate Lawson 2134c52cad2SJung-uk Kim /******************************************************************************* 2144c52cad2SJung-uk Kim * 215313a0c13SJung-uk Kim * FUNCTION: AslAbort 216313a0c13SJung-uk Kim * 217313a0c13SJung-uk Kim * PARAMETERS: None 218313a0c13SJung-uk Kim * 219313a0c13SJung-uk Kim * RETURN: None 220313a0c13SJung-uk Kim * 221313a0c13SJung-uk Kim * DESCRIPTION: Dump the error log and abort the compiler. Used for serious 222313a0c13SJung-uk Kim * I/O errors. 223313a0c13SJung-uk Kim * 224313a0c13SJung-uk Kim ******************************************************************************/ 225313a0c13SJung-uk Kim 226313a0c13SJung-uk Kim void 227313a0c13SJung-uk Kim AslAbort ( 228313a0c13SJung-uk Kim void) 229313a0c13SJung-uk Kim { 230313a0c13SJung-uk Kim 231313a0c13SJung-uk Kim AePrintErrorLog (ASL_FILE_STDERR); 2326f1f1a63SJung-uk Kim if (AslGbl_DebugFlag) 233313a0c13SJung-uk Kim { 234313a0c13SJung-uk Kim /* Print error summary to stdout also */ 235313a0c13SJung-uk Kim 236313a0c13SJung-uk Kim AePrintErrorLog (ASL_FILE_STDOUT); 237313a0c13SJung-uk Kim } 238313a0c13SJung-uk Kim 239313a0c13SJung-uk Kim exit (1); 240313a0c13SJung-uk Kim } 241313a0c13SJung-uk Kim 242313a0c13SJung-uk Kim 243313a0c13SJung-uk Kim /******************************************************************************* 244313a0c13SJung-uk Kim * 2454c52cad2SJung-uk Kim * FUNCTION: AeClearErrorLog 2464c52cad2SJung-uk Kim * 2474c52cad2SJung-uk Kim * PARAMETERS: None 2484c52cad2SJung-uk Kim * 2494c52cad2SJung-uk Kim * RETURN: None 2504c52cad2SJung-uk Kim * 2514c52cad2SJung-uk Kim * DESCRIPTION: Empty the error list 2524c52cad2SJung-uk Kim * 2534c52cad2SJung-uk Kim ******************************************************************************/ 2544c52cad2SJung-uk Kim 255a9f12690SJung-uk Kim void 256a9f12690SJung-uk Kim AeClearErrorLog ( 257a9f12690SJung-uk Kim void) 258a9f12690SJung-uk Kim { 2596f1f1a63SJung-uk Kim ASL_ERROR_MSG *Enode = AslGbl_ErrorLog; 260a9f12690SJung-uk Kim ASL_ERROR_MSG *Next; 261a9f12690SJung-uk Kim 26267d9aa44SJung-uk Kim 263a9f12690SJung-uk Kim /* Walk the error node list */ 264a9f12690SJung-uk Kim 265a9f12690SJung-uk Kim while (Enode) 266a9f12690SJung-uk Kim { 267a9f12690SJung-uk Kim Next = Enode->Next; 268a9f12690SJung-uk Kim ACPI_FREE (Enode); 269a9f12690SJung-uk Kim Enode = Next; 270a9f12690SJung-uk Kim } 271a9f12690SJung-uk Kim 2726f1f1a63SJung-uk Kim AslGbl_ErrorLog = NULL; 273a9f12690SJung-uk Kim } 274a9f12690SJung-uk Kim 275a9f12690SJung-uk Kim 27653289f6aSNate Lawson /******************************************************************************* 27753289f6aSNate Lawson * 27853289f6aSNate Lawson * FUNCTION: AeAddToErrorLog 27953289f6aSNate Lawson * 28053289f6aSNate Lawson * PARAMETERS: Enode - An error node to add to the log 28153289f6aSNate Lawson * 28253289f6aSNate Lawson * RETURN: None 28353289f6aSNate Lawson * 28453289f6aSNate Lawson * DESCRIPTION: Add a new error node to the error log. The error log is 28553289f6aSNate Lawson * ordered by the "logical" line number (cumulative line number 28653289f6aSNate Lawson * including all include files.) 28753289f6aSNate Lawson * 28853289f6aSNate Lawson ******************************************************************************/ 28953289f6aSNate Lawson 290fba7fc7eSJung-uk Kim static void 29153289f6aSNate Lawson AeAddToErrorLog ( 29253289f6aSNate Lawson ASL_ERROR_MSG *Enode) 29353289f6aSNate Lawson { 29453289f6aSNate Lawson ASL_ERROR_MSG *Next; 29553289f6aSNate Lawson ASL_ERROR_MSG *Prev; 29653289f6aSNate Lawson 29753289f6aSNate Lawson 2989a179dd8SJung-uk Kim /* If Gbl_ErrorLog is null, this is the first error node */ 29953289f6aSNate Lawson 3006f1f1a63SJung-uk Kim if (!AslGbl_ErrorLog) 30153289f6aSNate Lawson { 3026f1f1a63SJung-uk Kim AslGbl_ErrorLog = Enode; 30353289f6aSNate Lawson return; 30453289f6aSNate Lawson } 30553289f6aSNate Lawson 3069a179dd8SJung-uk Kim /* 3079a179dd8SJung-uk Kim * Walk error list until we find a line number greater than ours. 3089a179dd8SJung-uk Kim * List is sorted according to line number. 3099a179dd8SJung-uk Kim */ 31053289f6aSNate Lawson Prev = NULL; 3116f1f1a63SJung-uk Kim Next = AslGbl_ErrorLog; 31253289f6aSNate Lawson 31367d9aa44SJung-uk Kim while ((Next) && (Next->LogicalLineNumber <= Enode->LogicalLineNumber)) 31453289f6aSNate Lawson { 31553289f6aSNate Lawson Prev = Next; 31653289f6aSNate Lawson Next = Next->Next; 31753289f6aSNate Lawson } 31853289f6aSNate Lawson 31953289f6aSNate Lawson /* Found our place in the list */ 32053289f6aSNate Lawson 32153289f6aSNate Lawson Enode->Next = Next; 32253289f6aSNate Lawson 32353289f6aSNate Lawson if (Prev) 32453289f6aSNate Lawson { 32553289f6aSNate Lawson Prev->Next = Enode; 32653289f6aSNate Lawson } 32753289f6aSNate Lawson else 32853289f6aSNate Lawson { 3296f1f1a63SJung-uk Kim AslGbl_ErrorLog = Enode; 33053289f6aSNate Lawson } 33153289f6aSNate Lawson } 33253289f6aSNate Lawson 33353289f6aSNate Lawson 33453289f6aSNate Lawson /******************************************************************************* 33553289f6aSNate Lawson * 33667d9aa44SJung-uk Kim * FUNCTION: AeDecodeErrorMessageId 33753289f6aSNate Lawson * 33867d9aa44SJung-uk Kim * PARAMETERS: OutputFile - Output file 33953289f6aSNate Lawson * Enode - Error node to print 34067d9aa44SJung-uk Kim * PrematureEOF - True = PrematureEOF has been reached 341f9a6772eSJung-uk Kim * Total - Total length of line 34253289f6aSNate Lawson * 34353289f6aSNate Lawson * RETURN: None 34453289f6aSNate Lawson * 34567d9aa44SJung-uk Kim * DESCRIPTION: Print the source line of an error. 34653289f6aSNate Lawson * 34753289f6aSNate Lawson ******************************************************************************/ 34853289f6aSNate Lawson 34967d9aa44SJung-uk Kim static void 35067d9aa44SJung-uk Kim AeDecodeErrorMessageId ( 35167d9aa44SJung-uk Kim FILE *OutputFile, 35253289f6aSNate Lawson ASL_ERROR_MSG *Enode, 35367d9aa44SJung-uk Kim BOOLEAN PrematureEOF, 35467d9aa44SJung-uk Kim UINT32 Total) 35553289f6aSNate Lawson { 35653289f6aSNate Lawson UINT32 MsgLength; 357313a0c13SJung-uk Kim const char *MainMessage; 35853289f6aSNate Lawson char *ExtraMessage; 35953289f6aSNate Lawson UINT32 SourceColumn; 36053289f6aSNate Lawson UINT32 ErrorColumn; 36153289f6aSNate Lawson 36253289f6aSNate Lawson 36353289f6aSNate Lawson fprintf (OutputFile, "%s %4.4d -", 364313a0c13SJung-uk Kim AeDecodeExceptionLevel (Enode->Level), 365313a0c13SJung-uk Kim AeBuildFullExceptionCode (Enode->Level, Enode->MessageId)); 36653289f6aSNate Lawson 367313a0c13SJung-uk Kim MainMessage = AeDecodeMessageId (Enode->MessageId); 36853289f6aSNate Lawson ExtraMessage = Enode->Message; 36953289f6aSNate Lawson 370313a0c13SJung-uk Kim /* If a NULL line number, just print the decoded message */ 3713f0275a0SJung-uk Kim 372313a0c13SJung-uk Kim if (!Enode->LineNumber) 3733f0275a0SJung-uk Kim { 374313a0c13SJung-uk Kim fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage); 375313a0c13SJung-uk Kim return; 3763f0275a0SJung-uk Kim } 3773f0275a0SJung-uk Kim 37853289f6aSNate Lawson MsgLength = strlen (MainMessage); 37953289f6aSNate Lawson if (MsgLength == 0) 38053289f6aSNate Lawson { 3813f0275a0SJung-uk Kim /* Use the secondary/extra message as main message */ 3823f0275a0SJung-uk Kim 38353289f6aSNate Lawson MainMessage = Enode->Message; 3843f0275a0SJung-uk Kim if (!MainMessage) 3853f0275a0SJung-uk Kim { 3863f0275a0SJung-uk Kim MainMessage = ""; 3873f0275a0SJung-uk Kim } 38853289f6aSNate Lawson 38953289f6aSNate Lawson MsgLength = strlen (MainMessage); 39053289f6aSNate Lawson ExtraMessage = NULL; 39153289f6aSNate Lawson } 39253289f6aSNate Lawson 3936f1f1a63SJung-uk Kim if (AslGbl_VerboseErrors && !PrematureEOF) 39453289f6aSNate Lawson { 395042ff955SJung-uk Kim if (Total >= 256) 396042ff955SJung-uk Kim { 397042ff955SJung-uk Kim fprintf (OutputFile, " %s", 398042ff955SJung-uk Kim MainMessage); 399042ff955SJung-uk Kim } 400042ff955SJung-uk Kim else 401042ff955SJung-uk Kim { 40253289f6aSNate Lawson SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2; 40353289f6aSNate Lawson ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1; 40453289f6aSNate Lawson 40553289f6aSNate Lawson if ((MsgLength + ErrorColumn) < (SourceColumn - 1)) 40653289f6aSNate Lawson { 40753289f6aSNate Lawson fprintf (OutputFile, "%*s%s", 40853289f6aSNate Lawson (int) ((SourceColumn - 1) - ErrorColumn), 40953289f6aSNate Lawson MainMessage, " ^ "); 41053289f6aSNate Lawson } 41153289f6aSNate Lawson else 41253289f6aSNate Lawson { 41353289f6aSNate Lawson fprintf (OutputFile, "%*s %s", 41453289f6aSNate Lawson (int) ((SourceColumn - ErrorColumn) + 1), "^", 41553289f6aSNate Lawson MainMessage); 41653289f6aSNate Lawson } 41753289f6aSNate Lawson } 418042ff955SJung-uk Kim } 41953289f6aSNate Lawson else 42053289f6aSNate Lawson { 42153289f6aSNate Lawson fprintf (OutputFile, " %s", MainMessage); 42253289f6aSNate Lawson } 42353289f6aSNate Lawson 42453289f6aSNate Lawson /* Print the extra info message if present */ 42553289f6aSNate Lawson 42653289f6aSNate Lawson if (ExtraMessage) 42753289f6aSNate Lawson { 42853289f6aSNate Lawson fprintf (OutputFile, " (%s)", ExtraMessage); 42953289f6aSNate Lawson } 43053289f6aSNate Lawson 4315a77b11bSJung-uk Kim if (PrematureEOF) 4325a77b11bSJung-uk Kim { 4335a77b11bSJung-uk Kim fprintf (OutputFile, " and premature End-Of-File"); 4345a77b11bSJung-uk Kim } 4355a77b11bSJung-uk Kim 43653289f6aSNate Lawson fprintf (OutputFile, "\n"); 4376f1f1a63SJung-uk Kim if (AslGbl_VerboseErrors && !Enode->SubError) 438c39c15e2SJung-uk Kim { 439c39c15e2SJung-uk Kim fprintf (OutputFile, "\n"); 440c39c15e2SJung-uk Kim } 441c39c15e2SJung-uk Kim } 442c39c15e2SJung-uk Kim 443c39c15e2SJung-uk Kim 444c39c15e2SJung-uk Kim /******************************************************************************* 445c39c15e2SJung-uk Kim * 44667d9aa44SJung-uk Kim * FUNCTION: AePrintErrorSourceLine 44767d9aa44SJung-uk Kim * 44867d9aa44SJung-uk Kim * PARAMETERS: OutputFile - Output file 44967d9aa44SJung-uk Kim * Enode - Error node to print 45067d9aa44SJung-uk Kim * PrematureEOF - True = PrematureEOF has been reached 451f9a6772eSJung-uk Kim * Total - Number of characters printed so far 45267d9aa44SJung-uk Kim * 45367d9aa44SJung-uk Kim * 45467d9aa44SJung-uk Kim * RETURN: Status 45567d9aa44SJung-uk Kim * 45667d9aa44SJung-uk Kim * DESCRIPTION: Print the source line of an error. 45767d9aa44SJung-uk Kim * 45867d9aa44SJung-uk Kim ******************************************************************************/ 45967d9aa44SJung-uk Kim 46067d9aa44SJung-uk Kim static ACPI_STATUS 46167d9aa44SJung-uk Kim AePrintErrorSourceLine ( 46267d9aa44SJung-uk Kim FILE *OutputFile, 46367d9aa44SJung-uk Kim ASL_ERROR_MSG *Enode, 46467d9aa44SJung-uk Kim BOOLEAN *PrematureEOF, 46567d9aa44SJung-uk Kim UINT32 *Total) 46667d9aa44SJung-uk Kim { 46767d9aa44SJung-uk Kim UINT8 SourceByte; 46867d9aa44SJung-uk Kim int Actual; 46967d9aa44SJung-uk Kim size_t RActual; 47067d9aa44SJung-uk Kim FILE *SourceFile = NULL; 47167d9aa44SJung-uk Kim long FileSize; 47267d9aa44SJung-uk Kim 47367d9aa44SJung-uk Kim 47467d9aa44SJung-uk Kim if (!Enode->SourceLine) 47567d9aa44SJung-uk Kim { 47667d9aa44SJung-uk Kim /* 47767d9aa44SJung-uk Kim * Use the merged header/source file if present, otherwise 47867d9aa44SJung-uk Kim * use input file 47967d9aa44SJung-uk Kim */ 48044b0f624SJung-uk Kim SourceFile = FlGetFileHandle (ASL_FILE_SOURCE_OUTPUT, 48144b0f624SJung-uk Kim ASL_FILE_SOURCE_OUTPUT, Enode->SourceFilename); 48267d9aa44SJung-uk Kim if (!SourceFile) 48367d9aa44SJung-uk Kim { 48444b0f624SJung-uk Kim SourceFile = FlGetFileHandle (ASL_FILE_INPUT, 48544b0f624SJung-uk Kim ASL_FILE_INPUT, Enode->Filename); 48667d9aa44SJung-uk Kim } 48767d9aa44SJung-uk Kim 48867d9aa44SJung-uk Kim if (SourceFile) 48967d9aa44SJung-uk Kim { 49067d9aa44SJung-uk Kim /* Determine if the error occurred at source file EOF */ 49167d9aa44SJung-uk Kim 49267d9aa44SJung-uk Kim fseek (SourceFile, 0, SEEK_END); 49367d9aa44SJung-uk Kim FileSize = ftell (SourceFile); 49467d9aa44SJung-uk Kim 49567d9aa44SJung-uk Kim if ((long) Enode->LogicalByteOffset >= FileSize) 49667d9aa44SJung-uk Kim { 49767d9aa44SJung-uk Kim *PrematureEOF = TRUE; 49867d9aa44SJung-uk Kim } 49967d9aa44SJung-uk Kim } 50067d9aa44SJung-uk Kim else 50167d9aa44SJung-uk Kim { 50267d9aa44SJung-uk Kim fprintf (OutputFile, 50367d9aa44SJung-uk Kim "[*** iASL: Source File Does not exist ***]\n"); 50467d9aa44SJung-uk Kim return AE_IO_ERROR; 50567d9aa44SJung-uk Kim } 50667d9aa44SJung-uk Kim } 50767d9aa44SJung-uk Kim 50867d9aa44SJung-uk Kim /* Print filename and line number if present and valid */ 50967d9aa44SJung-uk Kim 5106f1f1a63SJung-uk Kim if (AslGbl_VerboseErrors) 51167d9aa44SJung-uk Kim { 51267d9aa44SJung-uk Kim fprintf (OutputFile, "%-8s", Enode->Filename); 51367d9aa44SJung-uk Kim 51467d9aa44SJung-uk Kim if (Enode->SourceLine && Enode->LineNumber) 51567d9aa44SJung-uk Kim { 51667d9aa44SJung-uk Kim fprintf (OutputFile, " %6u: %s", 51767d9aa44SJung-uk Kim Enode->LineNumber, Enode->SourceLine); 51867d9aa44SJung-uk Kim } 51967d9aa44SJung-uk Kim else if (Enode->LineNumber) 52067d9aa44SJung-uk Kim { 52167d9aa44SJung-uk Kim fprintf (OutputFile, " %6u: ", Enode->LineNumber); 52267d9aa44SJung-uk Kim 52367d9aa44SJung-uk Kim /* 52467d9aa44SJung-uk Kim * If not at EOF, get the corresponding source code line 52567d9aa44SJung-uk Kim * and display it. Don't attempt this if we have a 52667d9aa44SJung-uk Kim * premature EOF condition. 52767d9aa44SJung-uk Kim */ 52867d9aa44SJung-uk Kim if (*PrematureEOF) 52967d9aa44SJung-uk Kim { 53067d9aa44SJung-uk Kim fprintf (OutputFile, "\n"); 53167d9aa44SJung-uk Kim return AE_OK; 53267d9aa44SJung-uk Kim } 533f9a6772eSJung-uk Kim 53467d9aa44SJung-uk Kim /* 53567d9aa44SJung-uk Kim * Seek to the offset in the combined source file, 53667d9aa44SJung-uk Kim * read the source line, and write it to the output. 53767d9aa44SJung-uk Kim */ 53867d9aa44SJung-uk Kim Actual = fseek (SourceFile, 53967d9aa44SJung-uk Kim (long) Enode->LogicalByteOffset, (int) SEEK_SET); 54067d9aa44SJung-uk Kim if (Actual) 54167d9aa44SJung-uk Kim { 54267d9aa44SJung-uk Kim fprintf (OutputFile, 54367d9aa44SJung-uk Kim "[*** iASL: Seek error on source code temp file %s ***]", 5446f1f1a63SJung-uk Kim AslGbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); 54567d9aa44SJung-uk Kim 54667d9aa44SJung-uk Kim fprintf (OutputFile, "\n"); 54767d9aa44SJung-uk Kim return AE_OK; 54867d9aa44SJung-uk Kim } 54967d9aa44SJung-uk Kim RActual = fread (&SourceByte, 1, 1, SourceFile); 55067d9aa44SJung-uk Kim if (RActual != 1) 55167d9aa44SJung-uk Kim { 55267d9aa44SJung-uk Kim fprintf (OutputFile, 55367d9aa44SJung-uk Kim "[*** iASL: Read error on source code temp file %s ***]", 5546f1f1a63SJung-uk Kim AslGbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); 55567d9aa44SJung-uk Kim return AE_IO_ERROR; 55667d9aa44SJung-uk Kim } 557f9a6772eSJung-uk Kim 55867d9aa44SJung-uk Kim /* Read/write the source line, up to the maximum line length */ 55967d9aa44SJung-uk Kim 56067d9aa44SJung-uk Kim while (RActual && SourceByte && (SourceByte != '\n')) 56167d9aa44SJung-uk Kim { 56267d9aa44SJung-uk Kim if (*Total < 256) 56367d9aa44SJung-uk Kim { 56467d9aa44SJung-uk Kim /* After the max line length, we will just read the line, no write */ 56567d9aa44SJung-uk Kim 56667d9aa44SJung-uk Kim if (fwrite (&SourceByte, 1, 1, OutputFile) != 1) 56767d9aa44SJung-uk Kim { 56867d9aa44SJung-uk Kim printf ("[*** iASL: Write error on output file ***]\n"); 56967d9aa44SJung-uk Kim return AE_IO_ERROR; 57067d9aa44SJung-uk Kim } 57167d9aa44SJung-uk Kim } 57267d9aa44SJung-uk Kim else if (*Total == 256) 57367d9aa44SJung-uk Kim { 57467d9aa44SJung-uk Kim fprintf (OutputFile, 57567d9aa44SJung-uk Kim "\n[*** iASL: Very long input line, message below refers to column %u ***]", 57667d9aa44SJung-uk Kim Enode->Column); 57767d9aa44SJung-uk Kim } 57867d9aa44SJung-uk Kim 57967d9aa44SJung-uk Kim RActual = fread (&SourceByte, 1, 1, SourceFile); 58067d9aa44SJung-uk Kim if (RActual != 1) 58167d9aa44SJung-uk Kim { 58267d9aa44SJung-uk Kim fprintf (OutputFile, 58367d9aa44SJung-uk Kim "[*** iASL: Read error on source code temp file %s ***]", 5846f1f1a63SJung-uk Kim AslGbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); 58567d9aa44SJung-uk Kim 58667d9aa44SJung-uk Kim return AE_IO_ERROR; 58767d9aa44SJung-uk Kim } 58867d9aa44SJung-uk Kim *Total += 1; 58967d9aa44SJung-uk Kim } 59067d9aa44SJung-uk Kim 59167d9aa44SJung-uk Kim fprintf (OutputFile, "\n"); 59267d9aa44SJung-uk Kim } 59367d9aa44SJung-uk Kim } 59467d9aa44SJung-uk Kim else 59567d9aa44SJung-uk Kim { 59667d9aa44SJung-uk Kim /* 59767d9aa44SJung-uk Kim * Less verbose version of the error message, enabled via the 59867d9aa44SJung-uk Kim * -vi switch. The format is compatible with MS Visual Studio. 59967d9aa44SJung-uk Kim */ 60067d9aa44SJung-uk Kim fprintf (OutputFile, "%s", Enode->Filename); 60167d9aa44SJung-uk Kim 60267d9aa44SJung-uk Kim if (Enode->LineNumber) 60367d9aa44SJung-uk Kim { 60467d9aa44SJung-uk Kim fprintf (OutputFile, "(%u) : ", 60567d9aa44SJung-uk Kim Enode->LineNumber); 60667d9aa44SJung-uk Kim } 60767d9aa44SJung-uk Kim } 60867d9aa44SJung-uk Kim 60967d9aa44SJung-uk Kim return AE_OK; 61067d9aa44SJung-uk Kim } 61167d9aa44SJung-uk Kim 61267d9aa44SJung-uk Kim /******************************************************************************* 61367d9aa44SJung-uk Kim * 61467d9aa44SJung-uk Kim * FUNCTION: AePrintException 61567d9aa44SJung-uk Kim * 61667d9aa44SJung-uk Kim * PARAMETERS: FileId - ID of output file 61767d9aa44SJung-uk Kim * Enode - Error node to print 61867d9aa44SJung-uk Kim * Header - Additional text before each message 61967d9aa44SJung-uk Kim * 62067d9aa44SJung-uk Kim * RETURN: None 62167d9aa44SJung-uk Kim * 62267d9aa44SJung-uk Kim * DESCRIPTION: Print the contents of an error node. 62367d9aa44SJung-uk Kim * 62467d9aa44SJung-uk Kim * NOTE: We don't use the FlxxxFile I/O functions here because on error 62567d9aa44SJung-uk Kim * they abort the compiler and call this function! Since we 62667d9aa44SJung-uk Kim * are reporting errors here, we ignore most output errors and 62767d9aa44SJung-uk Kim * just try to get out as much as we can. 62867d9aa44SJung-uk Kim * 62967d9aa44SJung-uk Kim ******************************************************************************/ 63067d9aa44SJung-uk Kim 63167d9aa44SJung-uk Kim void 63267d9aa44SJung-uk Kim AePrintException ( 63367d9aa44SJung-uk Kim UINT32 FileId, 63467d9aa44SJung-uk Kim ASL_ERROR_MSG *Enode, 63567d9aa44SJung-uk Kim char *Header) 63667d9aa44SJung-uk Kim { 63767d9aa44SJung-uk Kim FILE *OutputFile; 63867d9aa44SJung-uk Kim BOOLEAN PrematureEOF = FALSE; 63967d9aa44SJung-uk Kim UINT32 Total = 0; 64067d9aa44SJung-uk Kim ACPI_STATUS Status; 64167d9aa44SJung-uk Kim ASL_ERROR_MSG *Child = Enode->SubError; 64267d9aa44SJung-uk Kim 64367d9aa44SJung-uk Kim 6446f1f1a63SJung-uk Kim if (AslGbl_NoErrors) 64567d9aa44SJung-uk Kim { 64667d9aa44SJung-uk Kim return; 64767d9aa44SJung-uk Kim } 64867d9aa44SJung-uk Kim 64967d9aa44SJung-uk Kim /* 65067d9aa44SJung-uk Kim * Only listing files have a header, and remarks/optimizations 65167d9aa44SJung-uk Kim * are always output 65267d9aa44SJung-uk Kim */ 65367d9aa44SJung-uk Kim if (!Header) 65467d9aa44SJung-uk Kim { 65567d9aa44SJung-uk Kim /* Ignore remarks if requested */ 65667d9aa44SJung-uk Kim 65767d9aa44SJung-uk Kim switch (Enode->Level) 65867d9aa44SJung-uk Kim { 65967d9aa44SJung-uk Kim case ASL_WARNING: 66067d9aa44SJung-uk Kim case ASL_WARNING2: 66167d9aa44SJung-uk Kim case ASL_WARNING3: 66267d9aa44SJung-uk Kim 6636f1f1a63SJung-uk Kim if (!AslGbl_DisplayWarnings) 66467d9aa44SJung-uk Kim { 66567d9aa44SJung-uk Kim return; 66667d9aa44SJung-uk Kim } 66767d9aa44SJung-uk Kim break; 66867d9aa44SJung-uk Kim 66967d9aa44SJung-uk Kim case ASL_REMARK: 67067d9aa44SJung-uk Kim 6716f1f1a63SJung-uk Kim if (!AslGbl_DisplayRemarks) 67267d9aa44SJung-uk Kim { 67367d9aa44SJung-uk Kim return; 67467d9aa44SJung-uk Kim } 67567d9aa44SJung-uk Kim break; 67667d9aa44SJung-uk Kim 67767d9aa44SJung-uk Kim case ASL_OPTIMIZATION: 67867d9aa44SJung-uk Kim 6796f1f1a63SJung-uk Kim if (!AslGbl_DisplayOptimizations) 68067d9aa44SJung-uk Kim { 68167d9aa44SJung-uk Kim return; 68267d9aa44SJung-uk Kim } 68367d9aa44SJung-uk Kim break; 68467d9aa44SJung-uk Kim 68567d9aa44SJung-uk Kim default: 68667d9aa44SJung-uk Kim 68767d9aa44SJung-uk Kim break; 68867d9aa44SJung-uk Kim } 68967d9aa44SJung-uk Kim } 69067d9aa44SJung-uk Kim 69167d9aa44SJung-uk Kim /* Get the various required file handles */ 69267d9aa44SJung-uk Kim 6936f1f1a63SJung-uk Kim OutputFile = AslGbl_Files[FileId].Handle; 69467d9aa44SJung-uk Kim 69567d9aa44SJung-uk Kim if (Header) 69667d9aa44SJung-uk Kim { 69767d9aa44SJung-uk Kim fprintf (OutputFile, "%s", Header); 69867d9aa44SJung-uk Kim } 69967d9aa44SJung-uk Kim 70067d9aa44SJung-uk Kim if (!Enode->Filename) 70167d9aa44SJung-uk Kim { 70267d9aa44SJung-uk Kim AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total); 70367d9aa44SJung-uk Kim return; 70467d9aa44SJung-uk Kim } 70567d9aa44SJung-uk Kim 70667d9aa44SJung-uk Kim Status = AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total); 70767d9aa44SJung-uk Kim if (ACPI_FAILURE (Status)) 70867d9aa44SJung-uk Kim { 70967d9aa44SJung-uk Kim return; 71067d9aa44SJung-uk Kim } 71167d9aa44SJung-uk Kim 71267d9aa44SJung-uk Kim /* If a NULL message ID, just print the raw message */ 71367d9aa44SJung-uk Kim 71467d9aa44SJung-uk Kim if (Enode->MessageId == 0) 71567d9aa44SJung-uk Kim { 71667d9aa44SJung-uk Kim fprintf (OutputFile, "%s\n", Enode->Message); 71767d9aa44SJung-uk Kim return; 71867d9aa44SJung-uk Kim } 71967d9aa44SJung-uk Kim 72067d9aa44SJung-uk Kim AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total); 72167d9aa44SJung-uk Kim 72267d9aa44SJung-uk Kim while (Child) 72367d9aa44SJung-uk Kim { 72467d9aa44SJung-uk Kim fprintf (OutputFile, "\n"); 72567d9aa44SJung-uk Kim AePrintSubError (OutputFile, Child); 72667d9aa44SJung-uk Kim Child = Child->SubError; 72767d9aa44SJung-uk Kim } 72867d9aa44SJung-uk Kim } 72967d9aa44SJung-uk Kim 73067d9aa44SJung-uk Kim 73167d9aa44SJung-uk Kim /******************************************************************************* 73267d9aa44SJung-uk Kim * 73367d9aa44SJung-uk Kim * FUNCTION: AePrintSubError 73467d9aa44SJung-uk Kim * 73567d9aa44SJung-uk Kim * PARAMETERS: OutputFile - Output file 73667d9aa44SJung-uk Kim * Enode - Error node to print 73767d9aa44SJung-uk Kim * 73867d9aa44SJung-uk Kim * RETURN: None 73967d9aa44SJung-uk Kim * 740f9a6772eSJung-uk Kim * DESCRIPTION: Print the contents of an error node. This function is tailored 74167d9aa44SJung-uk Kim * to print error nodes that are SubErrors within ASL_ERROR_MSG 74267d9aa44SJung-uk Kim * 74367d9aa44SJung-uk Kim ******************************************************************************/ 74467d9aa44SJung-uk Kim 74567d9aa44SJung-uk Kim static void 74667d9aa44SJung-uk Kim AePrintSubError ( 74767d9aa44SJung-uk Kim FILE *OutputFile, 74867d9aa44SJung-uk Kim ASL_ERROR_MSG *Enode) 74967d9aa44SJung-uk Kim { 75067d9aa44SJung-uk Kim UINT32 Total = 0; 75167d9aa44SJung-uk Kim BOOLEAN PrematureEOF = FALSE; 75267d9aa44SJung-uk Kim const char *MainMessage; 75367d9aa44SJung-uk Kim 75467d9aa44SJung-uk Kim 75567d9aa44SJung-uk Kim MainMessage = AeDecodeMessageId (Enode->MessageId); 75667d9aa44SJung-uk Kim 757f425b8beSJung-uk Kim fprintf (OutputFile, " %s", MainMessage); 758f425b8beSJung-uk Kim 759f425b8beSJung-uk Kim if (Enode->Message) 760f425b8beSJung-uk Kim { 761f425b8beSJung-uk Kim fprintf (OutputFile, "(%s)", Enode->Message); 762f425b8beSJung-uk Kim } 763f425b8beSJung-uk Kim 764f425b8beSJung-uk Kim fprintf (OutputFile, "\n "); 76567d9aa44SJung-uk Kim (void) AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total); 76667d9aa44SJung-uk Kim fprintf (OutputFile, "\n"); 76767d9aa44SJung-uk Kim } 76867d9aa44SJung-uk Kim 76967d9aa44SJung-uk Kim 77067d9aa44SJung-uk Kim /******************************************************************************* 77167d9aa44SJung-uk Kim * 77253289f6aSNate Lawson * FUNCTION: AePrintErrorLog 77353289f6aSNate Lawson * 77453289f6aSNate Lawson * PARAMETERS: FileId - Where to output the error log 77553289f6aSNate Lawson * 77653289f6aSNate Lawson * RETURN: None 77753289f6aSNate Lawson * 77853289f6aSNate Lawson * DESCRIPTION: Print the entire contents of the error log 77953289f6aSNate Lawson * 78053289f6aSNate Lawson ******************************************************************************/ 78153289f6aSNate Lawson 78253289f6aSNate Lawson void 78353289f6aSNate Lawson AePrintErrorLog ( 78453289f6aSNate Lawson UINT32 FileId) 78553289f6aSNate Lawson { 7866f1f1a63SJung-uk Kim ASL_ERROR_MSG *Enode = AslGbl_ErrorLog; 78753289f6aSNate Lawson 78853289f6aSNate Lawson 78953289f6aSNate Lawson /* Walk the error node list */ 79053289f6aSNate Lawson 79153289f6aSNate Lawson while (Enode) 79253289f6aSNate Lawson { 79353289f6aSNate Lawson AePrintException (FileId, Enode, NULL); 79453289f6aSNate Lawson Enode = Enode->Next; 79553289f6aSNate Lawson } 79653289f6aSNate Lawson } 79753289f6aSNate Lawson 79853289f6aSNate Lawson 79953289f6aSNate Lawson /******************************************************************************* 80053289f6aSNate Lawson * 80167d9aa44SJung-uk Kim * FUNCTION: AslInitEnode 80267d9aa44SJung-uk Kim * 80367d9aa44SJung-uk Kim * PARAMETERS: InputEnode - Input Error node to initialize 80467d9aa44SJung-uk Kim * Level - Seriousness (Warning/error, etc.) 80567d9aa44SJung-uk Kim * MessageId - Index into global message buffer 80667d9aa44SJung-uk Kim * CurrentLineNumber - Actual file line number 80767d9aa44SJung-uk Kim * LogicalLineNumber - Cumulative line number 80867d9aa44SJung-uk Kim * LogicalByteOffset - Byte offset in source file 80967d9aa44SJung-uk Kim * Column - Column in current line 810f9a6772eSJung-uk Kim * Filename - Source filename 811f9a6772eSJung-uk Kim * ExtraMessage - Additional error message 81267d9aa44SJung-uk Kim * SourceLine - Line of error source code 81367d9aa44SJung-uk Kim * SubError - SubError of this InputEnode 81467d9aa44SJung-uk Kim * 81567d9aa44SJung-uk Kim * RETURN: None 81667d9aa44SJung-uk Kim * 81767d9aa44SJung-uk Kim * DESCRIPTION: Initialize an Error node 81867d9aa44SJung-uk Kim * 81967d9aa44SJung-uk Kim ******************************************************************************/ 82067d9aa44SJung-uk Kim 82167d9aa44SJung-uk Kim static void AslInitEnode ( 82267d9aa44SJung-uk Kim ASL_ERROR_MSG **InputEnode, 82367d9aa44SJung-uk Kim UINT8 Level, 82467d9aa44SJung-uk Kim UINT16 MessageId, 82567d9aa44SJung-uk Kim UINT32 LineNumber, 82667d9aa44SJung-uk Kim UINT32 LogicalLineNumber, 82767d9aa44SJung-uk Kim UINT32 LogicalByteOffset, 82867d9aa44SJung-uk Kim UINT32 Column, 82967d9aa44SJung-uk Kim char *Filename, 83067d9aa44SJung-uk Kim char *ExtraMessage, 83167d9aa44SJung-uk Kim char *SourceLine, 83267d9aa44SJung-uk Kim ASL_ERROR_MSG *SubError) 83367d9aa44SJung-uk Kim { 83467d9aa44SJung-uk Kim ASL_ERROR_MSG *Enode; 83544b0f624SJung-uk Kim ASL_GLOBAL_FILE_NODE *FileNode; 83667d9aa44SJung-uk Kim 83767d9aa44SJung-uk Kim 83867d9aa44SJung-uk Kim *InputEnode = UtLocalCalloc (sizeof (ASL_ERROR_MSG)); 83967d9aa44SJung-uk Kim Enode = *InputEnode; 84067d9aa44SJung-uk Kim Enode->Level = Level; 84167d9aa44SJung-uk Kim Enode->MessageId = MessageId; 84267d9aa44SJung-uk Kim Enode->LineNumber = LineNumber; 84367d9aa44SJung-uk Kim Enode->LogicalLineNumber = LogicalLineNumber; 84467d9aa44SJung-uk Kim Enode->LogicalByteOffset = LogicalByteOffset; 84567d9aa44SJung-uk Kim Enode->Column = Column; 84667d9aa44SJung-uk Kim Enode->SubError = SubError; 84767d9aa44SJung-uk Kim Enode->Message = NULL; 84867d9aa44SJung-uk Kim Enode->SourceLine = NULL; 84967d9aa44SJung-uk Kim Enode->Filename = NULL; 85067d9aa44SJung-uk Kim 85167d9aa44SJung-uk Kim if (ExtraMessage) 85267d9aa44SJung-uk Kim { 85367d9aa44SJung-uk Kim /* Allocate a buffer for the message and a new error node */ 85467d9aa44SJung-uk Kim 85567d9aa44SJung-uk Kim Enode->Message = UtLocalCacheCalloc (strlen (ExtraMessage) + 1); 85667d9aa44SJung-uk Kim 85767d9aa44SJung-uk Kim /* Keep a copy of the extra message */ 85867d9aa44SJung-uk Kim 85967d9aa44SJung-uk Kim strcpy (Enode->Message, ExtraMessage); 86067d9aa44SJung-uk Kim } 86167d9aa44SJung-uk Kim 86267d9aa44SJung-uk Kim if (SourceLine) 86367d9aa44SJung-uk Kim { 86467d9aa44SJung-uk Kim Enode->SourceLine = UtLocalCalloc (strlen (SourceLine) + 1); 86567d9aa44SJung-uk Kim strcpy (Enode->SourceLine, SourceLine); 86667d9aa44SJung-uk Kim } 86767d9aa44SJung-uk Kim 86867d9aa44SJung-uk Kim 86967d9aa44SJung-uk Kim if (Filename) 87067d9aa44SJung-uk Kim { 87167d9aa44SJung-uk Kim Enode->Filename = Filename; 87267d9aa44SJung-uk Kim Enode->FilenameLength = strlen (Filename); 87367d9aa44SJung-uk Kim if (Enode->FilenameLength < 6) 87467d9aa44SJung-uk Kim { 87567d9aa44SJung-uk Kim Enode->FilenameLength = 6; 87667d9aa44SJung-uk Kim } 87744b0f624SJung-uk Kim 878f9a6772eSJung-uk Kim /* 879f9a6772eSJung-uk Kim * Attempt to get the file node of the filename listed in the parse 880f9a6772eSJung-uk Kim * node. If the name doesn't exist in the global file node, it is 881f9a6772eSJung-uk Kim * because the file is included by #include or ASL include. In this 882f9a6772eSJung-uk Kim * case, get the current file node. The source output of the current 883f9a6772eSJung-uk Kim * file will contain the contents of the file listed in the parse node. 884f9a6772eSJung-uk Kim */ 885f9a6772eSJung-uk Kim FileNode = FlGetFileNode (ASL_FILE_INPUT, Filename); 88644b0f624SJung-uk Kim if (!FileNode) 88744b0f624SJung-uk Kim { 888f9a6772eSJung-uk Kim FileNode = FlGetCurrentFileNode (); 88944b0f624SJung-uk Kim } 89044b0f624SJung-uk Kim 89144b0f624SJung-uk Kim Enode->SourceFilename = 89244b0f624SJung-uk Kim FileNode->Files[ASL_FILE_SOURCE_OUTPUT].Filename; 89344b0f624SJung-uk Kim } 89467d9aa44SJung-uk Kim } 89567d9aa44SJung-uk Kim 89667d9aa44SJung-uk Kim 89767d9aa44SJung-uk Kim /******************************************************************************* 89867d9aa44SJung-uk Kim * 8994c52cad2SJung-uk Kim * FUNCTION: AslCommonError2 9004c52cad2SJung-uk Kim * 9014c52cad2SJung-uk Kim * PARAMETERS: Level - Seriousness (Warning/error, etc.) 9024c52cad2SJung-uk Kim * MessageId - Index into global message buffer 9034c52cad2SJung-uk Kim * LineNumber - Actual file line number 9044c52cad2SJung-uk Kim * Column - Column in current line 9054c52cad2SJung-uk Kim * SourceLine - Actual source code line 906f9a6772eSJung-uk Kim * Filename - Source filename 907f9a6772eSJung-uk Kim * ExtraMessage - Additional error message 9084c52cad2SJung-uk Kim * 9094c52cad2SJung-uk Kim * RETURN: None 9104c52cad2SJung-uk Kim * 9114c52cad2SJung-uk Kim * DESCRIPTION: Create a new error node and add it to the error log 9124c52cad2SJung-uk Kim * 9134c52cad2SJung-uk Kim ******************************************************************************/ 9144c52cad2SJung-uk Kim 9154c52cad2SJung-uk Kim void 9164c52cad2SJung-uk Kim AslCommonError2 ( 9174c52cad2SJung-uk Kim UINT8 Level, 918313a0c13SJung-uk Kim UINT16 MessageId, 9194c52cad2SJung-uk Kim UINT32 LineNumber, 9204c52cad2SJung-uk Kim UINT32 Column, 9214c52cad2SJung-uk Kim char *SourceLine, 9224c52cad2SJung-uk Kim char *Filename, 9234c52cad2SJung-uk Kim char *ExtraMessage) 9244c52cad2SJung-uk Kim { 92567d9aa44SJung-uk Kim AslLogNewError (Level, MessageId, LineNumber, LineNumber, 0, Column, 92667d9aa44SJung-uk Kim Filename, ExtraMessage, SourceLine, NULL); 9274c52cad2SJung-uk Kim } 9284c52cad2SJung-uk Kim 9294c52cad2SJung-uk Kim 9304c52cad2SJung-uk Kim /******************************************************************************* 9314c52cad2SJung-uk Kim * 93253289f6aSNate Lawson * FUNCTION: AslCommonError 93353289f6aSNate Lawson * 93453289f6aSNate Lawson * PARAMETERS: Level - Seriousness (Warning/error, etc.) 93553289f6aSNate Lawson * MessageId - Index into global message buffer 93653289f6aSNate Lawson * CurrentLineNumber - Actual file line number 93753289f6aSNate Lawson * LogicalLineNumber - Cumulative line number 93853289f6aSNate Lawson * LogicalByteOffset - Byte offset in source file 93953289f6aSNate Lawson * Column - Column in current line 940f9a6772eSJung-uk Kim * Filename - Source filename 941f9a6772eSJung-uk Kim * ExtraMessage - Additional error message 94253289f6aSNate Lawson * 943fba7fc7eSJung-uk Kim * RETURN: None 94453289f6aSNate Lawson * 94553289f6aSNate Lawson * DESCRIPTION: Create a new error node and add it to the error log 94653289f6aSNate Lawson * 94753289f6aSNate Lawson ******************************************************************************/ 94853289f6aSNate Lawson 94953289f6aSNate Lawson void 95053289f6aSNate Lawson AslCommonError ( 95153289f6aSNate Lawson UINT8 Level, 952313a0c13SJung-uk Kim UINT16 MessageId, 95353289f6aSNate Lawson UINT32 CurrentLineNumber, 95453289f6aSNate Lawson UINT32 LogicalLineNumber, 95553289f6aSNate Lawson UINT32 LogicalByteOffset, 95653289f6aSNate Lawson UINT32 Column, 95753289f6aSNate Lawson char *Filename, 95853289f6aSNate Lawson char *ExtraMessage) 95953289f6aSNate Lawson { 960ff879b07SJung-uk Kim /* Check if user wants to ignore this exception */ 961ff879b07SJung-uk Kim 9623ee58df5SJung-uk Kim if (AslIsExceptionIgnored (Filename, LogicalLineNumber, Level, MessageId)) 963ff879b07SJung-uk Kim { 964ff879b07SJung-uk Kim return; 965ff879b07SJung-uk Kim } 966ff879b07SJung-uk Kim 96767d9aa44SJung-uk Kim AslLogNewError (Level, MessageId, CurrentLineNumber, LogicalLineNumber, 96867d9aa44SJung-uk Kim LogicalByteOffset, Column, Filename, ExtraMessage, 96967d9aa44SJung-uk Kim NULL, NULL); 9702f6a1a81SJung-uk Kim } 9712f6a1a81SJung-uk Kim 97253289f6aSNate Lawson 97367d9aa44SJung-uk Kim /******************************************************************************* 97467d9aa44SJung-uk Kim * 97567d9aa44SJung-uk Kim * FUNCTION: AslLogNewError 97667d9aa44SJung-uk Kim * 97767d9aa44SJung-uk Kim * PARAMETERS: Level - Seriousness (Warning/error, etc.) 97867d9aa44SJung-uk Kim * MessageId - Index into global message buffer 97967d9aa44SJung-uk Kim * CurrentLineNumber - Actual file line number 98067d9aa44SJung-uk Kim * LogicalLineNumber - Cumulative line number 98167d9aa44SJung-uk Kim * LogicalByteOffset - Byte offset in source file 98267d9aa44SJung-uk Kim * Column - Column in current line 983f9a6772eSJung-uk Kim * Filename - Source filename 984f9a6772eSJung-uk Kim * Message - Additional error message 98567d9aa44SJung-uk Kim * SourceLine - Actual line of source code 98667d9aa44SJung-uk Kim * SubError - Sub-error associated with this error 98767d9aa44SJung-uk Kim * 98867d9aa44SJung-uk Kim * RETURN: None 98967d9aa44SJung-uk Kim * 99067d9aa44SJung-uk Kim * DESCRIPTION: Create a new error node and add it to the error log 99167d9aa44SJung-uk Kim * 99267d9aa44SJung-uk Kim ******************************************************************************/ 99367d9aa44SJung-uk Kim static void 99467d9aa44SJung-uk Kim AslLogNewError ( 99567d9aa44SJung-uk Kim UINT8 Level, 99667d9aa44SJung-uk Kim UINT16 MessageId, 99767d9aa44SJung-uk Kim UINT32 LineNumber, 99867d9aa44SJung-uk Kim UINT32 LogicalLineNumber, 99967d9aa44SJung-uk Kim UINT32 LogicalByteOffset, 100067d9aa44SJung-uk Kim UINT32 Column, 100167d9aa44SJung-uk Kim char *Filename, 100267d9aa44SJung-uk Kim char *Message, 100367d9aa44SJung-uk Kim char *SourceLine, 100467d9aa44SJung-uk Kim ASL_ERROR_MSG *SubError) 100553289f6aSNate Lawson { 100667d9aa44SJung-uk Kim ASL_ERROR_MSG *Enode = NULL; 100790b566fdSJung-uk Kim UINT8 ModifiedLevel = GetModifiedLevel (Level, MessageId); 100853289f6aSNate Lawson 100953289f6aSNate Lawson 101090b566fdSJung-uk Kim AslInitEnode (&Enode, ModifiedLevel, MessageId, LineNumber, 101190b566fdSJung-uk Kim LogicalLineNumber, LogicalByteOffset, Column, Filename, Message, 101290b566fdSJung-uk Kim SourceLine, SubError); 101353289f6aSNate Lawson 101453289f6aSNate Lawson /* Add the new node to the error node list */ 101553289f6aSNate Lawson 101653289f6aSNate Lawson AeAddToErrorLog (Enode); 101753289f6aSNate Lawson 10186f1f1a63SJung-uk Kim if (AslGbl_DebugFlag) 101953289f6aSNate Lawson { 102053289f6aSNate Lawson /* stderr is a file, send error to it immediately */ 102153289f6aSNate Lawson 102253289f6aSNate Lawson AePrintException (ASL_FILE_STDERR, Enode, NULL); 102353289f6aSNate Lawson } 102453289f6aSNate Lawson 102590b566fdSJung-uk Kim AslGbl_ExceptionCount[ModifiedLevel]++; 102644b0f624SJung-uk Kim if (!AslGbl_IgnoreErrors && AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT) 102753289f6aSNate Lawson { 1028ab71bbb7SJung-uk Kim printf ("\nMaximum error count (%u) exceeded (aslerror.c)\n", ASL_MAX_ERROR_COUNT); 102953289f6aSNate Lawson 10306f1f1a63SJung-uk Kim AslGbl_SourceLine = 0; 10316f1f1a63SJung-uk Kim AslGbl_NextError = AslGbl_ErrorLog; 103253289f6aSNate Lawson CmCleanupAndExit (); 10332272d050SJung-uk Kim exit(1); 103453289f6aSNate Lawson } 103553289f6aSNate Lawson 103653289f6aSNate Lawson return; 103753289f6aSNate Lawson } 103853289f6aSNate Lawson 103990b566fdSJung-uk Kim 104090b566fdSJung-uk Kim /******************************************************************************* 104190b566fdSJung-uk Kim * 104290b566fdSJung-uk Kim * FUNCTION: GetModifiedLevel 104390b566fdSJung-uk Kim * 104490b566fdSJung-uk Kim * PARAMETERS: Level - Seriousness (Warning/error, etc.) 104590b566fdSJung-uk Kim * MessageId - Index into global message buffer 104690b566fdSJung-uk Kim * 1047f9a6772eSJung-uk Kim * RETURN: UINT8 - Modified level 104890b566fdSJung-uk Kim * 104990b566fdSJung-uk Kim * DESCRIPTION: Get the modified level of exception codes that are reported as 105090b566fdSJung-uk Kim * errors from the -ww option. 105190b566fdSJung-uk Kim * 105290b566fdSJung-uk Kim ******************************************************************************/ 105390b566fdSJung-uk Kim 105490b566fdSJung-uk Kim static UINT8 105590b566fdSJung-uk Kim GetModifiedLevel ( 105690b566fdSJung-uk Kim UINT8 Level, 105790b566fdSJung-uk Kim UINT16 MessageId) 105890b566fdSJung-uk Kim { 105961b18036SJung-uk Kim UINT32 i; 106090b566fdSJung-uk Kim UINT16 ExceptionCode; 106190b566fdSJung-uk Kim 106290b566fdSJung-uk Kim 106390b566fdSJung-uk Kim ExceptionCode = AeBuildFullExceptionCode (Level, MessageId); 106490b566fdSJung-uk Kim 106590b566fdSJung-uk Kim for (i = 0; i < AslGbl_ElevatedMessagesIndex; i++) 106690b566fdSJung-uk Kim { 106790b566fdSJung-uk Kim if (ExceptionCode == AslGbl_ElevatedMessages[i]) 106890b566fdSJung-uk Kim { 106990b566fdSJung-uk Kim return (ASL_ERROR); 107090b566fdSJung-uk Kim } 107190b566fdSJung-uk Kim } 107290b566fdSJung-uk Kim 107390b566fdSJung-uk Kim return (Level); 107490b566fdSJung-uk Kim } 107590b566fdSJung-uk Kim 107690b566fdSJung-uk Kim 10775f9b24faSJung-uk Kim /******************************************************************************* 10785f9b24faSJung-uk Kim * 10795f9b24faSJung-uk Kim * FUNCTION: AslIsExceptionIgnored 10805f9b24faSJung-uk Kim * 10815f9b24faSJung-uk Kim * PARAMETERS: Level - Seriousness (Warning/error, etc.) 10825f9b24faSJung-uk Kim * MessageId - Index into global message buffer 10835f9b24faSJung-uk Kim * 10845f9b24faSJung-uk Kim * RETURN: BOOLEAN 10855f9b24faSJung-uk Kim * 10865f9b24faSJung-uk Kim * DESCRIPTION: Check if a particular exception is ignored. In this case it 10875f9b24faSJung-uk Kim * means that the exception is (expected or disabled. 10885f9b24faSJung-uk Kim * 10895f9b24faSJung-uk Kim ******************************************************************************/ 10905f9b24faSJung-uk Kim 10915f9b24faSJung-uk Kim BOOLEAN 10925f9b24faSJung-uk Kim AslIsExceptionIgnored ( 10933ee58df5SJung-uk Kim char *Filename, 10943ee58df5SJung-uk Kim UINT32 LineNumber, 10955f9b24faSJung-uk Kim UINT8 Level, 10965f9b24faSJung-uk Kim UINT16 MessageId) 10975f9b24faSJung-uk Kim { 10985f9b24faSJung-uk Kim BOOLEAN ExceptionIgnored; 10995f9b24faSJung-uk Kim 11005f9b24faSJung-uk Kim 11015f9b24faSJung-uk Kim /* Note: this allows exception to be disabled and expected */ 11025f9b24faSJung-uk Kim 11035f9b24faSJung-uk Kim ExceptionIgnored = AslIsExceptionDisabled (Level, MessageId); 11043ee58df5SJung-uk Kim ExceptionIgnored |= 11053ee58df5SJung-uk Kim AslIsExceptionExpected (Filename, LineNumber, Level, MessageId); 11065f9b24faSJung-uk Kim 11076f1f1a63SJung-uk Kim return (AslGbl_AllExceptionsDisabled || ExceptionIgnored); 11085f9b24faSJung-uk Kim } 11095f9b24faSJung-uk Kim 11105f9b24faSJung-uk Kim 11115f9b24faSJung-uk Kim /******************************************************************************* 11125f9b24faSJung-uk Kim * 11133ee58df5SJung-uk Kim * FUNCTION: AslCheckExpectedException 11145f9b24faSJung-uk Kim * 11155f9b24faSJung-uk Kim * PARAMETERS: none 11165f9b24faSJung-uk Kim * 11175f9b24faSJung-uk Kim * RETURN: none 11185f9b24faSJung-uk Kim * 11195f9b24faSJung-uk Kim * DESCRIPTION: Check the global expected messages table and raise an error 11205f9b24faSJung-uk Kim * for each message that has not been received. 11215f9b24faSJung-uk Kim * 11225f9b24faSJung-uk Kim ******************************************************************************/ 11235f9b24faSJung-uk Kim 11245f9b24faSJung-uk Kim void 11255f9b24faSJung-uk Kim AslCheckExpectedExceptions ( 11265f9b24faSJung-uk Kim void) 11275f9b24faSJung-uk Kim { 1128cfd1ed46SJung-uk Kim UINT32 i; 11293ee58df5SJung-uk Kim ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList; 11303ee58df5SJung-uk Kim ASL_LOCATION_NODE *LocationNode; 11315f9b24faSJung-uk Kim 113267d9aa44SJung-uk Kim 11336f1f1a63SJung-uk Kim for (i = 0; i < AslGbl_ExpectedMessagesIndex; ++i) 11345f9b24faSJung-uk Kim { 11356f1f1a63SJung-uk Kim if (!AslGbl_ExpectedMessages[i].MessageReceived) 11365f9b24faSJung-uk Kim { 11375f9b24faSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_EXCEPTION_NOT_RECEIVED, NULL, 11386f1f1a63SJung-uk Kim AslGbl_ExpectedMessages[i].MessageIdStr); 11395f9b24faSJung-uk Kim } 11405f9b24faSJung-uk Kim } 11413ee58df5SJung-uk Kim 11423ee58df5SJung-uk Kim while (Current) 11433ee58df5SJung-uk Kim { 11443ee58df5SJung-uk Kim LocationNode = Current->LocationList; 11453ee58df5SJung-uk Kim 11463ee58df5SJung-uk Kim while (LocationNode) 11473ee58df5SJung-uk Kim { 11483ee58df5SJung-uk Kim if (!LocationNode->MessageReceived) 11493ee58df5SJung-uk Kim { 11503ee58df5SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_EXCEPTION_NOT_RECEIVED, 11513ee58df5SJung-uk Kim LocationNode->LineNumber, LocationNode->LineNumber, 11523ee58df5SJung-uk Kim LocationNode->LogicalByteOffset, LocationNode->Column, 11533ee58df5SJung-uk Kim LocationNode->Filename, Current->MessageIdStr); 11543ee58df5SJung-uk Kim } 11553ee58df5SJung-uk Kim 11563ee58df5SJung-uk Kim LocationNode = LocationNode->Next; 11573ee58df5SJung-uk Kim } 11583ee58df5SJung-uk Kim 11593ee58df5SJung-uk Kim Current = Current->Next; 11603ee58df5SJung-uk Kim } 11615f9b24faSJung-uk Kim } 11625f9b24faSJung-uk Kim 11635f9b24faSJung-uk Kim 11645f9b24faSJung-uk Kim /******************************************************************************* 11655f9b24faSJung-uk Kim * 11663ee58df5SJung-uk Kim * FUNCTION: AslLogExpectedException 11675f9b24faSJung-uk Kim * 11685f9b24faSJung-uk Kim * PARAMETERS: MessageIdString - ID of excepted exception during compile 11695f9b24faSJung-uk Kim * 11705f9b24faSJung-uk Kim * RETURN: Status 11715f9b24faSJung-uk Kim * 11725f9b24faSJung-uk Kim * DESCRIPTION: Enter a message ID into the global expected messages table 11735f9b24faSJung-uk Kim * If these messages are not raised during the compilation, throw 11745f9b24faSJung-uk Kim * an error. 11755f9b24faSJung-uk Kim * 11765f9b24faSJung-uk Kim ******************************************************************************/ 11775f9b24faSJung-uk Kim 11785f9b24faSJung-uk Kim ACPI_STATUS 11793ee58df5SJung-uk Kim AslLogExpectedException ( 11805f9b24faSJung-uk Kim char *MessageIdString) 11815f9b24faSJung-uk Kim { 11825f9b24faSJung-uk Kim UINT32 MessageId; 11835f9b24faSJung-uk Kim 11845f9b24faSJung-uk Kim 11855f9b24faSJung-uk Kim /* Convert argument to an integer and validate it */ 11865f9b24faSJung-uk Kim 11875f9b24faSJung-uk Kim MessageId = (UINT32) strtoul (MessageIdString, NULL, 0); 11885f9b24faSJung-uk Kim 11895f9b24faSJung-uk Kim if (MessageId > 6999) 11905f9b24faSJung-uk Kim { 1191cfd1ed46SJung-uk Kim printf ("\"%s\" is not a valid warning/remark/error ID\n", 11925f9b24faSJung-uk Kim MessageIdString); 11935f9b24faSJung-uk Kim return (AE_BAD_PARAMETER); 11945f9b24faSJung-uk Kim } 11955f9b24faSJung-uk Kim 11965f9b24faSJung-uk Kim /* Insert value into the global expected message array */ 11975f9b24faSJung-uk Kim 11986f1f1a63SJung-uk Kim if (AslGbl_ExpectedMessagesIndex >= ASL_MAX_EXPECTED_MESSAGES) 11995f9b24faSJung-uk Kim { 12004a38ee6dSJung-uk Kim printf ("Too many messages have been registered as expected (max %d)\n", 12015f9b24faSJung-uk Kim ASL_MAX_DISABLED_MESSAGES); 12025f9b24faSJung-uk Kim return (AE_LIMIT); 12035f9b24faSJung-uk Kim } 12045f9b24faSJung-uk Kim 12056f1f1a63SJung-uk Kim AslGbl_ExpectedMessages[AslGbl_ExpectedMessagesIndex].MessageId = MessageId; 12066f1f1a63SJung-uk Kim AslGbl_ExpectedMessages[AslGbl_ExpectedMessagesIndex].MessageIdStr = MessageIdString; 12076f1f1a63SJung-uk Kim AslGbl_ExpectedMessages[AslGbl_ExpectedMessagesIndex].MessageReceived = FALSE; 12086f1f1a63SJung-uk Kim AslGbl_ExpectedMessagesIndex++; 12095f9b24faSJung-uk Kim return (AE_OK); 12105f9b24faSJung-uk Kim } 12115f9b24faSJung-uk Kim 121253289f6aSNate Lawson 121353289f6aSNate Lawson /******************************************************************************* 121453289f6aSNate Lawson * 12153ee58df5SJung-uk Kim * FUNCTION: AslLogExpectedExceptionByLine 12163ee58df5SJung-uk Kim * 12173ee58df5SJung-uk Kim * PARAMETERS: MessageIdString - ID of excepted exception during compile 12183ee58df5SJung-uk Kim * 12193ee58df5SJung-uk Kim * RETURN: Status 12203ee58df5SJung-uk Kim * 12213ee58df5SJung-uk Kim * DESCRIPTION: Enter a message ID into the global expected messages table 12223ee58df5SJung-uk Kim * based on file and line number. If these messages are not raised 12233ee58df5SJung-uk Kim * during the compilation, throw an error. 12243ee58df5SJung-uk Kim * 12253ee58df5SJung-uk Kim ******************************************************************************/ 12263ee58df5SJung-uk Kim 12273ee58df5SJung-uk Kim void 12283ee58df5SJung-uk Kim AslLogExpectedExceptionByLine ( 12293ee58df5SJung-uk Kim char *MessageIdString) 12303ee58df5SJung-uk Kim { 12313ee58df5SJung-uk Kim ASL_LOCATION_NODE *NewErrorLocationNode; 12323ee58df5SJung-uk Kim ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList; 12333ee58df5SJung-uk Kim UINT32 MessageId; 12343ee58df5SJung-uk Kim 12353ee58df5SJung-uk Kim 12363ee58df5SJung-uk Kim NewErrorLocationNode = UtLocalCalloc (sizeof (ASL_LOCATION_NODE)); 12373ee58df5SJung-uk Kim 12383ee58df5SJung-uk Kim NewErrorLocationNode->LineNumber = AslGbl_CurrentLineNumber; 12393ee58df5SJung-uk Kim NewErrorLocationNode->Filename = AslGbl_Files[ASL_FILE_INPUT].Filename; 12403ee58df5SJung-uk Kim NewErrorLocationNode->LogicalByteOffset = AslGbl_CurrentLineOffset; 12413ee58df5SJung-uk Kim NewErrorLocationNode->Column = AslGbl_CurrentColumn; 12423ee58df5SJung-uk Kim 12433ee58df5SJung-uk Kim MessageId = (UINT32) strtoul (MessageIdString, NULL, 0); 12443ee58df5SJung-uk Kim 12453ee58df5SJung-uk Kim /* search the existing list for a matching message ID */ 12463ee58df5SJung-uk Kim 12473ee58df5SJung-uk Kim while (Current && Current->MessageId != MessageId ) 12483ee58df5SJung-uk Kim { 12493ee58df5SJung-uk Kim Current = Current->Next; 12503ee58df5SJung-uk Kim } 12513ee58df5SJung-uk Kim if (!Current) 12523ee58df5SJung-uk Kim { 12533ee58df5SJung-uk Kim /* ID was not found, create a new node for this message ID */ 12543ee58df5SJung-uk Kim 12553ee58df5SJung-uk Kim Current = UtLocalCalloc (sizeof (ASL_EXPECTED_MSG_NODE)); 12563ee58df5SJung-uk Kim 12573ee58df5SJung-uk Kim Current->Next = AslGbl_ExpectedErrorCodeList; 12583ee58df5SJung-uk Kim Current->MessageIdStr = MessageIdString; 12593ee58df5SJung-uk Kim Current->MessageId = MessageId; 12603ee58df5SJung-uk Kim AslGbl_ExpectedErrorCodeList = Current; 12613ee58df5SJung-uk Kim } 12623ee58df5SJung-uk Kim 12633ee58df5SJung-uk Kim NewErrorLocationNode->Next = Current->LocationList; 12643ee58df5SJung-uk Kim Current->LocationList = NewErrorLocationNode; 12653ee58df5SJung-uk Kim } 12663ee58df5SJung-uk Kim 12673ee58df5SJung-uk Kim 12683ee58df5SJung-uk Kim /******************************************************************************* 12693ee58df5SJung-uk Kim * 1270a9d8d09cSJung-uk Kim * FUNCTION: AslDisableException 1271a9d8d09cSJung-uk Kim * 1272a9d8d09cSJung-uk Kim * PARAMETERS: MessageIdString - ID to be disabled 1273a9d8d09cSJung-uk Kim * 1274a9d8d09cSJung-uk Kim * RETURN: Status 1275a9d8d09cSJung-uk Kim * 1276a9d8d09cSJung-uk Kim * DESCRIPTION: Enter a message ID into the global disabled messages table 1277a9d8d09cSJung-uk Kim * 1278a9d8d09cSJung-uk Kim ******************************************************************************/ 1279a9d8d09cSJung-uk Kim 1280a9d8d09cSJung-uk Kim ACPI_STATUS 1281a9d8d09cSJung-uk Kim AslDisableException ( 1282a9d8d09cSJung-uk Kim char *MessageIdString) 1283a9d8d09cSJung-uk Kim { 1284a9d8d09cSJung-uk Kim UINT32 MessageId; 1285a9d8d09cSJung-uk Kim 1286a9d8d09cSJung-uk Kim 1287a9d8d09cSJung-uk Kim /* Convert argument to an integer and validate it */ 1288a9d8d09cSJung-uk Kim 1289a9d8d09cSJung-uk Kim MessageId = (UINT32) strtoul (MessageIdString, NULL, 0); 1290a9d8d09cSJung-uk Kim 12912f6a1a81SJung-uk Kim if ((MessageId < 2000) || (MessageId > 6999)) 1292a9d8d09cSJung-uk Kim { 12932f6a1a81SJung-uk Kim printf ("\"%s\" is not a valid warning/remark/error ID\n", 1294a9d8d09cSJung-uk Kim MessageIdString); 1295a9d8d09cSJung-uk Kim return (AE_BAD_PARAMETER); 1296a9d8d09cSJung-uk Kim } 1297a9d8d09cSJung-uk Kim 1298a9d8d09cSJung-uk Kim /* Insert value into the global disabled message array */ 1299a9d8d09cSJung-uk Kim 13006f1f1a63SJung-uk Kim if (AslGbl_DisabledMessagesIndex >= ASL_MAX_DISABLED_MESSAGES) 1301a9d8d09cSJung-uk Kim { 13024a38ee6dSJung-uk Kim printf ("Too many messages have been disabled (max %d)\n", 1303a9d8d09cSJung-uk Kim ASL_MAX_DISABLED_MESSAGES); 1304a9d8d09cSJung-uk Kim return (AE_LIMIT); 1305a9d8d09cSJung-uk Kim } 1306a9d8d09cSJung-uk Kim 13076f1f1a63SJung-uk Kim AslGbl_DisabledMessages[AslGbl_DisabledMessagesIndex] = MessageId; 13086f1f1a63SJung-uk Kim AslGbl_DisabledMessagesIndex++; 1309a9d8d09cSJung-uk Kim return (AE_OK); 1310a9d8d09cSJung-uk Kim } 1311a9d8d09cSJung-uk Kim 1312a9d8d09cSJung-uk Kim 1313a9d8d09cSJung-uk Kim /******************************************************************************* 1314a9d8d09cSJung-uk Kim * 131590b566fdSJung-uk Kim * FUNCTION: AslElevateException 131690b566fdSJung-uk Kim * 131790b566fdSJung-uk Kim * PARAMETERS: MessageIdString - ID of excepted exception during compile 131890b566fdSJung-uk Kim * 131990b566fdSJung-uk Kim * RETURN: Status 132090b566fdSJung-uk Kim * 132190b566fdSJung-uk Kim * DESCRIPTION: Enter a message ID into the global elevated exceptions table. 132290b566fdSJung-uk Kim * These messages will be considered as compilation errors. 132390b566fdSJung-uk Kim * 132490b566fdSJung-uk Kim ******************************************************************************/ 132590b566fdSJung-uk Kim 132690b566fdSJung-uk Kim ACPI_STATUS 132790b566fdSJung-uk Kim AslElevateException ( 132890b566fdSJung-uk Kim char *MessageIdString) 132990b566fdSJung-uk Kim { 133090b566fdSJung-uk Kim UINT32 MessageId; 133190b566fdSJung-uk Kim 133290b566fdSJung-uk Kim 133390b566fdSJung-uk Kim /* Convert argument to an integer and validate it */ 133490b566fdSJung-uk Kim 133590b566fdSJung-uk Kim MessageId = (UINT32) strtoul (MessageIdString, NULL, 0); 133690b566fdSJung-uk Kim 133790b566fdSJung-uk Kim if (MessageId > 6999) 133890b566fdSJung-uk Kim { 1339cfd1ed46SJung-uk Kim printf ("\"%s\" is not a valid warning/remark/error ID\n", 134090b566fdSJung-uk Kim MessageIdString); 134190b566fdSJung-uk Kim return (AE_BAD_PARAMETER); 134290b566fdSJung-uk Kim } 134390b566fdSJung-uk Kim 134490b566fdSJung-uk Kim /* Insert value into the global expected message array */ 134590b566fdSJung-uk Kim 134690b566fdSJung-uk Kim if (AslGbl_ElevatedMessagesIndex >= ASL_MAX_ELEVATED_MESSAGES) 134790b566fdSJung-uk Kim { 134890b566fdSJung-uk Kim printf ("Too many messages have been registered as elevated (max %d)\n", 134990b566fdSJung-uk Kim ASL_MAX_DISABLED_MESSAGES); 135090b566fdSJung-uk Kim return (AE_LIMIT); 135190b566fdSJung-uk Kim } 135290b566fdSJung-uk Kim 1353278f0de6SJung-uk Kim AslGbl_ElevatedMessages[AslGbl_ElevatedMessagesIndex] = MessageId; 135490b566fdSJung-uk Kim AslGbl_ElevatedMessagesIndex++; 135590b566fdSJung-uk Kim return (AE_OK); 135690b566fdSJung-uk Kim } 135790b566fdSJung-uk Kim 13583ee58df5SJung-uk Kim 135990b566fdSJung-uk Kim /******************************************************************************* 136090b566fdSJung-uk Kim * 1361a9d8d09cSJung-uk Kim * FUNCTION: AslIsExceptionDisabled 1362a9d8d09cSJung-uk Kim * 1363a9d8d09cSJung-uk Kim * PARAMETERS: Level - Seriousness (Warning/error, etc.) 1364a9d8d09cSJung-uk Kim * MessageId - Index into global message buffer 1365a9d8d09cSJung-uk Kim * 1366a9d8d09cSJung-uk Kim * RETURN: TRUE if exception/message should be ignored 1367a9d8d09cSJung-uk Kim * 1368a9d8d09cSJung-uk Kim * DESCRIPTION: Check if the user has specified options such that this 1369a9d8d09cSJung-uk Kim * exception should be ignored 1370a9d8d09cSJung-uk Kim * 1371a9d8d09cSJung-uk Kim ******************************************************************************/ 1372a9d8d09cSJung-uk Kim 13735f9b24faSJung-uk Kim static BOOLEAN 13745f9b24faSJung-uk Kim AslIsExceptionExpected ( 13753ee58df5SJung-uk Kim char *Filename, 13763ee58df5SJung-uk Kim UINT32 LineNumber, 13775f9b24faSJung-uk Kim UINT8 Level, 13785f9b24faSJung-uk Kim UINT16 MessageId) 13795f9b24faSJung-uk Kim { 13803ee58df5SJung-uk Kim ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList; 13813ee58df5SJung-uk Kim ASL_LOCATION_NODE *CurrentErrorLocation; 13825f9b24faSJung-uk Kim UINT32 EncodedMessageId; 13835f9b24faSJung-uk Kim UINT32 i; 13845f9b24faSJung-uk Kim 13855f9b24faSJung-uk Kim 138667d9aa44SJung-uk Kim /* Mark this exception as received */ 138767d9aa44SJung-uk Kim 13885f9b24faSJung-uk Kim EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId); 13896f1f1a63SJung-uk Kim for (i = 0; i < AslGbl_ExpectedMessagesIndex; i++) 13905f9b24faSJung-uk Kim { 13915f9b24faSJung-uk Kim /* Simple implementation via fixed array */ 13925f9b24faSJung-uk Kim 13936f1f1a63SJung-uk Kim if (EncodedMessageId == AslGbl_ExpectedMessages[i].MessageId) 13945f9b24faSJung-uk Kim { 13956f1f1a63SJung-uk Kim return (AslGbl_ExpectedMessages[i].MessageReceived = TRUE); 13965f9b24faSJung-uk Kim } 13975f9b24faSJung-uk Kim } 13985f9b24faSJung-uk Kim 13993ee58df5SJung-uk Kim while (Current && Current->MessageId != EncodedMessageId) 14003ee58df5SJung-uk Kim { 14013ee58df5SJung-uk Kim Current = Current->Next; 14023ee58df5SJung-uk Kim } 14033ee58df5SJung-uk Kim if (!Current) 14043ee58df5SJung-uk Kim { 14053ee58df5SJung-uk Kim return (FALSE); 14063ee58df5SJung-uk Kim } 14073ee58df5SJung-uk Kim 14083ee58df5SJung-uk Kim CurrentErrorLocation = Current->LocationList; 14093ee58df5SJung-uk Kim 14103ee58df5SJung-uk Kim while (CurrentErrorLocation) 14113ee58df5SJung-uk Kim { 14123ee58df5SJung-uk Kim if (!strcmp (CurrentErrorLocation->Filename, Filename) && 14133ee58df5SJung-uk Kim CurrentErrorLocation->LineNumber == LineNumber) 14143ee58df5SJung-uk Kim { 14153ee58df5SJung-uk Kim return (CurrentErrorLocation->MessageReceived = TRUE); 14163ee58df5SJung-uk Kim } 14173ee58df5SJung-uk Kim 14183ee58df5SJung-uk Kim CurrentErrorLocation = CurrentErrorLocation->Next; 14193ee58df5SJung-uk Kim } 14203ee58df5SJung-uk Kim 14215f9b24faSJung-uk Kim return (FALSE); 14225f9b24faSJung-uk Kim } 14235f9b24faSJung-uk Kim 14245f9b24faSJung-uk Kim 14255f9b24faSJung-uk Kim /******************************************************************************* 14265f9b24faSJung-uk Kim * 14275f9b24faSJung-uk Kim * FUNCTION: AslIsExceptionDisabled 14285f9b24faSJung-uk Kim * 14295f9b24faSJung-uk Kim * PARAMETERS: Level - Seriousness (Warning/error, etc.) 14305f9b24faSJung-uk Kim * MessageId - Index into global message buffer 14315f9b24faSJung-uk Kim * 14325f9b24faSJung-uk Kim * RETURN: TRUE if exception/message should be ignored 14335f9b24faSJung-uk Kim * 14345f9b24faSJung-uk Kim * DESCRIPTION: Check if the user has specified options such that this 14355f9b24faSJung-uk Kim * exception should be ignored 14365f9b24faSJung-uk Kim * 14375f9b24faSJung-uk Kim ******************************************************************************/ 14385f9b24faSJung-uk Kim 14395f9b24faSJung-uk Kim static BOOLEAN 1440a9d8d09cSJung-uk Kim AslIsExceptionDisabled ( 1441a9d8d09cSJung-uk Kim UINT8 Level, 1442313a0c13SJung-uk Kim UINT16 MessageId) 1443a9d8d09cSJung-uk Kim { 1444a9d8d09cSJung-uk Kim UINT32 EncodedMessageId; 1445a9d8d09cSJung-uk Kim UINT32 i; 1446a9d8d09cSJung-uk Kim 1447a9d8d09cSJung-uk Kim 1448a9d8d09cSJung-uk Kim switch (Level) 1449a9d8d09cSJung-uk Kim { 1450a9d8d09cSJung-uk Kim case ASL_WARNING2: 1451a9d8d09cSJung-uk Kim case ASL_WARNING3: 1452a9d8d09cSJung-uk Kim 1453a9d8d09cSJung-uk Kim /* Check for global disable via -w1/-w2/-w3 options */ 1454a9d8d09cSJung-uk Kim 14556f1f1a63SJung-uk Kim if (Level > AslGbl_WarningLevel) 1456a9d8d09cSJung-uk Kim { 1457a9d8d09cSJung-uk Kim return (TRUE); 1458a9d8d09cSJung-uk Kim } 1459385fb5d9SJung-uk Kim ACPI_FALLTHROUGH; 1460a9d8d09cSJung-uk Kim 1461a9d8d09cSJung-uk Kim case ASL_WARNING: 1462a9d8d09cSJung-uk Kim case ASL_REMARK: 14632f6a1a81SJung-uk Kim case ASL_ERROR: 1464a9d8d09cSJung-uk Kim /* 14652f6a1a81SJung-uk Kim * Ignore this error/warning/remark if it has been disabled by 1466a9d8d09cSJung-uk Kim * the user (-vw option) 1467a9d8d09cSJung-uk Kim */ 1468313a0c13SJung-uk Kim EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId); 14696f1f1a63SJung-uk Kim for (i = 0; i < AslGbl_DisabledMessagesIndex; i++) 1470a9d8d09cSJung-uk Kim { 1471a9d8d09cSJung-uk Kim /* Simple implementation via fixed array */ 1472a9d8d09cSJung-uk Kim 14736f1f1a63SJung-uk Kim if (EncodedMessageId == AslGbl_DisabledMessages[i]) 1474a9d8d09cSJung-uk Kim { 1475a9d8d09cSJung-uk Kim return (TRUE); 1476a9d8d09cSJung-uk Kim } 1477a9d8d09cSJung-uk Kim } 1478a9d8d09cSJung-uk Kim break; 1479a9d8d09cSJung-uk Kim 1480a9d8d09cSJung-uk Kim default: 1481a9d8d09cSJung-uk Kim break; 1482a9d8d09cSJung-uk Kim } 1483a9d8d09cSJung-uk Kim 1484a9d8d09cSJung-uk Kim return (FALSE); 1485a9d8d09cSJung-uk Kim } 1486a9d8d09cSJung-uk Kim 1487a9d8d09cSJung-uk Kim 1488a9d8d09cSJung-uk Kim /******************************************************************************* 1489a9d8d09cSJung-uk Kim * 149067d9aa44SJung-uk Kim * FUNCTION: AslDualParseOpError 149167d9aa44SJung-uk Kim * 149267d9aa44SJung-uk Kim * PARAMETERS: Level - Seriousness (Warning/error, etc.) 149367d9aa44SJung-uk Kim * MainMsgId - Index into global message buffer 149467d9aa44SJung-uk Kim * MainOp - Parse node where error happened 149567d9aa44SJung-uk Kim * MainMsg - Message pertaining to the MainOp 149667d9aa44SJung-uk Kim * SubMsgId - Index into global message buffer 149767d9aa44SJung-uk Kim * SubOp - Additional parse node for better message 1498f9a6772eSJung-uk Kim * SubMsg - Message pertaining to SubOp 149967d9aa44SJung-uk Kim * 150067d9aa44SJung-uk Kim * 150167d9aa44SJung-uk Kim * RETURN: None 150267d9aa44SJung-uk Kim * 150367d9aa44SJung-uk Kim * DESCRIPTION: Main error reporting routine for the ASL compiler for error 150467d9aa44SJung-uk Kim * messages that point to multiple parse objects. 150567d9aa44SJung-uk Kim * 150667d9aa44SJung-uk Kim ******************************************************************************/ 150767d9aa44SJung-uk Kim 150867d9aa44SJung-uk Kim void 150967d9aa44SJung-uk Kim AslDualParseOpError ( 151067d9aa44SJung-uk Kim UINT8 Level, 151167d9aa44SJung-uk Kim UINT16 MainMsgId, 151267d9aa44SJung-uk Kim ACPI_PARSE_OBJECT *MainOp, 151367d9aa44SJung-uk Kim char *MainMsg, 151467d9aa44SJung-uk Kim UINT16 SubMsgId, 151567d9aa44SJung-uk Kim ACPI_PARSE_OBJECT *SubOp, 151667d9aa44SJung-uk Kim char *SubMsg) 151767d9aa44SJung-uk Kim { 151867d9aa44SJung-uk Kim ASL_ERROR_MSG *SubEnode = NULL; 151967d9aa44SJung-uk Kim 152067d9aa44SJung-uk Kim 152167d9aa44SJung-uk Kim /* Check if user wants to ignore this exception */ 152267d9aa44SJung-uk Kim 15233ee58df5SJung-uk Kim if (!MainOp || AslIsExceptionIgnored (MainOp->Asl.Filename, 15243ee58df5SJung-uk Kim MainOp->Asl.LogicalLineNumber, Level, MainMsgId)) 152567d9aa44SJung-uk Kim { 152667d9aa44SJung-uk Kim return; 152767d9aa44SJung-uk Kim } 152867d9aa44SJung-uk Kim 152967d9aa44SJung-uk Kim if (SubOp) 153067d9aa44SJung-uk Kim { 153167d9aa44SJung-uk Kim AslInitEnode (&SubEnode, Level, SubMsgId, SubOp->Asl.LineNumber, 153267d9aa44SJung-uk Kim SubOp->Asl.LogicalLineNumber, SubOp->Asl.LogicalByteOffset, 153367d9aa44SJung-uk Kim SubOp->Asl.Column, SubOp->Asl.Filename, SubMsg, 153467d9aa44SJung-uk Kim NULL, NULL); 153567d9aa44SJung-uk Kim } 153667d9aa44SJung-uk Kim 153767d9aa44SJung-uk Kim AslLogNewError (Level, MainMsgId, MainOp->Asl.LineNumber, 153867d9aa44SJung-uk Kim MainOp->Asl.LogicalLineNumber, MainOp->Asl.LogicalByteOffset, 153967d9aa44SJung-uk Kim MainOp->Asl.Column, MainOp->Asl.Filename, MainMsg, 154067d9aa44SJung-uk Kim NULL, SubEnode); 154167d9aa44SJung-uk Kim } 154267d9aa44SJung-uk Kim 154367d9aa44SJung-uk Kim 154467d9aa44SJung-uk Kim /******************************************************************************* 154567d9aa44SJung-uk Kim * 154653289f6aSNate Lawson * FUNCTION: AslError 154753289f6aSNate Lawson * 154853289f6aSNate Lawson * PARAMETERS: Level - Seriousness (Warning/error, etc.) 154953289f6aSNate Lawson * MessageId - Index into global message buffer 155053289f6aSNate Lawson * Op - Parse node where error happened 1551f9a6772eSJung-uk Kim * ExtraMessage - Additional error message 155253289f6aSNate Lawson * 155353289f6aSNate Lawson * RETURN: None 155453289f6aSNate Lawson * 155553289f6aSNate Lawson * DESCRIPTION: Main error reporting routine for the ASL compiler (all code 155653289f6aSNate Lawson * except the parser.) 155753289f6aSNate Lawson * 155853289f6aSNate Lawson ******************************************************************************/ 155953289f6aSNate Lawson 156053289f6aSNate Lawson void 156153289f6aSNate Lawson AslError ( 156253289f6aSNate Lawson UINT8 Level, 1563313a0c13SJung-uk Kim UINT16 MessageId, 156453289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 156553289f6aSNate Lawson char *ExtraMessage) 156653289f6aSNate Lawson { 156753289f6aSNate Lawson if (Op) 156853289f6aSNate Lawson { 156953289f6aSNate Lawson AslCommonError (Level, MessageId, Op->Asl.LineNumber, 157053289f6aSNate Lawson Op->Asl.LogicalLineNumber, 157153289f6aSNate Lawson Op->Asl.LogicalByteOffset, 157253289f6aSNate Lawson Op->Asl.Column, 157353289f6aSNate Lawson Op->Asl.Filename, ExtraMessage); 157453289f6aSNate Lawson } 157553289f6aSNate Lawson else 157653289f6aSNate Lawson { 157753289f6aSNate Lawson AslCommonError (Level, MessageId, 0, 157853289f6aSNate Lawson 0, 0, 0, NULL, ExtraMessage); 157953289f6aSNate Lawson } 158053289f6aSNate Lawson } 158153289f6aSNate Lawson 158253289f6aSNate Lawson 158353289f6aSNate Lawson /******************************************************************************* 158453289f6aSNate Lawson * 158553289f6aSNate Lawson * FUNCTION: AslCoreSubsystemError 158653289f6aSNate Lawson * 158753289f6aSNate Lawson * PARAMETERS: Op - Parse node where error happened 158853289f6aSNate Lawson * Status - The ACPICA Exception 1589f9a6772eSJung-uk Kim * ExtraMessage - Additional error message 159053289f6aSNate Lawson * Abort - TRUE -> Abort compilation 159153289f6aSNate Lawson * 159253289f6aSNate Lawson * RETURN: None 159353289f6aSNate Lawson * 1594313a0c13SJung-uk Kim * DESCRIPTION: Error reporting routine for exceptions returned by the ACPICA 1595313a0c13SJung-uk Kim * core subsystem. 159653289f6aSNate Lawson * 159753289f6aSNate Lawson ******************************************************************************/ 159853289f6aSNate Lawson 159953289f6aSNate Lawson void 160053289f6aSNate Lawson AslCoreSubsystemError ( 160153289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 160253289f6aSNate Lawson ACPI_STATUS Status, 160353289f6aSNate Lawson char *ExtraMessage, 160453289f6aSNate Lawson BOOLEAN Abort) 160553289f6aSNate Lawson { 160653289f6aSNate Lawson 16076f1f1a63SJung-uk Kim sprintf (AslGbl_MsgBuffer, "%s %s", AcpiFormatException (Status), ExtraMessage); 160853289f6aSNate Lawson 160953289f6aSNate Lawson if (Op) 161053289f6aSNate Lawson { 1611f8146b88SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, 1612f8146b88SJung-uk Kim Op->Asl.LineNumber, 161353289f6aSNate Lawson Op->Asl.LogicalLineNumber, 161453289f6aSNate Lawson Op->Asl.LogicalByteOffset, 161553289f6aSNate Lawson Op->Asl.Column, 16166f1f1a63SJung-uk Kim Op->Asl.Filename, AslGbl_MsgBuffer); 161753289f6aSNate Lawson } 161853289f6aSNate Lawson else 161953289f6aSNate Lawson { 1620f8146b88SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, 16216f1f1a63SJung-uk Kim 0, 0, 0, 0, NULL, AslGbl_MsgBuffer); 162253289f6aSNate Lawson } 162353289f6aSNate Lawson 162453289f6aSNate Lawson if (Abort) 162553289f6aSNate Lawson { 162653289f6aSNate Lawson AslAbort (); 162753289f6aSNate Lawson } 162853289f6aSNate Lawson } 162953289f6aSNate Lawson 163053289f6aSNate Lawson 163153289f6aSNate Lawson /******************************************************************************* 163253289f6aSNate Lawson * 163353289f6aSNate Lawson * FUNCTION: AslCompilererror 163453289f6aSNate Lawson * 163553289f6aSNate Lawson * PARAMETERS: CompilerMessage - Error message from the parser 163653289f6aSNate Lawson * 1637fba7fc7eSJung-uk Kim * RETURN: Status (0 for now) 163853289f6aSNate Lawson * 163953289f6aSNate Lawson * DESCRIPTION: Report an error situation discovered in a production 1640fba7fc7eSJung-uk Kim * NOTE: don't change the name of this function, it is called 1641fba7fc7eSJung-uk Kim * from the auto-generated parser. 164253289f6aSNate Lawson * 164353289f6aSNate Lawson ******************************************************************************/ 164453289f6aSNate Lawson 164553289f6aSNate Lawson int 164653289f6aSNate Lawson AslCompilererror ( 16473f0275a0SJung-uk Kim const char *CompilerMessage) 164853289f6aSNate Lawson { 164953289f6aSNate Lawson 16506f1f1a63SJung-uk Kim AslGbl_SyntaxError++; 16511c0e1b6dSJung-uk Kim 16526f1f1a63SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_SYNTAX, AslGbl_CurrentLineNumber, 16536f1f1a63SJung-uk Kim AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, 16546f1f1a63SJung-uk Kim AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, 16553f0275a0SJung-uk Kim ACPI_CAST_PTR (char, CompilerMessage)); 165653289f6aSNate Lawson 16578ef1a331SJung-uk Kim return (0); 165853289f6aSNate Lawson } 1659