Home | History | Annotate | Line # | Download | only in compiler
aslerror.c revision 1.1
      1  1.1  jruoho 
      2  1.1  jruoho /******************************************************************************
      3  1.1  jruoho  *
      4  1.1  jruoho  * Module Name: aslerror - Error handling and statistics
      5  1.1  jruoho  *
      6  1.1  jruoho  *****************************************************************************/
      7  1.1  jruoho 
      8  1.1  jruoho /******************************************************************************
      9  1.1  jruoho  *
     10  1.1  jruoho  * 1. Copyright Notice
     11  1.1  jruoho  *
     12  1.1  jruoho  * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp.
     13  1.1  jruoho  * All rights reserved.
     14  1.1  jruoho  *
     15  1.1  jruoho  * 2. License
     16  1.1  jruoho  *
     17  1.1  jruoho  * 2.1. This is your license from Intel Corp. under its intellectual property
     18  1.1  jruoho  * rights.  You may have additional license terms from the party that provided
     19  1.1  jruoho  * you this software, covering your right to use that party's intellectual
     20  1.1  jruoho  * property rights.
     21  1.1  jruoho  *
     22  1.1  jruoho  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
     23  1.1  jruoho  * copy of the source code appearing in this file ("Covered Code") an
     24  1.1  jruoho  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
     25  1.1  jruoho  * base code distributed originally by Intel ("Original Intel Code") to copy,
     26  1.1  jruoho  * make derivatives, distribute, use and display any portion of the Covered
     27  1.1  jruoho  * Code in any form, with the right to sublicense such rights; and
     28  1.1  jruoho  *
     29  1.1  jruoho  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
     30  1.1  jruoho  * license (with the right to sublicense), under only those claims of Intel
     31  1.1  jruoho  * patents that are infringed by the Original Intel Code, to make, use, sell,
     32  1.1  jruoho  * offer to sell, and import the Covered Code and derivative works thereof
     33  1.1  jruoho  * solely to the minimum extent necessary to exercise the above copyright
     34  1.1  jruoho  * license, and in no event shall the patent license extend to any additions
     35  1.1  jruoho  * to or modifications of the Original Intel Code.  No other license or right
     36  1.1  jruoho  * is granted directly or by implication, estoppel or otherwise;
     37  1.1  jruoho  *
     38  1.1  jruoho  * The above copyright and patent license is granted only if the following
     39  1.1  jruoho  * conditions are met:
     40  1.1  jruoho  *
     41  1.1  jruoho  * 3. Conditions
     42  1.1  jruoho  *
     43  1.1  jruoho  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
     44  1.1  jruoho  * Redistribution of source code of any substantial portion of the Covered
     45  1.1  jruoho  * Code or modification with rights to further distribute source must include
     46  1.1  jruoho  * the above Copyright Notice, the above License, this list of Conditions,
     47  1.1  jruoho  * and the following Disclaimer and Export Compliance provision.  In addition,
     48  1.1  jruoho  * Licensee must cause all Covered Code to which Licensee contributes to
     49  1.1  jruoho  * contain a file documenting the changes Licensee made to create that Covered
     50  1.1  jruoho  * Code and the date of any change.  Licensee must include in that file the
     51  1.1  jruoho  * documentation of any changes made by any predecessor Licensee.  Licensee
     52  1.1  jruoho  * must include a prominent statement that the modification is derived,
     53  1.1  jruoho  * directly or indirectly, from Original Intel Code.
     54  1.1  jruoho  *
     55  1.1  jruoho  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
     56  1.1  jruoho  * Redistribution of source code of any substantial portion of the Covered
     57  1.1  jruoho  * Code or modification without rights to further distribute source must
     58  1.1  jruoho  * include the following Disclaimer and Export Compliance provision in the
     59  1.1  jruoho  * documentation and/or other materials provided with distribution.  In
     60  1.1  jruoho  * addition, Licensee may not authorize further sublicense of source of any
     61  1.1  jruoho  * portion of the Covered Code, and must include terms to the effect that the
     62  1.1  jruoho  * license from Licensee to its licensee is limited to the intellectual
     63  1.1  jruoho  * property embodied in the software Licensee provides to its licensee, and
     64  1.1  jruoho  * not to intellectual property embodied in modifications its licensee may
     65  1.1  jruoho  * make.
     66  1.1  jruoho  *
     67  1.1  jruoho  * 3.3. Redistribution of Executable. Redistribution in executable form of any
     68  1.1  jruoho  * substantial portion of the Covered Code or modification must reproduce the
     69  1.1  jruoho  * above Copyright Notice, and the following Disclaimer and Export Compliance
     70  1.1  jruoho  * provision in the documentation and/or other materials provided with the
     71  1.1  jruoho  * distribution.
     72  1.1  jruoho  *
     73  1.1  jruoho  * 3.4. Intel retains all right, title, and interest in and to the Original
     74  1.1  jruoho  * Intel Code.
     75  1.1  jruoho  *
     76  1.1  jruoho  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
     77  1.1  jruoho  * Intel shall be used in advertising or otherwise to promote the sale, use or
     78  1.1  jruoho  * other dealings in products derived from or relating to the Covered Code
     79  1.1  jruoho  * without prior written authorization from Intel.
     80  1.1  jruoho  *
     81  1.1  jruoho  * 4. Disclaimer and Export Compliance
     82  1.1  jruoho  *
     83  1.1  jruoho  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
     84  1.1  jruoho  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
     85  1.1  jruoho  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
     86  1.1  jruoho  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
     87  1.1  jruoho  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
     88  1.1  jruoho  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
     89  1.1  jruoho  * PARTICULAR PURPOSE.
     90  1.1  jruoho  *
     91  1.1  jruoho  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
     92  1.1  jruoho  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
     93  1.1  jruoho  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
     94  1.1  jruoho  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
     95  1.1  jruoho  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
     96  1.1  jruoho  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
     97  1.1  jruoho  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
     98  1.1  jruoho  * LIMITED REMEDY.
     99  1.1  jruoho  *
    100  1.1  jruoho  * 4.3. Licensee shall not export, either directly or indirectly, any of this
    101  1.1  jruoho  * software or system incorporating such software without first obtaining any
    102  1.1  jruoho  * required license or other approval from the U. S. Department of Commerce or
    103  1.1  jruoho  * any other agency or department of the United States Government.  In the
    104  1.1  jruoho  * event Licensee exports any such software from the United States or
    105  1.1  jruoho  * re-exports any such software from a foreign destination, Licensee shall
    106  1.1  jruoho  * ensure that the distribution and export/re-export of the software is in
    107  1.1  jruoho  * compliance with all laws, regulations, orders, or other restrictions of the
    108  1.1  jruoho  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
    109  1.1  jruoho  * any of its subsidiaries will export/re-export any technical data, process,
    110  1.1  jruoho  * software, or service, directly or indirectly, to any country for which the
    111  1.1  jruoho  * United States government or any agency thereof requires an export license,
    112  1.1  jruoho  * other governmental approval, or letter of assurance, without first obtaining
    113  1.1  jruoho  * such license, approval or letter.
    114  1.1  jruoho  *
    115  1.1  jruoho  *****************************************************************************/
    116  1.1  jruoho 
    117  1.1  jruoho #define ASL_EXCEPTIONS
    118  1.1  jruoho #include "aslcompiler.h"
    119  1.1  jruoho 
    120  1.1  jruoho #define _COMPONENT          ACPI_COMPILER
    121  1.1  jruoho         ACPI_MODULE_NAME    ("aslerror")
    122  1.1  jruoho 
    123  1.1  jruoho /* Local prototypes */
    124  1.1  jruoho 
    125  1.1  jruoho static void
    126  1.1  jruoho AeAddToErrorLog (
    127  1.1  jruoho     ASL_ERROR_MSG           *Enode);
    128  1.1  jruoho 
    129  1.1  jruoho 
    130  1.1  jruoho void
    131  1.1  jruoho AeClearErrorLog (
    132  1.1  jruoho     void)
    133  1.1  jruoho {
    134  1.1  jruoho     ASL_ERROR_MSG           *Enode = Gbl_ErrorLog;
    135  1.1  jruoho     ASL_ERROR_MSG           *Next;
    136  1.1  jruoho 
    137  1.1  jruoho     /* Walk the error node list */
    138  1.1  jruoho 
    139  1.1  jruoho     while (Enode)
    140  1.1  jruoho     {
    141  1.1  jruoho         Next = Enode->Next;
    142  1.1  jruoho         ACPI_FREE (Enode);
    143  1.1  jruoho         Enode = Next;
    144  1.1  jruoho     }
    145  1.1  jruoho 
    146  1.1  jruoho     Gbl_ErrorLog = NULL;
    147  1.1  jruoho }
    148  1.1  jruoho 
    149  1.1  jruoho 
    150  1.1  jruoho /*******************************************************************************
    151  1.1  jruoho  *
    152  1.1  jruoho  * FUNCTION:    AeAddToErrorLog
    153  1.1  jruoho  *
    154  1.1  jruoho  * PARAMETERS:  Enode       - An error node to add to the log
    155  1.1  jruoho  *
    156  1.1  jruoho  * RETURN:      None
    157  1.1  jruoho  *
    158  1.1  jruoho  * DESCRIPTION: Add a new error node to the error log.  The error log is
    159  1.1  jruoho  *              ordered by the "logical" line number (cumulative line number
    160  1.1  jruoho  *              including all include files.)
    161  1.1  jruoho  *
    162  1.1  jruoho  ******************************************************************************/
    163  1.1  jruoho 
    164  1.1  jruoho static void
    165  1.1  jruoho AeAddToErrorLog (
    166  1.1  jruoho     ASL_ERROR_MSG           *Enode)
    167  1.1  jruoho {
    168  1.1  jruoho     ASL_ERROR_MSG           *Next;
    169  1.1  jruoho     ASL_ERROR_MSG           *Prev;
    170  1.1  jruoho 
    171  1.1  jruoho 
    172  1.1  jruoho     /* If Gbl_ErrorLog is null, this is the first error node */
    173  1.1  jruoho 
    174  1.1  jruoho     if (!Gbl_ErrorLog)
    175  1.1  jruoho     {
    176  1.1  jruoho         Gbl_ErrorLog = Enode;
    177  1.1  jruoho         return;
    178  1.1  jruoho     }
    179  1.1  jruoho 
    180  1.1  jruoho     /*
    181  1.1  jruoho      * Walk error list until we find a line number greater than ours.
    182  1.1  jruoho      * List is sorted according to line number.
    183  1.1  jruoho      */
    184  1.1  jruoho     Prev = NULL;
    185  1.1  jruoho     Next = Gbl_ErrorLog;
    186  1.1  jruoho 
    187  1.1  jruoho     while ((Next) &&
    188  1.1  jruoho            (Next->LogicalLineNumber <= Enode->LogicalLineNumber))
    189  1.1  jruoho     {
    190  1.1  jruoho         Prev = Next;
    191  1.1  jruoho         Next = Next->Next;
    192  1.1  jruoho     }
    193  1.1  jruoho 
    194  1.1  jruoho     /* Found our place in the list */
    195  1.1  jruoho 
    196  1.1  jruoho     Enode->Next = Next;
    197  1.1  jruoho 
    198  1.1  jruoho     if (Prev)
    199  1.1  jruoho     {
    200  1.1  jruoho         Prev->Next = Enode;
    201  1.1  jruoho     }
    202  1.1  jruoho     else
    203  1.1  jruoho     {
    204  1.1  jruoho         Gbl_ErrorLog = Enode;
    205  1.1  jruoho     }
    206  1.1  jruoho }
    207  1.1  jruoho 
    208  1.1  jruoho 
    209  1.1  jruoho /*******************************************************************************
    210  1.1  jruoho  *
    211  1.1  jruoho  * FUNCTION:    AePrintException
    212  1.1  jruoho  *
    213  1.1  jruoho  * PARAMETERS:  FileId          - ID of output file
    214  1.1  jruoho  *              Enode           - Error node to print
    215  1.1  jruoho  *              Header          - Additional text before each message
    216  1.1  jruoho  *
    217  1.1  jruoho  * RETURN:      None
    218  1.1  jruoho  *
    219  1.1  jruoho  * DESCRIPTION: Print the contents of an error node.
    220  1.1  jruoho  *
    221  1.1  jruoho  * NOTE:        We don't use the FlxxxFile I/O functions here because on error
    222  1.1  jruoho  *              they abort the compiler and call this function!  Since we
    223  1.1  jruoho  *              are reporting errors here, we ignore most output errors and
    224  1.1  jruoho  *              just try to get out as much as we can.
    225  1.1  jruoho  *
    226  1.1  jruoho  ******************************************************************************/
    227  1.1  jruoho 
    228  1.1  jruoho void
    229  1.1  jruoho AePrintException (
    230  1.1  jruoho     UINT32                  FileId,
    231  1.1  jruoho     ASL_ERROR_MSG           *Enode,
    232  1.1  jruoho     char                    *Header)
    233  1.1  jruoho {
    234  1.1  jruoho     UINT8                   SourceByte;
    235  1.1  jruoho     int                     Actual;
    236  1.1  jruoho     size_t                  RActual;
    237  1.1  jruoho     UINT32                  MsgLength;
    238  1.1  jruoho     char                    *MainMessage;
    239  1.1  jruoho     char                    *ExtraMessage;
    240  1.1  jruoho     UINT32                  SourceColumn;
    241  1.1  jruoho     UINT32                  ErrorColumn;
    242  1.1  jruoho     FILE                    *OutputFile;
    243  1.1  jruoho     FILE                    *SourceFile;
    244  1.1  jruoho 
    245  1.1  jruoho 
    246  1.1  jruoho     if (Gbl_NoErrors)
    247  1.1  jruoho     {
    248  1.1  jruoho         return;
    249  1.1  jruoho     }
    250  1.1  jruoho 
    251  1.1  jruoho     /*
    252  1.1  jruoho      * Only listing files have a header, and remarks/optimizations
    253  1.1  jruoho      * are always output
    254  1.1  jruoho      */
    255  1.1  jruoho     if (!Header)
    256  1.1  jruoho     {
    257  1.1  jruoho         /* Ignore remarks if requested */
    258  1.1  jruoho 
    259  1.1  jruoho         switch (Enode->Level)
    260  1.1  jruoho         {
    261  1.1  jruoho         case ASL_REMARK:
    262  1.1  jruoho             if (!Gbl_DisplayRemarks)
    263  1.1  jruoho             {
    264  1.1  jruoho                 return;
    265  1.1  jruoho             }
    266  1.1  jruoho             break;
    267  1.1  jruoho 
    268  1.1  jruoho         case ASL_OPTIMIZATION:
    269  1.1  jruoho             if (!Gbl_DisplayOptimizations)
    270  1.1  jruoho             {
    271  1.1  jruoho                 return;
    272  1.1  jruoho             }
    273  1.1  jruoho             break;
    274  1.1  jruoho 
    275  1.1  jruoho         default:
    276  1.1  jruoho             break;
    277  1.1  jruoho         }
    278  1.1  jruoho     }
    279  1.1  jruoho 
    280  1.1  jruoho     /* Get the file handles */
    281  1.1  jruoho 
    282  1.1  jruoho     OutputFile = Gbl_Files[FileId].Handle;
    283  1.1  jruoho     SourceFile = Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle;
    284  1.1  jruoho 
    285  1.1  jruoho     if (Header)
    286  1.1  jruoho     {
    287  1.1  jruoho         fprintf (OutputFile, "%s", Header);
    288  1.1  jruoho     }
    289  1.1  jruoho 
    290  1.1  jruoho     /* Print filename and line number if present and valid */
    291  1.1  jruoho 
    292  1.1  jruoho     if (Enode->Filename)
    293  1.1  jruoho     {
    294  1.1  jruoho         if (Gbl_VerboseErrors)
    295  1.1  jruoho         {
    296  1.1  jruoho             fprintf (OutputFile, "%6s", Enode->Filename);
    297  1.1  jruoho 
    298  1.1  jruoho             if (Enode->LineNumber)
    299  1.1  jruoho             {
    300  1.1  jruoho                 fprintf (OutputFile, "%6u: ", Enode->LineNumber);
    301  1.1  jruoho 
    302  1.1  jruoho                 /*
    303  1.1  jruoho                  * Seek to the offset in the combined source file, read the source
    304  1.1  jruoho                  * line, and write it to the output.
    305  1.1  jruoho                  */
    306  1.1  jruoho                 Actual = fseek (SourceFile, (long) Enode->LogicalByteOffset,
    307  1.1  jruoho                             (int) SEEK_SET);
    308  1.1  jruoho                 if (Actual)
    309  1.1  jruoho                 {
    310  1.1  jruoho                     fprintf (OutputFile,
    311  1.1  jruoho                         "[*** iASL: Seek error on source code temp file %s ***]",
    312  1.1  jruoho                         Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
    313  1.1  jruoho                 }
    314  1.1  jruoho                 else
    315  1.1  jruoho                 {
    316  1.1  jruoho                     RActual = fread (&SourceByte, 1, 1, SourceFile);
    317  1.1  jruoho                     if (!RActual)
    318  1.1  jruoho                     {
    319  1.1  jruoho                         fprintf (OutputFile,
    320  1.1  jruoho                             "[*** iASL: Read error on source code temp file %s ***]",
    321  1.1  jruoho                             Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
    322  1.1  jruoho                     }
    323  1.1  jruoho 
    324  1.1  jruoho                     else while (RActual && SourceByte && (SourceByte != '\n'))
    325  1.1  jruoho                     {
    326  1.1  jruoho                         fwrite (&SourceByte, 1, 1, OutputFile);
    327  1.1  jruoho                         RActual = fread (&SourceByte, 1, 1, SourceFile);
    328  1.1  jruoho                     }
    329  1.1  jruoho                 }
    330  1.1  jruoho                 fprintf (OutputFile, "\n");
    331  1.1  jruoho             }
    332  1.1  jruoho         }
    333  1.1  jruoho         else
    334  1.1  jruoho         {
    335  1.1  jruoho             fprintf (OutputFile, "%s", Enode->Filename);
    336  1.1  jruoho 
    337  1.1  jruoho             if (Enode->LineNumber)
    338  1.1  jruoho             {
    339  1.1  jruoho                 fprintf (OutputFile, "(%u) : ", Enode->LineNumber);
    340  1.1  jruoho             }
    341  1.1  jruoho         }
    342  1.1  jruoho     }
    343  1.1  jruoho 
    344  1.1  jruoho     /* NULL message ID, just print the raw message */
    345  1.1  jruoho 
    346  1.1  jruoho     if (Enode->MessageId == 0)
    347  1.1  jruoho     {
    348  1.1  jruoho         fprintf (OutputFile, "%s\n", Enode->Message);
    349  1.1  jruoho     }
    350  1.1  jruoho     else
    351  1.1  jruoho     {
    352  1.1  jruoho         /* Decode the message ID */
    353  1.1  jruoho 
    354  1.1  jruoho         fprintf (OutputFile, "%s %4.4d -",
    355  1.1  jruoho                     AslErrorLevel[Enode->Level],
    356  1.1  jruoho                     Enode->MessageId + ((Enode->Level+1) * 1000));
    357  1.1  jruoho 
    358  1.1  jruoho         MainMessage = AslMessages[Enode->MessageId];
    359  1.1  jruoho         ExtraMessage = Enode->Message;
    360  1.1  jruoho 
    361  1.1  jruoho         if (Enode->LineNumber)
    362  1.1  jruoho         {
    363  1.1  jruoho             MsgLength = strlen (MainMessage);
    364  1.1  jruoho             if (MsgLength == 0)
    365  1.1  jruoho             {
    366  1.1  jruoho                 MainMessage = Enode->Message;
    367  1.1  jruoho 
    368  1.1  jruoho                 MsgLength = strlen (MainMessage);
    369  1.1  jruoho                 ExtraMessage = NULL;
    370  1.1  jruoho             }
    371  1.1  jruoho 
    372  1.1  jruoho             if (Gbl_VerboseErrors)
    373  1.1  jruoho             {
    374  1.1  jruoho                 SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2;
    375  1.1  jruoho                 ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1;
    376  1.1  jruoho 
    377  1.1  jruoho                 if ((MsgLength + ErrorColumn) < (SourceColumn - 1))
    378  1.1  jruoho                 {
    379  1.1  jruoho                     fprintf (OutputFile, "%*s%s",
    380  1.1  jruoho                         (int) ((SourceColumn - 1) - ErrorColumn),
    381  1.1  jruoho                         MainMessage, " ^ ");
    382  1.1  jruoho                 }
    383  1.1  jruoho                 else
    384  1.1  jruoho                 {
    385  1.1  jruoho                     fprintf (OutputFile, "%*s %s",
    386  1.1  jruoho                         (int) ((SourceColumn - ErrorColumn) + 1), "^",
    387  1.1  jruoho                         MainMessage);
    388  1.1  jruoho                 }
    389  1.1  jruoho             }
    390  1.1  jruoho             else
    391  1.1  jruoho             {
    392  1.1  jruoho                 fprintf (OutputFile, " %s", MainMessage);
    393  1.1  jruoho             }
    394  1.1  jruoho 
    395  1.1  jruoho             /* Print the extra info message if present */
    396  1.1  jruoho 
    397  1.1  jruoho             if (ExtraMessage)
    398  1.1  jruoho             {
    399  1.1  jruoho                 fprintf (OutputFile, " (%s)", ExtraMessage);
    400  1.1  jruoho             }
    401  1.1  jruoho 
    402  1.1  jruoho             fprintf (OutputFile, "\n");
    403  1.1  jruoho             if (Gbl_VerboseErrors)
    404  1.1  jruoho             {
    405  1.1  jruoho                 fprintf (OutputFile, "\n");
    406  1.1  jruoho             }
    407  1.1  jruoho         }
    408  1.1  jruoho         else
    409  1.1  jruoho         {
    410  1.1  jruoho             fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage);
    411  1.1  jruoho         }
    412  1.1  jruoho     }
    413  1.1  jruoho }
    414  1.1  jruoho 
    415  1.1  jruoho 
    416  1.1  jruoho /*******************************************************************************
    417  1.1  jruoho  *
    418  1.1  jruoho  * FUNCTION:    AePrintErrorLog
    419  1.1  jruoho  *
    420  1.1  jruoho  * PARAMETERS:  FileId           - Where to output the error log
    421  1.1  jruoho  *
    422  1.1  jruoho  * RETURN:      None
    423  1.1  jruoho  *
    424  1.1  jruoho  * DESCRIPTION: Print the entire contents of the error log
    425  1.1  jruoho  *
    426  1.1  jruoho  ******************************************************************************/
    427  1.1  jruoho 
    428  1.1  jruoho void
    429  1.1  jruoho AePrintErrorLog (
    430  1.1  jruoho     UINT32                  FileId)
    431  1.1  jruoho {
    432  1.1  jruoho     ASL_ERROR_MSG           *Enode = Gbl_ErrorLog;
    433  1.1  jruoho 
    434  1.1  jruoho 
    435  1.1  jruoho     /* Walk the error node list */
    436  1.1  jruoho 
    437  1.1  jruoho     while (Enode)
    438  1.1  jruoho     {
    439  1.1  jruoho         AePrintException (FileId, Enode, NULL);
    440  1.1  jruoho         Enode = Enode->Next;
    441  1.1  jruoho     }
    442  1.1  jruoho }
    443  1.1  jruoho 
    444  1.1  jruoho 
    445  1.1  jruoho /*******************************************************************************
    446  1.1  jruoho  *
    447  1.1  jruoho  * FUNCTION:    AslCommonError
    448  1.1  jruoho  *
    449  1.1  jruoho  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
    450  1.1  jruoho  *              MessageId           - Index into global message buffer
    451  1.1  jruoho  *              CurrentLineNumber   - Actual file line number
    452  1.1  jruoho  *              LogicalLineNumber   - Cumulative line number
    453  1.1  jruoho  *              LogicalByteOffset   - Byte offset in source file
    454  1.1  jruoho  *              Column              - Column in current line
    455  1.1  jruoho  *              Filename            - source filename
    456  1.1  jruoho  *              ExtraMessage        - additional error message
    457  1.1  jruoho  *
    458  1.1  jruoho  * RETURN:      None
    459  1.1  jruoho  *
    460  1.1  jruoho  * DESCRIPTION: Create a new error node and add it to the error log
    461  1.1  jruoho  *
    462  1.1  jruoho  ******************************************************************************/
    463  1.1  jruoho 
    464  1.1  jruoho void
    465  1.1  jruoho AslCommonError (
    466  1.1  jruoho     UINT8                   Level,
    467  1.1  jruoho     UINT8                   MessageId,
    468  1.1  jruoho     UINT32                  CurrentLineNumber,
    469  1.1  jruoho     UINT32                  LogicalLineNumber,
    470  1.1  jruoho     UINT32                  LogicalByteOffset,
    471  1.1  jruoho     UINT32                  Column,
    472  1.1  jruoho     char                    *Filename,
    473  1.1  jruoho     char                    *ExtraMessage)
    474  1.1  jruoho {
    475  1.1  jruoho     UINT32                  MessageSize;
    476  1.1  jruoho     char                    *MessageBuffer = NULL;
    477  1.1  jruoho     ASL_ERROR_MSG           *Enode;
    478  1.1  jruoho 
    479  1.1  jruoho 
    480  1.1  jruoho     Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
    481  1.1  jruoho 
    482  1.1  jruoho     if (ExtraMessage)
    483  1.1  jruoho     {
    484  1.1  jruoho         /* Allocate a buffer for the message and a new error node */
    485  1.1  jruoho 
    486  1.1  jruoho         MessageSize   = strlen (ExtraMessage) + 1;
    487  1.1  jruoho         MessageBuffer = UtLocalCalloc (MessageSize);
    488  1.1  jruoho 
    489  1.1  jruoho         /* Keep a copy of the extra message */
    490  1.1  jruoho 
    491  1.1  jruoho         ACPI_STRCPY (MessageBuffer, ExtraMessage);
    492  1.1  jruoho     }
    493  1.1  jruoho 
    494  1.1  jruoho     /* Initialize the error node */
    495  1.1  jruoho 
    496  1.1  jruoho     if (Filename)
    497  1.1  jruoho     {
    498  1.1  jruoho         Enode->Filename       = Filename;
    499  1.1  jruoho         Enode->FilenameLength = strlen (Filename);
    500  1.1  jruoho         if (Enode->FilenameLength < 6)
    501  1.1  jruoho         {
    502  1.1  jruoho             Enode->FilenameLength = 6;
    503  1.1  jruoho         }
    504  1.1  jruoho     }
    505  1.1  jruoho 
    506  1.1  jruoho     Enode->MessageId            = MessageId;
    507  1.1  jruoho     Enode->Level                = Level;
    508  1.1  jruoho     Enode->LineNumber           = CurrentLineNumber;
    509  1.1  jruoho     Enode->LogicalLineNumber    = LogicalLineNumber;
    510  1.1  jruoho     Enode->LogicalByteOffset    = LogicalByteOffset;
    511  1.1  jruoho     Enode->Column               = Column;
    512  1.1  jruoho     Enode->Message              = MessageBuffer;
    513  1.1  jruoho 
    514  1.1  jruoho     /* Add the new node to the error node list */
    515  1.1  jruoho 
    516  1.1  jruoho     AeAddToErrorLog (Enode);
    517  1.1  jruoho 
    518  1.1  jruoho     if (Gbl_DebugFlag)
    519  1.1  jruoho     {
    520  1.1  jruoho         /* stderr is a file, send error to it immediately */
    521  1.1  jruoho 
    522  1.1  jruoho         AePrintException (ASL_FILE_STDERR, Enode, NULL);
    523  1.1  jruoho     }
    524  1.1  jruoho 
    525  1.1  jruoho     Gbl_ExceptionCount[Level]++;
    526  1.1  jruoho     if (Gbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
    527  1.1  jruoho     {
    528  1.1  jruoho         printf ("\nMaximum error count (%u) exceeded\n", ASL_MAX_ERROR_COUNT);
    529  1.1  jruoho 
    530  1.1  jruoho         Gbl_SourceLine = 0;
    531  1.1  jruoho         Gbl_NextError = Gbl_ErrorLog;
    532  1.1  jruoho         CmDoOutputFiles ();
    533  1.1  jruoho         CmCleanupAndExit ();
    534  1.1  jruoho         exit(1);
    535  1.1  jruoho     }
    536  1.1  jruoho 
    537  1.1  jruoho     return;
    538  1.1  jruoho }
    539  1.1  jruoho 
    540  1.1  jruoho 
    541  1.1  jruoho /*******************************************************************************
    542  1.1  jruoho  *
    543  1.1  jruoho  * FUNCTION:    AslError
    544  1.1  jruoho  *
    545  1.1  jruoho  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
    546  1.1  jruoho  *              MessageId           - Index into global message buffer
    547  1.1  jruoho  *              Op                  - Parse node where error happened
    548  1.1  jruoho  *              ExtraMessage        - additional error message
    549  1.1  jruoho  *
    550  1.1  jruoho  * RETURN:      None
    551  1.1  jruoho  *
    552  1.1  jruoho  * DESCRIPTION: Main error reporting routine for the ASL compiler (all code
    553  1.1  jruoho  *              except the parser.)
    554  1.1  jruoho  *
    555  1.1  jruoho  ******************************************************************************/
    556  1.1  jruoho 
    557  1.1  jruoho void
    558  1.1  jruoho AslError (
    559  1.1  jruoho     UINT8                   Level,
    560  1.1  jruoho     UINT8                   MessageId,
    561  1.1  jruoho     ACPI_PARSE_OBJECT       *Op,
    562  1.1  jruoho     char                    *ExtraMessage)
    563  1.1  jruoho {
    564  1.1  jruoho 
    565  1.1  jruoho     switch (Level)
    566  1.1  jruoho     {
    567  1.1  jruoho     case ASL_WARNING2:
    568  1.1  jruoho     case ASL_WARNING3:
    569  1.1  jruoho         if (Gbl_WarningLevel < Level)
    570  1.1  jruoho         {
    571  1.1  jruoho             return;
    572  1.1  jruoho         }
    573  1.1  jruoho         break;
    574  1.1  jruoho 
    575  1.1  jruoho     default:
    576  1.1  jruoho         break;
    577  1.1  jruoho     }
    578  1.1  jruoho 
    579  1.1  jruoho 
    580  1.1  jruoho     if (Op)
    581  1.1  jruoho     {
    582  1.1  jruoho         AslCommonError (Level, MessageId, Op->Asl.LineNumber,
    583  1.1  jruoho                         Op->Asl.LogicalLineNumber,
    584  1.1  jruoho                         Op->Asl.LogicalByteOffset,
    585  1.1  jruoho                         Op->Asl.Column,
    586  1.1  jruoho                         Op->Asl.Filename, ExtraMessage);
    587  1.1  jruoho     }
    588  1.1  jruoho     else
    589  1.1  jruoho     {
    590  1.1  jruoho         AslCommonError (Level, MessageId, 0,
    591  1.1  jruoho                         0, 0, 0, NULL, ExtraMessage);
    592  1.1  jruoho     }
    593  1.1  jruoho }
    594  1.1  jruoho 
    595  1.1  jruoho 
    596  1.1  jruoho /*******************************************************************************
    597  1.1  jruoho  *
    598  1.1  jruoho  * FUNCTION:    AslCoreSubsystemError
    599  1.1  jruoho  *
    600  1.1  jruoho  * PARAMETERS:  Op                  - Parse node where error happened
    601  1.1  jruoho  *              Status              - The ACPI CA Exception
    602  1.1  jruoho  *              ExtraMessage        - additional error message
    603  1.1  jruoho  *              Abort               - TRUE -> Abort compilation
    604  1.1  jruoho  *
    605  1.1  jruoho  * RETURN:      None
    606  1.1  jruoho  *
    607  1.1  jruoho  * DESCRIPTION: Error reporting routine for exceptions returned by the ACPI
    608  1.1  jruoho  *              CA core subsystem.
    609  1.1  jruoho  *
    610  1.1  jruoho  ******************************************************************************/
    611  1.1  jruoho 
    612  1.1  jruoho void
    613  1.1  jruoho AslCoreSubsystemError (
    614  1.1  jruoho     ACPI_PARSE_OBJECT       *Op,
    615  1.1  jruoho     ACPI_STATUS             Status,
    616  1.1  jruoho     char                    *ExtraMessage,
    617  1.1  jruoho     BOOLEAN                 Abort)
    618  1.1  jruoho {
    619  1.1  jruoho 
    620  1.1  jruoho     sprintf (MsgBuffer, "%s %s", AcpiFormatException (Status), ExtraMessage);
    621  1.1  jruoho 
    622  1.1  jruoho     if (Op)
    623  1.1  jruoho     {
    624  1.1  jruoho         AslCommonError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, Op->Asl.LineNumber,
    625  1.1  jruoho                         Op->Asl.LogicalLineNumber,
    626  1.1  jruoho                         Op->Asl.LogicalByteOffset,
    627  1.1  jruoho                         Op->Asl.Column,
    628  1.1  jruoho                         Op->Asl.Filename, MsgBuffer);
    629  1.1  jruoho     }
    630  1.1  jruoho     else
    631  1.1  jruoho     {
    632  1.1  jruoho         AslCommonError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, 0,
    633  1.1  jruoho                         0, 0, 0, NULL, MsgBuffer);
    634  1.1  jruoho     }
    635  1.1  jruoho 
    636  1.1  jruoho     if (Abort)
    637  1.1  jruoho     {
    638  1.1  jruoho         AslAbort ();
    639  1.1  jruoho     }
    640  1.1  jruoho }
    641  1.1  jruoho 
    642  1.1  jruoho 
    643  1.1  jruoho /*******************************************************************************
    644  1.1  jruoho  *
    645  1.1  jruoho  * FUNCTION:    AslCompilererror
    646  1.1  jruoho  *
    647  1.1  jruoho  * PARAMETERS:  CompilerMessage         - Error message from the parser
    648  1.1  jruoho  *
    649  1.1  jruoho  * RETURN:      Status (0 for now)
    650  1.1  jruoho  *
    651  1.1  jruoho  * DESCRIPTION: Report an error situation discovered in a production
    652  1.1  jruoho  *              NOTE: don't change the name of this function, it is called
    653  1.1  jruoho  *              from the auto-generated parser.
    654  1.1  jruoho  *
    655  1.1  jruoho  ******************************************************************************/
    656  1.1  jruoho 
    657  1.1  jruoho int
    658  1.1  jruoho AslCompilererror (
    659  1.1  jruoho     char                    *CompilerMessage)
    660  1.1  jruoho {
    661  1.1  jruoho 
    662  1.1  jruoho     AslCommonError (ASL_ERROR, ASL_MSG_SYNTAX, Gbl_CurrentLineNumber,
    663  1.1  jruoho                     Gbl_LogicalLineNumber, Gbl_CurrentLineOffset,
    664  1.1  jruoho                     Gbl_CurrentColumn, Gbl_Files[ASL_FILE_INPUT].Filename,
    665  1.1  jruoho                     CompilerMessage);
    666  1.1  jruoho 
    667  1.1  jruoho     return 0;
    668  1.1  jruoho }
    669  1.1  jruoho 
    670  1.1  jruoho 
    671