Home | History | Annotate | Line # | Download | only in compiler
aslerror.c revision 1.1.1.3.12.2
      1           1.1    jruoho /******************************************************************************
      2           1.1    jruoho  *
      3           1.1    jruoho  * Module Name: aslerror - Error handling and statistics
      4           1.1    jruoho  *
      5           1.1    jruoho  *****************************************************************************/
      6           1.1    jruoho 
      7       1.1.1.2    jruoho /*
      8  1.1.1.3.12.2  jdolecek  * Copyright (C) 2000 - 2017, Intel Corp.
      9           1.1    jruoho  * All rights reserved.
     10           1.1    jruoho  *
     11       1.1.1.2    jruoho  * Redistribution and use in source and binary forms, with or without
     12       1.1.1.2    jruoho  * modification, are permitted provided that the following conditions
     13       1.1.1.2    jruoho  * are met:
     14       1.1.1.2    jruoho  * 1. Redistributions of source code must retain the above copyright
     15       1.1.1.2    jruoho  *    notice, this list of conditions, and the following disclaimer,
     16       1.1.1.2    jruoho  *    without modification.
     17       1.1.1.2    jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18       1.1.1.2    jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     19       1.1.1.2    jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     20       1.1.1.2    jruoho  *    including a substantially similar Disclaimer requirement for further
     21       1.1.1.2    jruoho  *    binary redistribution.
     22       1.1.1.2    jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     23       1.1.1.2    jruoho  *    of any contributors may be used to endorse or promote products derived
     24       1.1.1.2    jruoho  *    from this software without specific prior written permission.
     25       1.1.1.2    jruoho  *
     26       1.1.1.2    jruoho  * Alternatively, this software may be distributed under the terms of the
     27       1.1.1.2    jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     28       1.1.1.2    jruoho  * Software Foundation.
     29       1.1.1.2    jruoho  *
     30       1.1.1.2    jruoho  * NO WARRANTY
     31       1.1.1.2    jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32       1.1.1.2    jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33       1.1.1.2    jruoho  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34       1.1.1.2    jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35       1.1.1.2    jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36       1.1.1.2    jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37       1.1.1.2    jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38       1.1.1.2    jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39       1.1.1.2    jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40       1.1.1.2    jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41       1.1.1.2    jruoho  * POSSIBILITY OF SUCH DAMAGES.
     42       1.1.1.2    jruoho  */
     43           1.1    jruoho 
     44           1.1    jruoho #include "aslcompiler.h"
     45           1.1    jruoho 
     46           1.1    jruoho #define _COMPONENT          ACPI_COMPILER
     47           1.1    jruoho         ACPI_MODULE_NAME    ("aslerror")
     48           1.1    jruoho 
     49           1.1    jruoho /* Local prototypes */
     50           1.1    jruoho 
     51           1.1    jruoho static void
     52           1.1    jruoho AeAddToErrorLog (
     53           1.1    jruoho     ASL_ERROR_MSG           *Enode);
     54           1.1    jruoho 
     55  1.1.1.3.12.2  jdolecek static BOOLEAN
     56  1.1.1.3.12.2  jdolecek AslIsExceptionExpected (
     57  1.1.1.3.12.2  jdolecek     UINT8                   Level,
     58  1.1.1.3.12.2  jdolecek     UINT16                  MessageId);
     59  1.1.1.3.12.2  jdolecek 
     60  1.1.1.3.12.2  jdolecek static BOOLEAN
     61  1.1.1.3.12.2  jdolecek AslIsExceptionDisabled (
     62  1.1.1.3.12.2  jdolecek     UINT8                   Level,
     63  1.1.1.3.12.2  jdolecek     UINT16                  MessageId);
     64  1.1.1.3.12.2  jdolecek 
     65  1.1.1.3.12.2  jdolecek static void AslInitEnode (
     66  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           **Enode,
     67  1.1.1.3.12.2  jdolecek     UINT8                   Level,
     68  1.1.1.3.12.2  jdolecek     UINT16                  MessageId,
     69  1.1.1.3.12.2  jdolecek     UINT32                  LineNumber,
     70  1.1.1.3.12.2  jdolecek     UINT32                  LogicalLineNumber,
     71  1.1.1.3.12.2  jdolecek     UINT32                  LogicalByteOffset,
     72  1.1.1.3.12.2  jdolecek     UINT32                  Column,
     73  1.1.1.3.12.2  jdolecek     char                    *Filename,
     74  1.1.1.3.12.2  jdolecek     char                    *Message,
     75  1.1.1.3.12.2  jdolecek     char                    *SourceLine,
     76  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *SubError);
     77  1.1.1.3.12.2  jdolecek 
     78  1.1.1.3.12.2  jdolecek static void
     79  1.1.1.3.12.2  jdolecek AslLogNewError (
     80  1.1.1.3.12.2  jdolecek     UINT8                   Level,
     81  1.1.1.3.12.2  jdolecek     UINT16                  MessageId,
     82  1.1.1.3.12.2  jdolecek     UINT32                  LineNumber,
     83  1.1.1.3.12.2  jdolecek     UINT32                  LogicalLineNumber,
     84  1.1.1.3.12.2  jdolecek     UINT32                  LogicalByteOffset,
     85  1.1.1.3.12.2  jdolecek     UINT32                  Column,
     86  1.1.1.3.12.2  jdolecek     char                    *Filename,
     87  1.1.1.3.12.2  jdolecek     char                    *Message,
     88  1.1.1.3.12.2  jdolecek     char                    *SourceLine,
     89  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *SubError);
     90  1.1.1.3.12.2  jdolecek 
     91  1.1.1.3.12.2  jdolecek static void
     92  1.1.1.3.12.2  jdolecek AePrintSubError (
     93  1.1.1.3.12.2  jdolecek     FILE                    *OutputFile,
     94  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *Enode);
     95  1.1.1.3.12.2  jdolecek 
     96  1.1.1.3.12.2  jdolecek 
     97  1.1.1.3.12.2  jdolecek /*******************************************************************************
     98  1.1.1.3.12.2  jdolecek  *
     99  1.1.1.3.12.2  jdolecek  * FUNCTION:    AslAbort
    100  1.1.1.3.12.2  jdolecek  *
    101  1.1.1.3.12.2  jdolecek  * PARAMETERS:  None
    102  1.1.1.3.12.2  jdolecek  *
    103  1.1.1.3.12.2  jdolecek  * RETURN:      None
    104  1.1.1.3.12.2  jdolecek  *
    105  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Dump the error log and abort the compiler. Used for serious
    106  1.1.1.3.12.2  jdolecek  *              I/O errors.
    107  1.1.1.3.12.2  jdolecek  *
    108  1.1.1.3.12.2  jdolecek  ******************************************************************************/
    109  1.1.1.3.12.2  jdolecek 
    110  1.1.1.3.12.2  jdolecek void
    111  1.1.1.3.12.2  jdolecek AslAbort (
    112  1.1.1.3.12.2  jdolecek     void)
    113  1.1.1.3.12.2  jdolecek {
    114  1.1.1.3.12.2  jdolecek 
    115  1.1.1.3.12.2  jdolecek     AePrintErrorLog (ASL_FILE_STDERR);
    116  1.1.1.3.12.2  jdolecek     if (Gbl_DebugFlag)
    117  1.1.1.3.12.2  jdolecek     {
    118  1.1.1.3.12.2  jdolecek         /* Print error summary to stdout also */
    119  1.1.1.3.12.2  jdolecek 
    120  1.1.1.3.12.2  jdolecek         AePrintErrorLog (ASL_FILE_STDOUT);
    121  1.1.1.3.12.2  jdolecek     }
    122  1.1.1.3.12.2  jdolecek 
    123  1.1.1.3.12.2  jdolecek     exit (1);
    124  1.1.1.3.12.2  jdolecek }
    125  1.1.1.3.12.2  jdolecek 
    126           1.1    jruoho 
    127  1.1.1.3.12.1       tls /*******************************************************************************
    128  1.1.1.3.12.1       tls  *
    129  1.1.1.3.12.1       tls  * FUNCTION:    AeClearErrorLog
    130  1.1.1.3.12.1       tls  *
    131  1.1.1.3.12.1       tls  * PARAMETERS:  None
    132  1.1.1.3.12.1       tls  *
    133  1.1.1.3.12.1       tls  * RETURN:      None
    134  1.1.1.3.12.1       tls  *
    135  1.1.1.3.12.1       tls  * DESCRIPTION: Empty the error list
    136  1.1.1.3.12.1       tls  *
    137  1.1.1.3.12.1       tls  ******************************************************************************/
    138  1.1.1.3.12.1       tls 
    139           1.1    jruoho void
    140           1.1    jruoho AeClearErrorLog (
    141           1.1    jruoho     void)
    142           1.1    jruoho {
    143           1.1    jruoho     ASL_ERROR_MSG           *Enode = Gbl_ErrorLog;
    144           1.1    jruoho     ASL_ERROR_MSG           *Next;
    145           1.1    jruoho 
    146  1.1.1.3.12.2  jdolecek 
    147           1.1    jruoho     /* Walk the error node list */
    148           1.1    jruoho 
    149           1.1    jruoho     while (Enode)
    150           1.1    jruoho     {
    151           1.1    jruoho         Next = Enode->Next;
    152           1.1    jruoho         ACPI_FREE (Enode);
    153           1.1    jruoho         Enode = Next;
    154           1.1    jruoho     }
    155           1.1    jruoho 
    156           1.1    jruoho     Gbl_ErrorLog = NULL;
    157           1.1    jruoho }
    158           1.1    jruoho 
    159           1.1    jruoho 
    160           1.1    jruoho /*******************************************************************************
    161           1.1    jruoho  *
    162           1.1    jruoho  * FUNCTION:    AeAddToErrorLog
    163           1.1    jruoho  *
    164           1.1    jruoho  * PARAMETERS:  Enode       - An error node to add to the log
    165           1.1    jruoho  *
    166           1.1    jruoho  * RETURN:      None
    167           1.1    jruoho  *
    168  1.1.1.3.12.1       tls  * DESCRIPTION: Add a new error node to the error log. The error log is
    169           1.1    jruoho  *              ordered by the "logical" line number (cumulative line number
    170           1.1    jruoho  *              including all include files.)
    171           1.1    jruoho  *
    172           1.1    jruoho  ******************************************************************************/
    173           1.1    jruoho 
    174           1.1    jruoho static void
    175           1.1    jruoho AeAddToErrorLog (
    176           1.1    jruoho     ASL_ERROR_MSG           *Enode)
    177           1.1    jruoho {
    178           1.1    jruoho     ASL_ERROR_MSG           *Next;
    179           1.1    jruoho     ASL_ERROR_MSG           *Prev;
    180           1.1    jruoho 
    181           1.1    jruoho 
    182           1.1    jruoho     /* If Gbl_ErrorLog is null, this is the first error node */
    183           1.1    jruoho 
    184           1.1    jruoho     if (!Gbl_ErrorLog)
    185           1.1    jruoho     {
    186           1.1    jruoho         Gbl_ErrorLog = Enode;
    187           1.1    jruoho         return;
    188           1.1    jruoho     }
    189           1.1    jruoho 
    190           1.1    jruoho     /*
    191           1.1    jruoho      * Walk error list until we find a line number greater than ours.
    192           1.1    jruoho      * List is sorted according to line number.
    193           1.1    jruoho      */
    194           1.1    jruoho     Prev = NULL;
    195           1.1    jruoho     Next = Gbl_ErrorLog;
    196           1.1    jruoho 
    197  1.1.1.3.12.2  jdolecek     while ((Next) && (Next->LogicalLineNumber <= Enode->LogicalLineNumber))
    198           1.1    jruoho     {
    199           1.1    jruoho         Prev = Next;
    200           1.1    jruoho         Next = Next->Next;
    201           1.1    jruoho     }
    202           1.1    jruoho 
    203           1.1    jruoho     /* Found our place in the list */
    204           1.1    jruoho 
    205           1.1    jruoho     Enode->Next = Next;
    206           1.1    jruoho 
    207           1.1    jruoho     if (Prev)
    208           1.1    jruoho     {
    209           1.1    jruoho         Prev->Next = Enode;
    210           1.1    jruoho     }
    211           1.1    jruoho     else
    212           1.1    jruoho     {
    213           1.1    jruoho         Gbl_ErrorLog = Enode;
    214           1.1    jruoho     }
    215           1.1    jruoho }
    216           1.1    jruoho 
    217           1.1    jruoho 
    218           1.1    jruoho /*******************************************************************************
    219           1.1    jruoho  *
    220  1.1.1.3.12.2  jdolecek  * FUNCTION:    AeDecodeErrorMessageId
    221  1.1.1.3.12.2  jdolecek  *
    222  1.1.1.3.12.2  jdolecek  * PARAMETERS:  OutputFile      - Output file
    223  1.1.1.3.12.2  jdolecek  *              Enode           - Error node to print
    224  1.1.1.3.12.2  jdolecek  *              PrematureEOF    - True = PrematureEOF has been reached
    225  1.1.1.3.12.2  jdolecek  *              Total           - Total legth of line
    226  1.1.1.3.12.2  jdolecek  *
    227  1.1.1.3.12.2  jdolecek  * RETURN:      None
    228  1.1.1.3.12.2  jdolecek  *
    229  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Print the source line of an error.
    230  1.1.1.3.12.2  jdolecek  *
    231  1.1.1.3.12.2  jdolecek  ******************************************************************************/
    232  1.1.1.3.12.2  jdolecek 
    233  1.1.1.3.12.2  jdolecek static void
    234  1.1.1.3.12.2  jdolecek AeDecodeErrorMessageId (
    235  1.1.1.3.12.2  jdolecek     FILE                    *OutputFile,
    236  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *Enode,
    237  1.1.1.3.12.2  jdolecek     BOOLEAN                 PrematureEOF,
    238  1.1.1.3.12.2  jdolecek     UINT32                  Total)
    239  1.1.1.3.12.2  jdolecek {
    240  1.1.1.3.12.2  jdolecek     UINT32                  MsgLength;
    241  1.1.1.3.12.2  jdolecek     const char              *MainMessage;
    242  1.1.1.3.12.2  jdolecek     char                    *ExtraMessage;
    243  1.1.1.3.12.2  jdolecek     UINT32                  SourceColumn;
    244  1.1.1.3.12.2  jdolecek     UINT32                  ErrorColumn;
    245  1.1.1.3.12.2  jdolecek 
    246  1.1.1.3.12.2  jdolecek 
    247  1.1.1.3.12.2  jdolecek     fprintf (OutputFile, "%s %4.4d -",
    248  1.1.1.3.12.2  jdolecek         AeDecodeExceptionLevel (Enode->Level),
    249  1.1.1.3.12.2  jdolecek         AeBuildFullExceptionCode (Enode->Level, Enode->MessageId));
    250  1.1.1.3.12.2  jdolecek 
    251  1.1.1.3.12.2  jdolecek     MainMessage = AeDecodeMessageId (Enode->MessageId);
    252  1.1.1.3.12.2  jdolecek     ExtraMessage = Enode->Message;
    253  1.1.1.3.12.2  jdolecek 
    254  1.1.1.3.12.2  jdolecek     /* If a NULL line number, just print the decoded message */
    255  1.1.1.3.12.2  jdolecek 
    256  1.1.1.3.12.2  jdolecek     if (!Enode->LineNumber)
    257  1.1.1.3.12.2  jdolecek     {
    258  1.1.1.3.12.2  jdolecek         fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage);
    259  1.1.1.3.12.2  jdolecek         return;
    260  1.1.1.3.12.2  jdolecek     }
    261  1.1.1.3.12.2  jdolecek 
    262  1.1.1.3.12.2  jdolecek     MsgLength = strlen (MainMessage);
    263  1.1.1.3.12.2  jdolecek     if (MsgLength == 0)
    264  1.1.1.3.12.2  jdolecek     {
    265  1.1.1.3.12.2  jdolecek         /* Use the secondary/extra message as main message */
    266  1.1.1.3.12.2  jdolecek 
    267  1.1.1.3.12.2  jdolecek         MainMessage = Enode->Message;
    268  1.1.1.3.12.2  jdolecek         if (!MainMessage)
    269  1.1.1.3.12.2  jdolecek         {
    270  1.1.1.3.12.2  jdolecek             MainMessage = "";
    271  1.1.1.3.12.2  jdolecek         }
    272  1.1.1.3.12.2  jdolecek 
    273  1.1.1.3.12.2  jdolecek         MsgLength = strlen (MainMessage);
    274  1.1.1.3.12.2  jdolecek         ExtraMessage = NULL;
    275  1.1.1.3.12.2  jdolecek     }
    276  1.1.1.3.12.2  jdolecek 
    277  1.1.1.3.12.2  jdolecek     if (Gbl_VerboseErrors && !PrematureEOF)
    278  1.1.1.3.12.2  jdolecek     {
    279  1.1.1.3.12.2  jdolecek         if (Total >= 256)
    280  1.1.1.3.12.2  jdolecek         {
    281  1.1.1.3.12.2  jdolecek             fprintf (OutputFile, "    %s",
    282  1.1.1.3.12.2  jdolecek                 MainMessage);
    283  1.1.1.3.12.2  jdolecek         }
    284  1.1.1.3.12.2  jdolecek         else
    285  1.1.1.3.12.2  jdolecek         {
    286  1.1.1.3.12.2  jdolecek             SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2;
    287  1.1.1.3.12.2  jdolecek             ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1;
    288  1.1.1.3.12.2  jdolecek 
    289  1.1.1.3.12.2  jdolecek             if ((MsgLength + ErrorColumn) < (SourceColumn - 1))
    290  1.1.1.3.12.2  jdolecek             {
    291  1.1.1.3.12.2  jdolecek                 fprintf (OutputFile, "%*s%s",
    292  1.1.1.3.12.2  jdolecek                     (int) ((SourceColumn - 1) - ErrorColumn),
    293  1.1.1.3.12.2  jdolecek                     MainMessage, " ^ ");
    294  1.1.1.3.12.2  jdolecek             }
    295  1.1.1.3.12.2  jdolecek             else
    296  1.1.1.3.12.2  jdolecek             {
    297  1.1.1.3.12.2  jdolecek                 fprintf (OutputFile, "%*s %s",
    298  1.1.1.3.12.2  jdolecek                     (int) ((SourceColumn - ErrorColumn) + 1), "^",
    299  1.1.1.3.12.2  jdolecek                     MainMessage);
    300  1.1.1.3.12.2  jdolecek             }
    301  1.1.1.3.12.2  jdolecek         }
    302  1.1.1.3.12.2  jdolecek     }
    303  1.1.1.3.12.2  jdolecek     else
    304  1.1.1.3.12.2  jdolecek     {
    305  1.1.1.3.12.2  jdolecek         fprintf (OutputFile, " %s", MainMessage);
    306  1.1.1.3.12.2  jdolecek     }
    307  1.1.1.3.12.2  jdolecek 
    308  1.1.1.3.12.2  jdolecek     /* Print the extra info message if present */
    309  1.1.1.3.12.2  jdolecek 
    310  1.1.1.3.12.2  jdolecek     if (ExtraMessage)
    311  1.1.1.3.12.2  jdolecek     {
    312  1.1.1.3.12.2  jdolecek         fprintf (OutputFile, " (%s)", ExtraMessage);
    313  1.1.1.3.12.2  jdolecek     }
    314  1.1.1.3.12.2  jdolecek 
    315  1.1.1.3.12.2  jdolecek     if (PrematureEOF)
    316  1.1.1.3.12.2  jdolecek     {
    317  1.1.1.3.12.2  jdolecek         fprintf (OutputFile, " and premature End-Of-File");
    318  1.1.1.3.12.2  jdolecek     }
    319  1.1.1.3.12.2  jdolecek 
    320  1.1.1.3.12.2  jdolecek     fprintf (OutputFile, "\n");
    321  1.1.1.3.12.2  jdolecek     if (Gbl_VerboseErrors && !Enode->SubError)
    322  1.1.1.3.12.2  jdolecek     {
    323  1.1.1.3.12.2  jdolecek         fprintf (OutputFile, "\n");
    324  1.1.1.3.12.2  jdolecek     }
    325  1.1.1.3.12.2  jdolecek }
    326  1.1.1.3.12.2  jdolecek 
    327  1.1.1.3.12.2  jdolecek 
    328  1.1.1.3.12.2  jdolecek /*******************************************************************************
    329  1.1.1.3.12.2  jdolecek  *
    330  1.1.1.3.12.2  jdolecek  * FUNCTION:    AePrintErrorSourceLine
    331  1.1.1.3.12.2  jdolecek  *
    332  1.1.1.3.12.2  jdolecek  * PARAMETERS:  OutputFile      - Output file
    333  1.1.1.3.12.2  jdolecek  *              Enode           - Error node to print
    334  1.1.1.3.12.2  jdolecek  *              PrematureEOF    - True = PrematureEOF has been reached
    335  1.1.1.3.12.2  jdolecek  *              Total           - amount of characters printed so far
    336  1.1.1.3.12.2  jdolecek  *
    337  1.1.1.3.12.2  jdolecek  *
    338  1.1.1.3.12.2  jdolecek  * RETURN:      Status
    339  1.1.1.3.12.2  jdolecek  *
    340  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Print the source line of an error.
    341  1.1.1.3.12.2  jdolecek  *
    342  1.1.1.3.12.2  jdolecek  ******************************************************************************/
    343  1.1.1.3.12.2  jdolecek 
    344  1.1.1.3.12.2  jdolecek static ACPI_STATUS
    345  1.1.1.3.12.2  jdolecek AePrintErrorSourceLine (
    346  1.1.1.3.12.2  jdolecek     FILE                    *OutputFile,
    347  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *Enode,
    348  1.1.1.3.12.2  jdolecek     BOOLEAN                 *PrematureEOF,
    349  1.1.1.3.12.2  jdolecek     UINT32                  *Total)
    350  1.1.1.3.12.2  jdolecek {
    351  1.1.1.3.12.2  jdolecek     UINT8                   SourceByte;
    352  1.1.1.3.12.2  jdolecek     int                     Actual;
    353  1.1.1.3.12.2  jdolecek     size_t                  RActual;
    354  1.1.1.3.12.2  jdolecek     FILE                    *SourceFile = NULL;
    355  1.1.1.3.12.2  jdolecek     long                    FileSize;
    356  1.1.1.3.12.2  jdolecek 
    357  1.1.1.3.12.2  jdolecek 
    358  1.1.1.3.12.2  jdolecek     if (!Enode->SourceLine)
    359  1.1.1.3.12.2  jdolecek     {
    360  1.1.1.3.12.2  jdolecek         /*
    361  1.1.1.3.12.2  jdolecek          * Use the merged header/source file if present, otherwise
    362  1.1.1.3.12.2  jdolecek          * use input file
    363  1.1.1.3.12.2  jdolecek          */
    364  1.1.1.3.12.2  jdolecek         SourceFile = Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle;
    365  1.1.1.3.12.2  jdolecek         if (!SourceFile)
    366  1.1.1.3.12.2  jdolecek         {
    367  1.1.1.3.12.2  jdolecek             SourceFile = Gbl_Files[ASL_FILE_INPUT].Handle;
    368  1.1.1.3.12.2  jdolecek         }
    369  1.1.1.3.12.2  jdolecek 
    370  1.1.1.3.12.2  jdolecek         if (SourceFile)
    371  1.1.1.3.12.2  jdolecek         {
    372  1.1.1.3.12.2  jdolecek             /* Determine if the error occurred at source file EOF */
    373  1.1.1.3.12.2  jdolecek 
    374  1.1.1.3.12.2  jdolecek             fseek (SourceFile, 0, SEEK_END);
    375  1.1.1.3.12.2  jdolecek             FileSize = ftell (SourceFile);
    376  1.1.1.3.12.2  jdolecek 
    377  1.1.1.3.12.2  jdolecek             if ((long) Enode->LogicalByteOffset >= FileSize)
    378  1.1.1.3.12.2  jdolecek             {
    379  1.1.1.3.12.2  jdolecek                 *PrematureEOF = TRUE;
    380  1.1.1.3.12.2  jdolecek             }
    381  1.1.1.3.12.2  jdolecek         }
    382  1.1.1.3.12.2  jdolecek         else
    383  1.1.1.3.12.2  jdolecek         {
    384  1.1.1.3.12.2  jdolecek             fprintf (OutputFile,
    385  1.1.1.3.12.2  jdolecek                 "[*** iASL: Source File Does not exist ***]\n");
    386  1.1.1.3.12.2  jdolecek             return AE_IO_ERROR;
    387  1.1.1.3.12.2  jdolecek         }
    388  1.1.1.3.12.2  jdolecek     }
    389  1.1.1.3.12.2  jdolecek 
    390  1.1.1.3.12.2  jdolecek     /* Print filename and line number if present and valid */
    391  1.1.1.3.12.2  jdolecek 
    392  1.1.1.3.12.2  jdolecek     if (Gbl_VerboseErrors)
    393  1.1.1.3.12.2  jdolecek     {
    394  1.1.1.3.12.2  jdolecek         fprintf (OutputFile, "%-8s", Enode->Filename);
    395  1.1.1.3.12.2  jdolecek 
    396  1.1.1.3.12.2  jdolecek         if (Enode->SourceLine && Enode->LineNumber)
    397  1.1.1.3.12.2  jdolecek         {
    398  1.1.1.3.12.2  jdolecek             fprintf (OutputFile, " %6u: %s",
    399  1.1.1.3.12.2  jdolecek                 Enode->LineNumber, Enode->SourceLine);
    400  1.1.1.3.12.2  jdolecek         }
    401  1.1.1.3.12.2  jdolecek         else if (Enode->LineNumber)
    402  1.1.1.3.12.2  jdolecek         {
    403  1.1.1.3.12.2  jdolecek             fprintf (OutputFile, " %6u: ", Enode->LineNumber);
    404  1.1.1.3.12.2  jdolecek 
    405  1.1.1.3.12.2  jdolecek             /*
    406  1.1.1.3.12.2  jdolecek              * If not at EOF, get the corresponding source code line
    407  1.1.1.3.12.2  jdolecek              * and display it. Don't attempt this if we have a
    408  1.1.1.3.12.2  jdolecek              * premature EOF condition.
    409  1.1.1.3.12.2  jdolecek              */
    410  1.1.1.3.12.2  jdolecek             if (*PrematureEOF)
    411  1.1.1.3.12.2  jdolecek             {
    412  1.1.1.3.12.2  jdolecek                 fprintf (OutputFile, "\n");
    413  1.1.1.3.12.2  jdolecek                 return AE_OK;
    414  1.1.1.3.12.2  jdolecek             }
    415  1.1.1.3.12.2  jdolecek             /*
    416  1.1.1.3.12.2  jdolecek              * Seek to the offset in the combined source file,
    417  1.1.1.3.12.2  jdolecek              * read the source line, and write it to the output.
    418  1.1.1.3.12.2  jdolecek              */
    419  1.1.1.3.12.2  jdolecek             Actual = fseek (SourceFile,
    420  1.1.1.3.12.2  jdolecek                 (long) Enode->LogicalByteOffset, (int) SEEK_SET);
    421  1.1.1.3.12.2  jdolecek             if (Actual)
    422  1.1.1.3.12.2  jdolecek             {
    423  1.1.1.3.12.2  jdolecek                 fprintf (OutputFile,
    424  1.1.1.3.12.2  jdolecek                     "[*** iASL: Seek error on source code temp file %s ***]",
    425  1.1.1.3.12.2  jdolecek                     Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
    426  1.1.1.3.12.2  jdolecek 
    427  1.1.1.3.12.2  jdolecek                 fprintf (OutputFile, "\n");
    428  1.1.1.3.12.2  jdolecek                 return AE_OK;
    429  1.1.1.3.12.2  jdolecek             }
    430  1.1.1.3.12.2  jdolecek             RActual = fread (&SourceByte, 1, 1, SourceFile);
    431  1.1.1.3.12.2  jdolecek             if (RActual != 1)
    432  1.1.1.3.12.2  jdolecek             {
    433  1.1.1.3.12.2  jdolecek                 fprintf (OutputFile,
    434  1.1.1.3.12.2  jdolecek                     "[*** iASL: Read error on source code temp file %s ***]",
    435  1.1.1.3.12.2  jdolecek                     Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
    436  1.1.1.3.12.2  jdolecek                 return AE_IO_ERROR;
    437  1.1.1.3.12.2  jdolecek             }
    438  1.1.1.3.12.2  jdolecek                 /* Read/write the source line, up to the maximum line length */
    439  1.1.1.3.12.2  jdolecek 
    440  1.1.1.3.12.2  jdolecek             while (RActual && SourceByte && (SourceByte != '\n'))
    441  1.1.1.3.12.2  jdolecek             {
    442  1.1.1.3.12.2  jdolecek                 if (*Total < 256)
    443  1.1.1.3.12.2  jdolecek                 {
    444  1.1.1.3.12.2  jdolecek                     /* After the max line length, we will just read the line, no write */
    445  1.1.1.3.12.2  jdolecek 
    446  1.1.1.3.12.2  jdolecek                     if (fwrite (&SourceByte, 1, 1, OutputFile) != 1)
    447  1.1.1.3.12.2  jdolecek                     {
    448  1.1.1.3.12.2  jdolecek                         printf ("[*** iASL: Write error on output file ***]\n");
    449  1.1.1.3.12.2  jdolecek                         return AE_IO_ERROR;
    450  1.1.1.3.12.2  jdolecek                     }
    451  1.1.1.3.12.2  jdolecek                 }
    452  1.1.1.3.12.2  jdolecek                 else if (*Total == 256)
    453  1.1.1.3.12.2  jdolecek                 {
    454  1.1.1.3.12.2  jdolecek                     fprintf (OutputFile,
    455  1.1.1.3.12.2  jdolecek                         "\n[*** iASL: Very long input line, message below refers to column %u ***]",
    456  1.1.1.3.12.2  jdolecek                         Enode->Column);
    457  1.1.1.3.12.2  jdolecek                 }
    458  1.1.1.3.12.2  jdolecek 
    459  1.1.1.3.12.2  jdolecek                 RActual = fread (&SourceByte, 1, 1, SourceFile);
    460  1.1.1.3.12.2  jdolecek                 if (RActual != 1)
    461  1.1.1.3.12.2  jdolecek                 {
    462  1.1.1.3.12.2  jdolecek                     fprintf (OutputFile,
    463  1.1.1.3.12.2  jdolecek                         "[*** iASL: Read error on source code temp file %s ***]",
    464  1.1.1.3.12.2  jdolecek                         Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
    465  1.1.1.3.12.2  jdolecek 
    466  1.1.1.3.12.2  jdolecek                     return AE_IO_ERROR;
    467  1.1.1.3.12.2  jdolecek                 }
    468  1.1.1.3.12.2  jdolecek                 *Total += 1;
    469  1.1.1.3.12.2  jdolecek             }
    470  1.1.1.3.12.2  jdolecek 
    471  1.1.1.3.12.2  jdolecek             fprintf (OutputFile, "\n");
    472  1.1.1.3.12.2  jdolecek         }
    473  1.1.1.3.12.2  jdolecek     }
    474  1.1.1.3.12.2  jdolecek     else
    475  1.1.1.3.12.2  jdolecek     {
    476  1.1.1.3.12.2  jdolecek         /*
    477  1.1.1.3.12.2  jdolecek          * Less verbose version of the error message, enabled via the
    478  1.1.1.3.12.2  jdolecek          * -vi switch. The format is compatible with MS Visual Studio.
    479  1.1.1.3.12.2  jdolecek          */
    480  1.1.1.3.12.2  jdolecek         fprintf (OutputFile, "%s", Enode->Filename);
    481  1.1.1.3.12.2  jdolecek 
    482  1.1.1.3.12.2  jdolecek         if (Enode->LineNumber)
    483  1.1.1.3.12.2  jdolecek         {
    484  1.1.1.3.12.2  jdolecek             fprintf (OutputFile, "(%u) : ",
    485  1.1.1.3.12.2  jdolecek                 Enode->LineNumber);
    486  1.1.1.3.12.2  jdolecek         }
    487  1.1.1.3.12.2  jdolecek     }
    488  1.1.1.3.12.2  jdolecek 
    489  1.1.1.3.12.2  jdolecek     return AE_OK;
    490  1.1.1.3.12.2  jdolecek }
    491  1.1.1.3.12.2  jdolecek 
    492  1.1.1.3.12.2  jdolecek /*******************************************************************************
    493  1.1.1.3.12.2  jdolecek  *
    494           1.1    jruoho  * FUNCTION:    AePrintException
    495           1.1    jruoho  *
    496           1.1    jruoho  * PARAMETERS:  FileId          - ID of output file
    497           1.1    jruoho  *              Enode           - Error node to print
    498           1.1    jruoho  *              Header          - Additional text before each message
    499           1.1    jruoho  *
    500           1.1    jruoho  * RETURN:      None
    501           1.1    jruoho  *
    502           1.1    jruoho  * DESCRIPTION: Print the contents of an error node.
    503           1.1    jruoho  *
    504           1.1    jruoho  * NOTE:        We don't use the FlxxxFile I/O functions here because on error
    505           1.1    jruoho  *              they abort the compiler and call this function!  Since we
    506           1.1    jruoho  *              are reporting errors here, we ignore most output errors and
    507           1.1    jruoho  *              just try to get out as much as we can.
    508           1.1    jruoho  *
    509           1.1    jruoho  ******************************************************************************/
    510           1.1    jruoho 
    511           1.1    jruoho void
    512           1.1    jruoho AePrintException (
    513           1.1    jruoho     UINT32                  FileId,
    514           1.1    jruoho     ASL_ERROR_MSG           *Enode,
    515           1.1    jruoho     char                    *Header)
    516           1.1    jruoho {
    517           1.1    jruoho     FILE                    *OutputFile;
    518       1.1.1.2    jruoho     BOOLEAN                 PrematureEOF = FALSE;
    519  1.1.1.3.12.1       tls     UINT32                  Total = 0;
    520  1.1.1.3.12.2  jdolecek     ACPI_STATUS             Status;
    521  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *Child = Enode->SubError;
    522           1.1    jruoho 
    523           1.1    jruoho 
    524           1.1    jruoho     if (Gbl_NoErrors)
    525           1.1    jruoho     {
    526           1.1    jruoho         return;
    527           1.1    jruoho     }
    528           1.1    jruoho 
    529           1.1    jruoho     /*
    530           1.1    jruoho      * Only listing files have a header, and remarks/optimizations
    531           1.1    jruoho      * are always output
    532           1.1    jruoho      */
    533           1.1    jruoho     if (!Header)
    534           1.1    jruoho     {
    535           1.1    jruoho         /* Ignore remarks if requested */
    536           1.1    jruoho 
    537           1.1    jruoho         switch (Enode->Level)
    538           1.1    jruoho         {
    539  1.1.1.3.12.1       tls         case ASL_WARNING:
    540  1.1.1.3.12.1       tls         case ASL_WARNING2:
    541  1.1.1.3.12.1       tls         case ASL_WARNING3:
    542  1.1.1.3.12.1       tls 
    543  1.1.1.3.12.1       tls             if (!Gbl_DisplayWarnings)
    544  1.1.1.3.12.1       tls             {
    545  1.1.1.3.12.1       tls                 return;
    546  1.1.1.3.12.1       tls             }
    547  1.1.1.3.12.1       tls             break;
    548  1.1.1.3.12.1       tls 
    549           1.1    jruoho         case ASL_REMARK:
    550  1.1.1.3.12.1       tls 
    551           1.1    jruoho             if (!Gbl_DisplayRemarks)
    552           1.1    jruoho             {
    553           1.1    jruoho                 return;
    554           1.1    jruoho             }
    555           1.1    jruoho             break;
    556           1.1    jruoho 
    557           1.1    jruoho         case ASL_OPTIMIZATION:
    558  1.1.1.3.12.1       tls 
    559           1.1    jruoho             if (!Gbl_DisplayOptimizations)
    560           1.1    jruoho             {
    561           1.1    jruoho                 return;
    562           1.1    jruoho             }
    563           1.1    jruoho             break;
    564           1.1    jruoho 
    565           1.1    jruoho         default:
    566  1.1.1.3.12.1       tls 
    567           1.1    jruoho             break;
    568           1.1    jruoho         }
    569           1.1    jruoho     }
    570           1.1    jruoho 
    571  1.1.1.3.12.1       tls     /* Get the various required file handles */
    572           1.1    jruoho 
    573           1.1    jruoho     OutputFile = Gbl_Files[FileId].Handle;
    574       1.1.1.2    jruoho 
    575           1.1    jruoho     if (Header)
    576           1.1    jruoho     {
    577           1.1    jruoho         fprintf (OutputFile, "%s", Header);
    578           1.1    jruoho     }
    579           1.1    jruoho 
    580  1.1.1.3.12.2  jdolecek     if (!Enode->Filename)
    581           1.1    jruoho     {
    582  1.1.1.3.12.2  jdolecek         AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total);
    583  1.1.1.3.12.2  jdolecek         return;
    584  1.1.1.3.12.2  jdolecek     }
    585           1.1    jruoho 
    586  1.1.1.3.12.2  jdolecek     Status = AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total);
    587  1.1.1.3.12.2  jdolecek     if (ACPI_FAILURE (Status))
    588  1.1.1.3.12.2  jdolecek     {
    589  1.1.1.3.12.2  jdolecek         return;
    590           1.1    jruoho     }
    591           1.1    jruoho 
    592  1.1.1.3.12.2  jdolecek     /* If a NULL message ID, just print the raw message */
    593           1.1    jruoho 
    594           1.1    jruoho     if (Enode->MessageId == 0)
    595           1.1    jruoho     {
    596           1.1    jruoho         fprintf (OutputFile, "%s\n", Enode->Message);
    597  1.1.1.3.12.2  jdolecek         return;
    598           1.1    jruoho     }
    599           1.1    jruoho 
    600  1.1.1.3.12.2  jdolecek     AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total);
    601           1.1    jruoho 
    602  1.1.1.3.12.2  jdolecek     while (Child)
    603  1.1.1.3.12.2  jdolecek     {
    604  1.1.1.3.12.2  jdolecek         fprintf (OutputFile, "\n");
    605  1.1.1.3.12.2  jdolecek         AePrintSubError (OutputFile, Child);
    606  1.1.1.3.12.2  jdolecek         Child = Child->SubError;
    607  1.1.1.3.12.2  jdolecek     }
    608  1.1.1.3.12.2  jdolecek }
    609           1.1    jruoho 
    610  1.1.1.3.12.1       tls 
    611  1.1.1.3.12.2  jdolecek /*******************************************************************************
    612  1.1.1.3.12.2  jdolecek  *
    613  1.1.1.3.12.2  jdolecek  * FUNCTION:    AePrintSubError
    614  1.1.1.3.12.2  jdolecek  *
    615  1.1.1.3.12.2  jdolecek  * PARAMETERS:  OutputFile      - Output file
    616  1.1.1.3.12.2  jdolecek  *              Enode           - Error node to print
    617  1.1.1.3.12.2  jdolecek  *
    618  1.1.1.3.12.2  jdolecek  * RETURN:      None
    619  1.1.1.3.12.2  jdolecek  *
    620  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Print the contents of an error nodes. This function is tailored
    621  1.1.1.3.12.2  jdolecek  *              to print error nodes that are SubErrors within ASL_ERROR_MSG
    622  1.1.1.3.12.2  jdolecek  *
    623  1.1.1.3.12.2  jdolecek  ******************************************************************************/
    624           1.1    jruoho 
    625  1.1.1.3.12.2  jdolecek static void
    626  1.1.1.3.12.2  jdolecek AePrintSubError (
    627  1.1.1.3.12.2  jdolecek     FILE                    *OutputFile,
    628  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *Enode)
    629  1.1.1.3.12.2  jdolecek {
    630  1.1.1.3.12.2  jdolecek     UINT32                  Total = 0;
    631  1.1.1.3.12.2  jdolecek     BOOLEAN                 PrematureEOF = FALSE;
    632  1.1.1.3.12.2  jdolecek     const char              *MainMessage;
    633           1.1    jruoho 
    634           1.1    jruoho 
    635  1.1.1.3.12.2  jdolecek     MainMessage = AeDecodeMessageId (Enode->MessageId);
    636       1.1.1.2    jruoho 
    637  1.1.1.3.12.2  jdolecek     fprintf (OutputFile, "    %s%s", MainMessage, "\n    ");
    638  1.1.1.3.12.2  jdolecek     (void) AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total);
    639  1.1.1.3.12.2  jdolecek     fprintf (OutputFile, "\n");
    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:    AePrintErrorLog
    646           1.1    jruoho  *
    647           1.1    jruoho  * PARAMETERS:  FileId           - Where to output the error log
    648           1.1    jruoho  *
    649           1.1    jruoho  * RETURN:      None
    650           1.1    jruoho  *
    651           1.1    jruoho  * DESCRIPTION: Print the entire contents of the error log
    652           1.1    jruoho  *
    653           1.1    jruoho  ******************************************************************************/
    654           1.1    jruoho 
    655           1.1    jruoho void
    656           1.1    jruoho AePrintErrorLog (
    657           1.1    jruoho     UINT32                  FileId)
    658           1.1    jruoho {
    659           1.1    jruoho     ASL_ERROR_MSG           *Enode = Gbl_ErrorLog;
    660           1.1    jruoho 
    661           1.1    jruoho 
    662           1.1    jruoho     /* Walk the error node list */
    663           1.1    jruoho 
    664           1.1    jruoho     while (Enode)
    665           1.1    jruoho     {
    666           1.1    jruoho         AePrintException (FileId, Enode, NULL);
    667           1.1    jruoho         Enode = Enode->Next;
    668           1.1    jruoho     }
    669           1.1    jruoho }
    670           1.1    jruoho 
    671           1.1    jruoho 
    672           1.1    jruoho /*******************************************************************************
    673           1.1    jruoho  *
    674  1.1.1.3.12.2  jdolecek  * FUNCTION:    AslInitEnode
    675  1.1.1.3.12.1       tls  *
    676  1.1.1.3.12.2  jdolecek  * PARAMETERS:  InputEnode          - Input Error node to initialize
    677  1.1.1.3.12.2  jdolecek  *              Level               - Seriousness (Warning/error, etc.)
    678  1.1.1.3.12.1       tls  *              MessageId           - Index into global message buffer
    679  1.1.1.3.12.2  jdolecek  *              CurrentLineNumber   - Actual file line number
    680  1.1.1.3.12.2  jdolecek  *              LogicalLineNumber   - Cumulative line number
    681  1.1.1.3.12.2  jdolecek  *              LogicalByteOffset   - Byte offset in source file
    682  1.1.1.3.12.1       tls  *              Column              - Column in current line
    683  1.1.1.3.12.1       tls  *              Filename            - source filename
    684  1.1.1.3.12.1       tls  *              ExtraMessage        - additional error message
    685  1.1.1.3.12.2  jdolecek  *              SourceLine          - Line of error source code
    686  1.1.1.3.12.2  jdolecek  *              SubError            - SubError of this InputEnode
    687  1.1.1.3.12.1       tls  *
    688  1.1.1.3.12.1       tls  * RETURN:      None
    689  1.1.1.3.12.1       tls  *
    690  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Initialize an Error node
    691  1.1.1.3.12.1       tls  *
    692  1.1.1.3.12.1       tls  ******************************************************************************/
    693  1.1.1.3.12.1       tls 
    694  1.1.1.3.12.2  jdolecek static void AslInitEnode (
    695  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           **InputEnode,
    696  1.1.1.3.12.1       tls     UINT8                   Level,
    697  1.1.1.3.12.2  jdolecek     UINT16                  MessageId,
    698  1.1.1.3.12.1       tls     UINT32                  LineNumber,
    699  1.1.1.3.12.2  jdolecek     UINT32                  LogicalLineNumber,
    700  1.1.1.3.12.2  jdolecek     UINT32                  LogicalByteOffset,
    701  1.1.1.3.12.1       tls     UINT32                  Column,
    702  1.1.1.3.12.1       tls     char                    *Filename,
    703  1.1.1.3.12.2  jdolecek     char                    *ExtraMessage,
    704  1.1.1.3.12.2  jdolecek     char                    *SourceLine,
    705  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *SubError)
    706  1.1.1.3.12.1       tls {
    707  1.1.1.3.12.1       tls     ASL_ERROR_MSG           *Enode;
    708  1.1.1.3.12.1       tls 
    709  1.1.1.3.12.1       tls 
    710  1.1.1.3.12.2  jdolecek     *InputEnode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
    711  1.1.1.3.12.2  jdolecek     Enode = *InputEnode;
    712  1.1.1.3.12.2  jdolecek     Enode->Level                = Level;
    713  1.1.1.3.12.2  jdolecek     Enode->MessageId            = MessageId;
    714  1.1.1.3.12.2  jdolecek     Enode->LineNumber           = LineNumber;
    715  1.1.1.3.12.2  jdolecek     Enode->LogicalLineNumber    = LogicalLineNumber;
    716  1.1.1.3.12.2  jdolecek     Enode->LogicalByteOffset    = LogicalByteOffset;
    717  1.1.1.3.12.2  jdolecek     Enode->Column               = Column;
    718  1.1.1.3.12.2  jdolecek     Enode->SubError             = SubError;
    719  1.1.1.3.12.2  jdolecek     Enode->Message              = NULL;
    720  1.1.1.3.12.2  jdolecek     Enode->SourceLine           = NULL;
    721  1.1.1.3.12.2  jdolecek     Enode->Filename             = NULL;
    722  1.1.1.3.12.1       tls 
    723  1.1.1.3.12.1       tls     if (ExtraMessage)
    724  1.1.1.3.12.1       tls     {
    725  1.1.1.3.12.1       tls         /* Allocate a buffer for the message and a new error node */
    726  1.1.1.3.12.1       tls 
    727  1.1.1.3.12.2  jdolecek         Enode->Message = UtLocalCacheCalloc (strlen (ExtraMessage) + 1);
    728  1.1.1.3.12.1       tls 
    729  1.1.1.3.12.1       tls         /* Keep a copy of the extra message */
    730  1.1.1.3.12.1       tls 
    731  1.1.1.3.12.2  jdolecek         strcpy (Enode->Message, ExtraMessage);
    732  1.1.1.3.12.1       tls     }
    733  1.1.1.3.12.1       tls 
    734  1.1.1.3.12.2  jdolecek     if (SourceLine)
    735  1.1.1.3.12.2  jdolecek     {
    736  1.1.1.3.12.2  jdolecek         Enode->SourceLine = UtLocalCalloc (strlen (SourceLine) + 1);
    737  1.1.1.3.12.2  jdolecek         strcpy (Enode->SourceLine, SourceLine);
    738  1.1.1.3.12.2  jdolecek     }
    739  1.1.1.3.12.1       tls 
    740  1.1.1.3.12.1       tls 
    741  1.1.1.3.12.1       tls     if (Filename)
    742  1.1.1.3.12.1       tls     {
    743  1.1.1.3.12.2  jdolecek         Enode->Filename = Filename;
    744  1.1.1.3.12.1       tls         Enode->FilenameLength = strlen (Filename);
    745  1.1.1.3.12.1       tls         if (Enode->FilenameLength < 6)
    746  1.1.1.3.12.1       tls         {
    747  1.1.1.3.12.1       tls             Enode->FilenameLength = 6;
    748  1.1.1.3.12.1       tls         }
    749  1.1.1.3.12.1       tls     }
    750  1.1.1.3.12.2  jdolecek }
    751  1.1.1.3.12.1       tls 
    752  1.1.1.3.12.1       tls 
    753  1.1.1.3.12.2  jdolecek /*******************************************************************************
    754  1.1.1.3.12.2  jdolecek  *
    755  1.1.1.3.12.2  jdolecek  * FUNCTION:    AslCommonError2
    756  1.1.1.3.12.2  jdolecek  *
    757  1.1.1.3.12.2  jdolecek  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
    758  1.1.1.3.12.2  jdolecek  *              MessageId           - Index into global message buffer
    759  1.1.1.3.12.2  jdolecek  *              LineNumber          - Actual file line number
    760  1.1.1.3.12.2  jdolecek  *              Column              - Column in current line
    761  1.1.1.3.12.2  jdolecek  *              SourceLine          - Actual source code line
    762  1.1.1.3.12.2  jdolecek  *              Filename            - source filename
    763  1.1.1.3.12.2  jdolecek  *              ExtraMessage        - additional error message
    764  1.1.1.3.12.2  jdolecek  *
    765  1.1.1.3.12.2  jdolecek  * RETURN:      None
    766  1.1.1.3.12.2  jdolecek  *
    767  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Create a new error node and add it to the error log
    768  1.1.1.3.12.2  jdolecek  *
    769  1.1.1.3.12.2  jdolecek  ******************************************************************************/
    770  1.1.1.3.12.1       tls 
    771  1.1.1.3.12.2  jdolecek void
    772  1.1.1.3.12.2  jdolecek AslCommonError2 (
    773  1.1.1.3.12.2  jdolecek     UINT8                   Level,
    774  1.1.1.3.12.2  jdolecek     UINT16                  MessageId,
    775  1.1.1.3.12.2  jdolecek     UINT32                  LineNumber,
    776  1.1.1.3.12.2  jdolecek     UINT32                  Column,
    777  1.1.1.3.12.2  jdolecek     char                    *SourceLine,
    778  1.1.1.3.12.2  jdolecek     char                    *Filename,
    779  1.1.1.3.12.2  jdolecek     char                    *ExtraMessage)
    780  1.1.1.3.12.2  jdolecek {
    781  1.1.1.3.12.2  jdolecek     AslLogNewError (Level, MessageId, LineNumber, LineNumber, 0, Column,
    782  1.1.1.3.12.2  jdolecek         Filename, ExtraMessage, SourceLine, NULL);
    783  1.1.1.3.12.1       tls }
    784  1.1.1.3.12.1       tls 
    785  1.1.1.3.12.1       tls 
    786  1.1.1.3.12.1       tls /*******************************************************************************
    787  1.1.1.3.12.1       tls  *
    788           1.1    jruoho  * FUNCTION:    AslCommonError
    789           1.1    jruoho  *
    790           1.1    jruoho  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
    791           1.1    jruoho  *              MessageId           - Index into global message buffer
    792           1.1    jruoho  *              CurrentLineNumber   - Actual file line number
    793           1.1    jruoho  *              LogicalLineNumber   - Cumulative line number
    794           1.1    jruoho  *              LogicalByteOffset   - Byte offset in source file
    795           1.1    jruoho  *              Column              - Column in current line
    796           1.1    jruoho  *              Filename            - source filename
    797           1.1    jruoho  *              ExtraMessage        - additional error message
    798           1.1    jruoho  *
    799           1.1    jruoho  * RETURN:      None
    800           1.1    jruoho  *
    801           1.1    jruoho  * DESCRIPTION: Create a new error node and add it to the error log
    802           1.1    jruoho  *
    803           1.1    jruoho  ******************************************************************************/
    804           1.1    jruoho 
    805           1.1    jruoho void
    806           1.1    jruoho AslCommonError (
    807           1.1    jruoho     UINT8                   Level,
    808  1.1.1.3.12.2  jdolecek     UINT16                  MessageId,
    809           1.1    jruoho     UINT32                  CurrentLineNumber,
    810           1.1    jruoho     UINT32                  LogicalLineNumber,
    811           1.1    jruoho     UINT32                  LogicalByteOffset,
    812           1.1    jruoho     UINT32                  Column,
    813           1.1    jruoho     char                    *Filename,
    814           1.1    jruoho     char                    *ExtraMessage)
    815           1.1    jruoho {
    816  1.1.1.3.12.2  jdolecek     AslLogNewError (Level, MessageId, CurrentLineNumber, LogicalLineNumber,
    817  1.1.1.3.12.2  jdolecek         LogicalByteOffset, Column, Filename, ExtraMessage,
    818  1.1.1.3.12.2  jdolecek         NULL, NULL);
    819  1.1.1.3.12.2  jdolecek }
    820           1.1    jruoho 
    821           1.1    jruoho 
    822  1.1.1.3.12.2  jdolecek /*******************************************************************************
    823  1.1.1.3.12.2  jdolecek  *
    824  1.1.1.3.12.2  jdolecek  * FUNCTION:    AslLogNewError
    825  1.1.1.3.12.2  jdolecek  *
    826  1.1.1.3.12.2  jdolecek  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
    827  1.1.1.3.12.2  jdolecek  *              MessageId           - Index into global message buffer
    828  1.1.1.3.12.2  jdolecek  *              CurrentLineNumber   - Actual file line number
    829  1.1.1.3.12.2  jdolecek  *              LogicalLineNumber   - Cumulative line number
    830  1.1.1.3.12.2  jdolecek  *              LogicalByteOffset   - Byte offset in source file
    831  1.1.1.3.12.2  jdolecek  *              Column              - Column in current line
    832  1.1.1.3.12.2  jdolecek  *              Filename            - source filename
    833  1.1.1.3.12.2  jdolecek  *              Message             - additional error message
    834  1.1.1.3.12.2  jdolecek  *              SourceLine          - Actual line of source code
    835  1.1.1.3.12.2  jdolecek  *              SubError            - Sub-error associated with this error
    836  1.1.1.3.12.2  jdolecek  *
    837  1.1.1.3.12.2  jdolecek  * RETURN:      None
    838  1.1.1.3.12.2  jdolecek  *
    839  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Create a new error node and add it to the error log
    840  1.1.1.3.12.2  jdolecek  *
    841  1.1.1.3.12.2  jdolecek  ******************************************************************************/
    842  1.1.1.3.12.2  jdolecek static void
    843  1.1.1.3.12.2  jdolecek AslLogNewError (
    844  1.1.1.3.12.2  jdolecek     UINT8                   Level,
    845  1.1.1.3.12.2  jdolecek     UINT16                  MessageId,
    846  1.1.1.3.12.2  jdolecek     UINT32                  LineNumber,
    847  1.1.1.3.12.2  jdolecek     UINT32                  LogicalLineNumber,
    848  1.1.1.3.12.2  jdolecek     UINT32                  LogicalByteOffset,
    849  1.1.1.3.12.2  jdolecek     UINT32                  Column,
    850  1.1.1.3.12.2  jdolecek     char                    *Filename,
    851  1.1.1.3.12.2  jdolecek     char                    *Message,
    852  1.1.1.3.12.2  jdolecek     char                    *SourceLine,
    853  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *SubError)
    854  1.1.1.3.12.2  jdolecek {
    855  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *Enode = NULL;
    856           1.1    jruoho 
    857           1.1    jruoho 
    858  1.1.1.3.12.2  jdolecek     AslInitEnode (&Enode, Level, MessageId, LineNumber, LogicalLineNumber,
    859  1.1.1.3.12.2  jdolecek         LogicalByteOffset, Column, Filename, Message, SourceLine,
    860  1.1.1.3.12.2  jdolecek         SubError);
    861           1.1    jruoho 
    862           1.1    jruoho     /* Add the new node to the error node list */
    863           1.1    jruoho 
    864           1.1    jruoho     AeAddToErrorLog (Enode);
    865           1.1    jruoho 
    866           1.1    jruoho     if (Gbl_DebugFlag)
    867           1.1    jruoho     {
    868           1.1    jruoho         /* stderr is a file, send error to it immediately */
    869           1.1    jruoho 
    870           1.1    jruoho         AePrintException (ASL_FILE_STDERR, Enode, NULL);
    871           1.1    jruoho     }
    872           1.1    jruoho 
    873           1.1    jruoho     Gbl_ExceptionCount[Level]++;
    874           1.1    jruoho     if (Gbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
    875           1.1    jruoho     {
    876           1.1    jruoho         printf ("\nMaximum error count (%u) exceeded\n", ASL_MAX_ERROR_COUNT);
    877           1.1    jruoho 
    878           1.1    jruoho         Gbl_SourceLine = 0;
    879           1.1    jruoho         Gbl_NextError = Gbl_ErrorLog;
    880           1.1    jruoho         CmCleanupAndExit ();
    881           1.1    jruoho         exit(1);
    882           1.1    jruoho     }
    883           1.1    jruoho 
    884           1.1    jruoho     return;
    885           1.1    jruoho }
    886           1.1    jruoho 
    887  1.1.1.3.12.2  jdolecek /*******************************************************************************
    888  1.1.1.3.12.2  jdolecek  *
    889  1.1.1.3.12.2  jdolecek  * FUNCTION:    AslIsExceptionIgnored
    890  1.1.1.3.12.2  jdolecek  *
    891  1.1.1.3.12.2  jdolecek  * PARAMETERS:  Level           - Seriousness (Warning/error, etc.)
    892  1.1.1.3.12.2  jdolecek  *              MessageId       - Index into global message buffer
    893  1.1.1.3.12.2  jdolecek  *
    894  1.1.1.3.12.2  jdolecek  * RETURN:      BOOLEAN
    895  1.1.1.3.12.2  jdolecek  *
    896  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Check if a particular exception is ignored. In this case it
    897  1.1.1.3.12.2  jdolecek  *              means that the exception is (expected or disabled.
    898  1.1.1.3.12.2  jdolecek  *
    899  1.1.1.3.12.2  jdolecek  ******************************************************************************/
    900  1.1.1.3.12.2  jdolecek 
    901  1.1.1.3.12.2  jdolecek BOOLEAN
    902  1.1.1.3.12.2  jdolecek AslIsExceptionIgnored (
    903  1.1.1.3.12.2  jdolecek     UINT8                   Level,
    904  1.1.1.3.12.2  jdolecek     UINT16                  MessageId)
    905  1.1.1.3.12.2  jdolecek {
    906  1.1.1.3.12.2  jdolecek     BOOLEAN                 ExceptionIgnored;
    907  1.1.1.3.12.2  jdolecek 
    908  1.1.1.3.12.2  jdolecek 
    909  1.1.1.3.12.2  jdolecek     /* Note: this allows exception to be disabled and expected */
    910  1.1.1.3.12.2  jdolecek 
    911  1.1.1.3.12.2  jdolecek     ExceptionIgnored = AslIsExceptionDisabled (Level, MessageId);
    912  1.1.1.3.12.2  jdolecek     ExceptionIgnored |= AslIsExceptionExpected (Level, MessageId);
    913  1.1.1.3.12.2  jdolecek 
    914  1.1.1.3.12.2  jdolecek     return (Gbl_AllExceptionsDisabled || ExceptionIgnored);
    915  1.1.1.3.12.2  jdolecek }
    916  1.1.1.3.12.2  jdolecek 
    917  1.1.1.3.12.2  jdolecek 
    918  1.1.1.3.12.2  jdolecek /*******************************************************************************
    919  1.1.1.3.12.2  jdolecek  *
    920  1.1.1.3.12.2  jdolecek  * FUNCTION:    AslCheckExpectException
    921  1.1.1.3.12.2  jdolecek  *
    922  1.1.1.3.12.2  jdolecek  * PARAMETERS:  none
    923  1.1.1.3.12.2  jdolecek  *
    924  1.1.1.3.12.2  jdolecek  * RETURN:      none
    925  1.1.1.3.12.2  jdolecek  *
    926  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Check the global expected messages table and raise an error
    927  1.1.1.3.12.2  jdolecek  *              for each message that has not been received.
    928  1.1.1.3.12.2  jdolecek  *
    929  1.1.1.3.12.2  jdolecek  ******************************************************************************/
    930  1.1.1.3.12.2  jdolecek 
    931  1.1.1.3.12.2  jdolecek void
    932  1.1.1.3.12.2  jdolecek AslCheckExpectedExceptions (
    933  1.1.1.3.12.2  jdolecek     void)
    934  1.1.1.3.12.2  jdolecek {
    935  1.1.1.3.12.2  jdolecek     UINT8                   i;
    936  1.1.1.3.12.2  jdolecek 
    937  1.1.1.3.12.2  jdolecek 
    938  1.1.1.3.12.2  jdolecek     for (i = 0; i < Gbl_ExpectedMessagesIndex; ++i)
    939  1.1.1.3.12.2  jdolecek     {
    940  1.1.1.3.12.2  jdolecek         if (!Gbl_ExpectedMessages[i].MessageReceived)
    941  1.1.1.3.12.2  jdolecek         {
    942  1.1.1.3.12.2  jdolecek             AslError (ASL_ERROR, ASL_MSG_EXCEPTION_NOT_RECEIVED, NULL,
    943  1.1.1.3.12.2  jdolecek                 Gbl_ExpectedMessages[i].MessageIdStr);
    944  1.1.1.3.12.2  jdolecek         }
    945  1.1.1.3.12.2  jdolecek     }
    946  1.1.1.3.12.2  jdolecek }
    947  1.1.1.3.12.2  jdolecek 
    948  1.1.1.3.12.2  jdolecek 
    949  1.1.1.3.12.2  jdolecek /*******************************************************************************
    950  1.1.1.3.12.2  jdolecek  *
    951  1.1.1.3.12.2  jdolecek  * FUNCTION:    AslExpectException
    952  1.1.1.3.12.2  jdolecek  *
    953  1.1.1.3.12.2  jdolecek  * PARAMETERS:  MessageIdString     - ID of excepted exception during compile
    954  1.1.1.3.12.2  jdolecek  *
    955  1.1.1.3.12.2  jdolecek  * RETURN:      Status
    956  1.1.1.3.12.2  jdolecek  *
    957  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Enter a message ID into the global expected messages table
    958  1.1.1.3.12.2  jdolecek  *              If these messages are not raised during the compilation, throw
    959  1.1.1.3.12.2  jdolecek  *              an error.
    960  1.1.1.3.12.2  jdolecek  *
    961  1.1.1.3.12.2  jdolecek  ******************************************************************************/
    962  1.1.1.3.12.2  jdolecek 
    963  1.1.1.3.12.2  jdolecek ACPI_STATUS
    964  1.1.1.3.12.2  jdolecek AslExpectException (
    965  1.1.1.3.12.2  jdolecek     char                    *MessageIdString)
    966  1.1.1.3.12.2  jdolecek {
    967  1.1.1.3.12.2  jdolecek     UINT32                  MessageId;
    968  1.1.1.3.12.2  jdolecek 
    969  1.1.1.3.12.2  jdolecek 
    970  1.1.1.3.12.2  jdolecek     /* Convert argument to an integer and validate it */
    971  1.1.1.3.12.2  jdolecek 
    972  1.1.1.3.12.2  jdolecek     MessageId = (UINT32) strtoul (MessageIdString, NULL, 0);
    973  1.1.1.3.12.2  jdolecek 
    974  1.1.1.3.12.2  jdolecek     if (MessageId > 6999)
    975  1.1.1.3.12.2  jdolecek     {
    976  1.1.1.3.12.2  jdolecek         printf ("\"%s\" is not a valid warning/remark/erro ID\n",
    977  1.1.1.3.12.2  jdolecek             MessageIdString);
    978  1.1.1.3.12.2  jdolecek         return (AE_BAD_PARAMETER);
    979  1.1.1.3.12.2  jdolecek     }
    980  1.1.1.3.12.2  jdolecek 
    981  1.1.1.3.12.2  jdolecek     /* Insert value into the global expected message array */
    982  1.1.1.3.12.2  jdolecek 
    983  1.1.1.3.12.2  jdolecek     if (Gbl_ExpectedMessagesIndex >= ASL_MAX_EXPECTED_MESSAGES)
    984  1.1.1.3.12.2  jdolecek     {
    985  1.1.1.3.12.2  jdolecek         printf ("Too many messages have been registered as expected (max %u)\n",
    986  1.1.1.3.12.2  jdolecek             ASL_MAX_DISABLED_MESSAGES);
    987  1.1.1.3.12.2  jdolecek         return (AE_LIMIT);
    988  1.1.1.3.12.2  jdolecek     }
    989  1.1.1.3.12.2  jdolecek 
    990  1.1.1.3.12.2  jdolecek     Gbl_ExpectedMessages[Gbl_ExpectedMessagesIndex].MessageId = MessageId;
    991  1.1.1.3.12.2  jdolecek     Gbl_ExpectedMessages[Gbl_ExpectedMessagesIndex].MessageIdStr = MessageIdString;
    992  1.1.1.3.12.2  jdolecek     Gbl_ExpectedMessages[Gbl_ExpectedMessagesIndex].MessageReceived = FALSE;
    993  1.1.1.3.12.2  jdolecek     Gbl_ExpectedMessagesIndex++;
    994  1.1.1.3.12.2  jdolecek     return (AE_OK);
    995  1.1.1.3.12.2  jdolecek }
    996  1.1.1.3.12.2  jdolecek 
    997           1.1    jruoho 
    998           1.1    jruoho /*******************************************************************************
    999           1.1    jruoho  *
   1000  1.1.1.3.12.1       tls  * FUNCTION:    AslDisableException
   1001  1.1.1.3.12.1       tls  *
   1002  1.1.1.3.12.1       tls  * PARAMETERS:  MessageIdString     - ID to be disabled
   1003  1.1.1.3.12.1       tls  *
   1004  1.1.1.3.12.1       tls  * RETURN:      Status
   1005  1.1.1.3.12.1       tls  *
   1006  1.1.1.3.12.1       tls  * DESCRIPTION: Enter a message ID into the global disabled messages table
   1007  1.1.1.3.12.1       tls  *
   1008  1.1.1.3.12.1       tls  ******************************************************************************/
   1009  1.1.1.3.12.1       tls 
   1010  1.1.1.3.12.1       tls ACPI_STATUS
   1011  1.1.1.3.12.1       tls AslDisableException (
   1012  1.1.1.3.12.1       tls     char                    *MessageIdString)
   1013  1.1.1.3.12.1       tls {
   1014  1.1.1.3.12.1       tls     UINT32                  MessageId;
   1015  1.1.1.3.12.1       tls 
   1016  1.1.1.3.12.1       tls 
   1017  1.1.1.3.12.1       tls     /* Convert argument to an integer and validate it */
   1018  1.1.1.3.12.1       tls 
   1019  1.1.1.3.12.1       tls     MessageId = (UINT32) strtoul (MessageIdString, NULL, 0);
   1020  1.1.1.3.12.1       tls 
   1021  1.1.1.3.12.2  jdolecek     if ((MessageId < 2000) || (MessageId > 6999))
   1022  1.1.1.3.12.1       tls     {
   1023  1.1.1.3.12.2  jdolecek         printf ("\"%s\" is not a valid warning/remark/error ID\n",
   1024  1.1.1.3.12.1       tls             MessageIdString);
   1025  1.1.1.3.12.1       tls         return (AE_BAD_PARAMETER);
   1026  1.1.1.3.12.1       tls     }
   1027  1.1.1.3.12.1       tls 
   1028  1.1.1.3.12.1       tls     /* Insert value into the global disabled message array */
   1029  1.1.1.3.12.1       tls 
   1030  1.1.1.3.12.1       tls     if (Gbl_DisabledMessagesIndex >= ASL_MAX_DISABLED_MESSAGES)
   1031  1.1.1.3.12.1       tls     {
   1032  1.1.1.3.12.1       tls         printf ("Too many messages have been disabled (max %u)\n",
   1033  1.1.1.3.12.1       tls             ASL_MAX_DISABLED_MESSAGES);
   1034  1.1.1.3.12.1       tls         return (AE_LIMIT);
   1035  1.1.1.3.12.1       tls     }
   1036  1.1.1.3.12.1       tls 
   1037  1.1.1.3.12.1       tls     Gbl_DisabledMessages[Gbl_DisabledMessagesIndex] = MessageId;
   1038  1.1.1.3.12.1       tls     Gbl_DisabledMessagesIndex++;
   1039  1.1.1.3.12.1       tls     return (AE_OK);
   1040  1.1.1.3.12.1       tls }
   1041  1.1.1.3.12.1       tls 
   1042  1.1.1.3.12.1       tls 
   1043  1.1.1.3.12.1       tls /*******************************************************************************
   1044  1.1.1.3.12.1       tls  *
   1045  1.1.1.3.12.1       tls  * FUNCTION:    AslIsExceptionDisabled
   1046  1.1.1.3.12.1       tls  *
   1047  1.1.1.3.12.2  jdolecek  * PARAMETERS:  Level           - Seriousness (Warning/error, etc.)
   1048  1.1.1.3.12.2  jdolecek  *              MessageId       - Index into global message buffer
   1049  1.1.1.3.12.2  jdolecek  *
   1050  1.1.1.3.12.2  jdolecek  * RETURN:      TRUE if exception/message should be ignored
   1051  1.1.1.3.12.2  jdolecek  *
   1052  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Check if the user has specified options such that this
   1053  1.1.1.3.12.2  jdolecek  *              exception should be ignored
   1054  1.1.1.3.12.2  jdolecek  *
   1055  1.1.1.3.12.2  jdolecek  ******************************************************************************/
   1056  1.1.1.3.12.2  jdolecek 
   1057  1.1.1.3.12.2  jdolecek static BOOLEAN
   1058  1.1.1.3.12.2  jdolecek AslIsExceptionExpected (
   1059  1.1.1.3.12.2  jdolecek     UINT8                   Level,
   1060  1.1.1.3.12.2  jdolecek     UINT16                  MessageId)
   1061  1.1.1.3.12.2  jdolecek {
   1062  1.1.1.3.12.2  jdolecek     UINT32                  EncodedMessageId;
   1063  1.1.1.3.12.2  jdolecek     UINT32                  i;
   1064  1.1.1.3.12.2  jdolecek 
   1065  1.1.1.3.12.2  jdolecek 
   1066  1.1.1.3.12.2  jdolecek     /* Mark this exception as received */
   1067  1.1.1.3.12.2  jdolecek 
   1068  1.1.1.3.12.2  jdolecek     EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId);
   1069  1.1.1.3.12.2  jdolecek     for (i = 0; i < Gbl_ExpectedMessagesIndex; i++)
   1070  1.1.1.3.12.2  jdolecek     {
   1071  1.1.1.3.12.2  jdolecek         /* Simple implementation via fixed array */
   1072  1.1.1.3.12.2  jdolecek 
   1073  1.1.1.3.12.2  jdolecek         if (EncodedMessageId == Gbl_ExpectedMessages[i].MessageId)
   1074  1.1.1.3.12.2  jdolecek         {
   1075  1.1.1.3.12.2  jdolecek             return (Gbl_ExpectedMessages[i].MessageReceived = TRUE);
   1076  1.1.1.3.12.2  jdolecek         }
   1077  1.1.1.3.12.2  jdolecek     }
   1078  1.1.1.3.12.2  jdolecek 
   1079  1.1.1.3.12.2  jdolecek     return (FALSE);
   1080  1.1.1.3.12.2  jdolecek }
   1081  1.1.1.3.12.2  jdolecek 
   1082  1.1.1.3.12.2  jdolecek 
   1083  1.1.1.3.12.2  jdolecek /*******************************************************************************
   1084  1.1.1.3.12.2  jdolecek  *
   1085  1.1.1.3.12.2  jdolecek  * FUNCTION:    AslIsExceptionDisabled
   1086  1.1.1.3.12.2  jdolecek  *
   1087  1.1.1.3.12.1       tls  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
   1088  1.1.1.3.12.1       tls  *              MessageId           - Index into global message buffer
   1089  1.1.1.3.12.1       tls  *
   1090  1.1.1.3.12.1       tls  * RETURN:      TRUE if exception/message should be ignored
   1091  1.1.1.3.12.1       tls  *
   1092  1.1.1.3.12.1       tls  * DESCRIPTION: Check if the user has specified options such that this
   1093  1.1.1.3.12.1       tls  *              exception should be ignored
   1094  1.1.1.3.12.1       tls  *
   1095  1.1.1.3.12.1       tls  ******************************************************************************/
   1096  1.1.1.3.12.1       tls 
   1097  1.1.1.3.12.2  jdolecek static BOOLEAN
   1098  1.1.1.3.12.1       tls AslIsExceptionDisabled (
   1099  1.1.1.3.12.1       tls     UINT8                   Level,
   1100  1.1.1.3.12.2  jdolecek     UINT16                  MessageId)
   1101  1.1.1.3.12.1       tls {
   1102  1.1.1.3.12.1       tls     UINT32                  EncodedMessageId;
   1103  1.1.1.3.12.1       tls     UINT32                  i;
   1104  1.1.1.3.12.1       tls 
   1105  1.1.1.3.12.1       tls 
   1106  1.1.1.3.12.1       tls     switch (Level)
   1107  1.1.1.3.12.1       tls     {
   1108  1.1.1.3.12.1       tls     case ASL_WARNING2:
   1109  1.1.1.3.12.1       tls     case ASL_WARNING3:
   1110  1.1.1.3.12.1       tls 
   1111  1.1.1.3.12.1       tls         /* Check for global disable via -w1/-w2/-w3 options */
   1112  1.1.1.3.12.1       tls 
   1113  1.1.1.3.12.1       tls         if (Level > Gbl_WarningLevel)
   1114  1.1.1.3.12.1       tls         {
   1115  1.1.1.3.12.1       tls             return (TRUE);
   1116  1.1.1.3.12.1       tls         }
   1117  1.1.1.3.12.1       tls         /* Fall through */
   1118  1.1.1.3.12.1       tls 
   1119  1.1.1.3.12.1       tls     case ASL_WARNING:
   1120  1.1.1.3.12.1       tls     case ASL_REMARK:
   1121  1.1.1.3.12.2  jdolecek     case ASL_ERROR:
   1122  1.1.1.3.12.1       tls         /*
   1123  1.1.1.3.12.2  jdolecek          * Ignore this error/warning/remark if it has been disabled by
   1124  1.1.1.3.12.1       tls          * the user (-vw option)
   1125  1.1.1.3.12.1       tls          */
   1126  1.1.1.3.12.2  jdolecek         EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId);
   1127  1.1.1.3.12.1       tls         for (i = 0; i < Gbl_DisabledMessagesIndex; i++)
   1128  1.1.1.3.12.1       tls         {
   1129  1.1.1.3.12.1       tls             /* Simple implementation via fixed array */
   1130  1.1.1.3.12.1       tls 
   1131  1.1.1.3.12.1       tls             if (EncodedMessageId == Gbl_DisabledMessages[i])
   1132  1.1.1.3.12.1       tls             {
   1133  1.1.1.3.12.1       tls                 return (TRUE);
   1134  1.1.1.3.12.1       tls             }
   1135  1.1.1.3.12.1       tls         }
   1136  1.1.1.3.12.1       tls         break;
   1137  1.1.1.3.12.1       tls 
   1138  1.1.1.3.12.1       tls     default:
   1139  1.1.1.3.12.1       tls         break;
   1140  1.1.1.3.12.1       tls     }
   1141  1.1.1.3.12.1       tls 
   1142  1.1.1.3.12.1       tls     return (FALSE);
   1143  1.1.1.3.12.1       tls }
   1144  1.1.1.3.12.1       tls 
   1145  1.1.1.3.12.1       tls 
   1146  1.1.1.3.12.1       tls /*******************************************************************************
   1147  1.1.1.3.12.1       tls  *
   1148  1.1.1.3.12.2  jdolecek  * FUNCTION:    AslDualParseOpError
   1149  1.1.1.3.12.2  jdolecek  *
   1150  1.1.1.3.12.2  jdolecek  * PARAMETERS:  Level           - Seriousness (Warning/error, etc.)
   1151  1.1.1.3.12.2  jdolecek  *              MainMsgId       - Index into global message buffer
   1152  1.1.1.3.12.2  jdolecek  *              MainOp          - Parse node where error happened
   1153  1.1.1.3.12.2  jdolecek  *              MainMsg         - Message pertaining to the MainOp
   1154  1.1.1.3.12.2  jdolecek  *              SubMsgId        - Index into global message buffer
   1155  1.1.1.3.12.2  jdolecek  *              SubOp           - Additional parse node for better message
   1156  1.1.1.3.12.2  jdolecek  *              SubMsg          - Message pertainint to SubOp
   1157  1.1.1.3.12.2  jdolecek  *
   1158  1.1.1.3.12.2  jdolecek  *
   1159  1.1.1.3.12.2  jdolecek  * RETURN:      None
   1160  1.1.1.3.12.2  jdolecek  *
   1161  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Main error reporting routine for the ASL compiler for error
   1162  1.1.1.3.12.2  jdolecek  *              messages that point to multiple parse objects.
   1163  1.1.1.3.12.2  jdolecek  *
   1164  1.1.1.3.12.2  jdolecek  ******************************************************************************/
   1165  1.1.1.3.12.2  jdolecek 
   1166  1.1.1.3.12.2  jdolecek void
   1167  1.1.1.3.12.2  jdolecek AslDualParseOpError (
   1168  1.1.1.3.12.2  jdolecek     UINT8                   Level,
   1169  1.1.1.3.12.2  jdolecek     UINT16                  MainMsgId,
   1170  1.1.1.3.12.2  jdolecek     ACPI_PARSE_OBJECT       *MainOp,
   1171  1.1.1.3.12.2  jdolecek     char                    *MainMsg,
   1172  1.1.1.3.12.2  jdolecek     UINT16                  SubMsgId,
   1173  1.1.1.3.12.2  jdolecek     ACPI_PARSE_OBJECT       *SubOp,
   1174  1.1.1.3.12.2  jdolecek     char                    *SubMsg)
   1175  1.1.1.3.12.2  jdolecek {
   1176  1.1.1.3.12.2  jdolecek     ASL_ERROR_MSG           *SubEnode = NULL;
   1177  1.1.1.3.12.2  jdolecek 
   1178  1.1.1.3.12.2  jdolecek 
   1179  1.1.1.3.12.2  jdolecek     /* Check if user wants to ignore this exception */
   1180  1.1.1.3.12.2  jdolecek 
   1181  1.1.1.3.12.2  jdolecek     if (AslIsExceptionIgnored (Level, MainMsgId) || !MainOp)
   1182  1.1.1.3.12.2  jdolecek     {
   1183  1.1.1.3.12.2  jdolecek         return;
   1184  1.1.1.3.12.2  jdolecek     }
   1185  1.1.1.3.12.2  jdolecek 
   1186  1.1.1.3.12.2  jdolecek     if (SubOp)
   1187  1.1.1.3.12.2  jdolecek     {
   1188  1.1.1.3.12.2  jdolecek         AslInitEnode (&SubEnode, Level, SubMsgId, SubOp->Asl.LineNumber,
   1189  1.1.1.3.12.2  jdolecek             SubOp->Asl.LogicalLineNumber, SubOp->Asl.LogicalByteOffset,
   1190  1.1.1.3.12.2  jdolecek             SubOp->Asl.Column, SubOp->Asl.Filename, SubMsg,
   1191  1.1.1.3.12.2  jdolecek             NULL, NULL);
   1192  1.1.1.3.12.2  jdolecek     }
   1193  1.1.1.3.12.2  jdolecek 
   1194  1.1.1.3.12.2  jdolecek     AslLogNewError (Level, MainMsgId, MainOp->Asl.LineNumber,
   1195  1.1.1.3.12.2  jdolecek         MainOp->Asl.LogicalLineNumber, MainOp->Asl.LogicalByteOffset,
   1196  1.1.1.3.12.2  jdolecek         MainOp->Asl.Column, MainOp->Asl.Filename, MainMsg,
   1197  1.1.1.3.12.2  jdolecek         NULL, SubEnode);
   1198  1.1.1.3.12.2  jdolecek }
   1199  1.1.1.3.12.2  jdolecek 
   1200  1.1.1.3.12.2  jdolecek 
   1201  1.1.1.3.12.2  jdolecek /*******************************************************************************
   1202  1.1.1.3.12.2  jdolecek  *
   1203           1.1    jruoho  * FUNCTION:    AslError
   1204           1.1    jruoho  *
   1205           1.1    jruoho  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
   1206           1.1    jruoho  *              MessageId           - Index into global message buffer
   1207           1.1    jruoho  *              Op                  - Parse node where error happened
   1208           1.1    jruoho  *              ExtraMessage        - additional error message
   1209           1.1    jruoho  *
   1210           1.1    jruoho  * RETURN:      None
   1211           1.1    jruoho  *
   1212           1.1    jruoho  * DESCRIPTION: Main error reporting routine for the ASL compiler (all code
   1213           1.1    jruoho  *              except the parser.)
   1214           1.1    jruoho  *
   1215           1.1    jruoho  ******************************************************************************/
   1216           1.1    jruoho 
   1217           1.1    jruoho void
   1218           1.1    jruoho AslError (
   1219           1.1    jruoho     UINT8                   Level,
   1220  1.1.1.3.12.2  jdolecek     UINT16                  MessageId,
   1221           1.1    jruoho     ACPI_PARSE_OBJECT       *Op,
   1222           1.1    jruoho     char                    *ExtraMessage)
   1223           1.1    jruoho {
   1224           1.1    jruoho     if (Op)
   1225           1.1    jruoho     {
   1226           1.1    jruoho         AslCommonError (Level, MessageId, Op->Asl.LineNumber,
   1227  1.1.1.3.12.1       tls             Op->Asl.LogicalLineNumber,
   1228  1.1.1.3.12.1       tls             Op->Asl.LogicalByteOffset,
   1229  1.1.1.3.12.1       tls             Op->Asl.Column,
   1230  1.1.1.3.12.1       tls             Op->Asl.Filename, ExtraMessage);
   1231           1.1    jruoho     }
   1232           1.1    jruoho     else
   1233           1.1    jruoho     {
   1234           1.1    jruoho         AslCommonError (Level, MessageId, 0,
   1235  1.1.1.3.12.1       tls             0, 0, 0, NULL, ExtraMessage);
   1236           1.1    jruoho     }
   1237           1.1    jruoho }
   1238           1.1    jruoho 
   1239           1.1    jruoho 
   1240           1.1    jruoho /*******************************************************************************
   1241           1.1    jruoho  *
   1242           1.1    jruoho  * FUNCTION:    AslCoreSubsystemError
   1243           1.1    jruoho  *
   1244           1.1    jruoho  * PARAMETERS:  Op                  - Parse node where error happened
   1245  1.1.1.3.12.2  jdolecek  *              Status              - The ACPICA Exception
   1246           1.1    jruoho  *              ExtraMessage        - additional error message
   1247           1.1    jruoho  *              Abort               - TRUE -> Abort compilation
   1248           1.1    jruoho  *
   1249           1.1    jruoho  * RETURN:      None
   1250           1.1    jruoho  *
   1251  1.1.1.3.12.2  jdolecek  * DESCRIPTION: Error reporting routine for exceptions returned by the ACPICA
   1252  1.1.1.3.12.2  jdolecek  *              core subsystem.
   1253           1.1    jruoho  *
   1254           1.1    jruoho  ******************************************************************************/
   1255           1.1    jruoho 
   1256           1.1    jruoho void
   1257           1.1    jruoho AslCoreSubsystemError (
   1258           1.1    jruoho     ACPI_PARSE_OBJECT       *Op,
   1259           1.1    jruoho     ACPI_STATUS             Status,
   1260           1.1    jruoho     char                    *ExtraMessage,
   1261           1.1    jruoho     BOOLEAN                 Abort)
   1262           1.1    jruoho {
   1263           1.1    jruoho 
   1264  1.1.1.3.12.1       tls     snprintf (MsgBuffer, sizeof(MsgBuffer), "%s %s", AcpiFormatException (Status), ExtraMessage);
   1265           1.1    jruoho 
   1266           1.1    jruoho     if (Op)
   1267           1.1    jruoho     {
   1268  1.1.1.3.12.2  jdolecek         AslCommonError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION,
   1269  1.1.1.3.12.2  jdolecek             Op->Asl.LineNumber,
   1270  1.1.1.3.12.2  jdolecek             Op->Asl.LogicalLineNumber,
   1271  1.1.1.3.12.2  jdolecek             Op->Asl.LogicalByteOffset,
   1272  1.1.1.3.12.2  jdolecek             Op->Asl.Column,
   1273  1.1.1.3.12.2  jdolecek             Op->Asl.Filename, MsgBuffer);
   1274           1.1    jruoho     }
   1275           1.1    jruoho     else
   1276           1.1    jruoho     {
   1277  1.1.1.3.12.2  jdolecek         AslCommonError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION,
   1278  1.1.1.3.12.2  jdolecek             0, 0, 0, 0, NULL, MsgBuffer);
   1279           1.1    jruoho     }
   1280           1.1    jruoho 
   1281           1.1    jruoho     if (Abort)
   1282           1.1    jruoho     {
   1283           1.1    jruoho         AslAbort ();
   1284           1.1    jruoho     }
   1285           1.1    jruoho }
   1286           1.1    jruoho 
   1287           1.1    jruoho 
   1288           1.1    jruoho /*******************************************************************************
   1289           1.1    jruoho  *
   1290           1.1    jruoho  * FUNCTION:    AslCompilererror
   1291           1.1    jruoho  *
   1292           1.1    jruoho  * PARAMETERS:  CompilerMessage         - Error message from the parser
   1293           1.1    jruoho  *
   1294           1.1    jruoho  * RETURN:      Status (0 for now)
   1295           1.1    jruoho  *
   1296           1.1    jruoho  * DESCRIPTION: Report an error situation discovered in a production
   1297           1.1    jruoho  *              NOTE: don't change the name of this function, it is called
   1298           1.1    jruoho  *              from the auto-generated parser.
   1299           1.1    jruoho  *
   1300           1.1    jruoho  ******************************************************************************/
   1301           1.1    jruoho 
   1302           1.1    jruoho int
   1303           1.1    jruoho AslCompilererror (
   1304       1.1.1.3    jruoho     const char              *CompilerMessage)
   1305           1.1    jruoho {
   1306           1.1    jruoho 
   1307  1.1.1.3.12.2  jdolecek     Gbl_SyntaxError++;
   1308  1.1.1.3.12.2  jdolecek 
   1309           1.1    jruoho     AslCommonError (ASL_ERROR, ASL_MSG_SYNTAX, Gbl_CurrentLineNumber,
   1310       1.1.1.3    jruoho         Gbl_LogicalLineNumber, Gbl_CurrentLineOffset,
   1311       1.1.1.3    jruoho         Gbl_CurrentColumn, Gbl_Files[ASL_FILE_INPUT].Filename,
   1312       1.1.1.3    jruoho         ACPI_CAST_PTR (char, CompilerMessage));
   1313           1.1    jruoho 
   1314  1.1.1.3.12.1       tls     return (0);
   1315           1.1    jruoho }
   1316