Home | History | Annotate | Line # | Download | only in compiler
aslerror.c revision 1.1.1.3.12.1
      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.1     tls  * Copyright (C) 2000 - 2013, 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 #define ASL_EXCEPTIONS
     45           1.1  jruoho #include "aslcompiler.h"
     46           1.1  jruoho 
     47           1.1  jruoho #define _COMPONENT          ACPI_COMPILER
     48           1.1  jruoho         ACPI_MODULE_NAME    ("aslerror")
     49           1.1  jruoho 
     50           1.1  jruoho /* Local prototypes */
     51           1.1  jruoho 
     52           1.1  jruoho static void
     53           1.1  jruoho AeAddToErrorLog (
     54           1.1  jruoho     ASL_ERROR_MSG           *Enode);
     55           1.1  jruoho 
     56           1.1  jruoho 
     57  1.1.1.3.12.1     tls /*******************************************************************************
     58  1.1.1.3.12.1     tls  *
     59  1.1.1.3.12.1     tls  * FUNCTION:    AeClearErrorLog
     60  1.1.1.3.12.1     tls  *
     61  1.1.1.3.12.1     tls  * PARAMETERS:  None
     62  1.1.1.3.12.1     tls  *
     63  1.1.1.3.12.1     tls  * RETURN:      None
     64  1.1.1.3.12.1     tls  *
     65  1.1.1.3.12.1     tls  * DESCRIPTION: Empty the error list
     66  1.1.1.3.12.1     tls  *
     67  1.1.1.3.12.1     tls  ******************************************************************************/
     68  1.1.1.3.12.1     tls 
     69           1.1  jruoho void
     70           1.1  jruoho AeClearErrorLog (
     71           1.1  jruoho     void)
     72           1.1  jruoho {
     73           1.1  jruoho     ASL_ERROR_MSG           *Enode = Gbl_ErrorLog;
     74           1.1  jruoho     ASL_ERROR_MSG           *Next;
     75           1.1  jruoho 
     76           1.1  jruoho     /* Walk the error node list */
     77           1.1  jruoho 
     78           1.1  jruoho     while (Enode)
     79           1.1  jruoho     {
     80           1.1  jruoho         Next = Enode->Next;
     81           1.1  jruoho         ACPI_FREE (Enode);
     82           1.1  jruoho         Enode = Next;
     83           1.1  jruoho     }
     84           1.1  jruoho 
     85           1.1  jruoho     Gbl_ErrorLog = NULL;
     86           1.1  jruoho }
     87           1.1  jruoho 
     88           1.1  jruoho 
     89           1.1  jruoho /*******************************************************************************
     90           1.1  jruoho  *
     91           1.1  jruoho  * FUNCTION:    AeAddToErrorLog
     92           1.1  jruoho  *
     93           1.1  jruoho  * PARAMETERS:  Enode       - An error node to add to the log
     94           1.1  jruoho  *
     95           1.1  jruoho  * RETURN:      None
     96           1.1  jruoho  *
     97  1.1.1.3.12.1     tls  * DESCRIPTION: Add a new error node to the error log. The error log is
     98           1.1  jruoho  *              ordered by the "logical" line number (cumulative line number
     99           1.1  jruoho  *              including all include files.)
    100           1.1  jruoho  *
    101           1.1  jruoho  ******************************************************************************/
    102           1.1  jruoho 
    103           1.1  jruoho static void
    104           1.1  jruoho AeAddToErrorLog (
    105           1.1  jruoho     ASL_ERROR_MSG           *Enode)
    106           1.1  jruoho {
    107           1.1  jruoho     ASL_ERROR_MSG           *Next;
    108           1.1  jruoho     ASL_ERROR_MSG           *Prev;
    109           1.1  jruoho 
    110           1.1  jruoho 
    111           1.1  jruoho     /* If Gbl_ErrorLog is null, this is the first error node */
    112           1.1  jruoho 
    113           1.1  jruoho     if (!Gbl_ErrorLog)
    114           1.1  jruoho     {
    115           1.1  jruoho         Gbl_ErrorLog = Enode;
    116           1.1  jruoho         return;
    117           1.1  jruoho     }
    118           1.1  jruoho 
    119           1.1  jruoho     /*
    120           1.1  jruoho      * Walk error list until we find a line number greater than ours.
    121           1.1  jruoho      * List is sorted according to line number.
    122           1.1  jruoho      */
    123           1.1  jruoho     Prev = NULL;
    124           1.1  jruoho     Next = Gbl_ErrorLog;
    125           1.1  jruoho 
    126           1.1  jruoho     while ((Next) &&
    127           1.1  jruoho            (Next->LogicalLineNumber <= Enode->LogicalLineNumber))
    128           1.1  jruoho     {
    129           1.1  jruoho         Prev = Next;
    130           1.1  jruoho         Next = Next->Next;
    131           1.1  jruoho     }
    132           1.1  jruoho 
    133           1.1  jruoho     /* Found our place in the list */
    134           1.1  jruoho 
    135           1.1  jruoho     Enode->Next = Next;
    136           1.1  jruoho 
    137           1.1  jruoho     if (Prev)
    138           1.1  jruoho     {
    139           1.1  jruoho         Prev->Next = Enode;
    140           1.1  jruoho     }
    141           1.1  jruoho     else
    142           1.1  jruoho     {
    143           1.1  jruoho         Gbl_ErrorLog = Enode;
    144           1.1  jruoho     }
    145           1.1  jruoho }
    146           1.1  jruoho 
    147           1.1  jruoho 
    148           1.1  jruoho /*******************************************************************************
    149           1.1  jruoho  *
    150           1.1  jruoho  * FUNCTION:    AePrintException
    151           1.1  jruoho  *
    152           1.1  jruoho  * PARAMETERS:  FileId          - ID of output file
    153           1.1  jruoho  *              Enode           - Error node to print
    154           1.1  jruoho  *              Header          - Additional text before each message
    155           1.1  jruoho  *
    156           1.1  jruoho  * RETURN:      None
    157           1.1  jruoho  *
    158           1.1  jruoho  * DESCRIPTION: Print the contents of an error node.
    159           1.1  jruoho  *
    160           1.1  jruoho  * NOTE:        We don't use the FlxxxFile I/O functions here because on error
    161           1.1  jruoho  *              they abort the compiler and call this function!  Since we
    162           1.1  jruoho  *              are reporting errors here, we ignore most output errors and
    163           1.1  jruoho  *              just try to get out as much as we can.
    164           1.1  jruoho  *
    165           1.1  jruoho  ******************************************************************************/
    166           1.1  jruoho 
    167           1.1  jruoho void
    168           1.1  jruoho AePrintException (
    169           1.1  jruoho     UINT32                  FileId,
    170           1.1  jruoho     ASL_ERROR_MSG           *Enode,
    171           1.1  jruoho     char                    *Header)
    172           1.1  jruoho {
    173           1.1  jruoho     UINT8                   SourceByte;
    174           1.1  jruoho     int                     Actual;
    175           1.1  jruoho     size_t                  RActual;
    176           1.1  jruoho     UINT32                  MsgLength;
    177           1.1  jruoho     char                    *MainMessage;
    178           1.1  jruoho     char                    *ExtraMessage;
    179           1.1  jruoho     UINT32                  SourceColumn;
    180           1.1  jruoho     UINT32                  ErrorColumn;
    181           1.1  jruoho     FILE                    *OutputFile;
    182  1.1.1.3.12.1     tls     FILE                    *SourceFile = NULL;
    183       1.1.1.2  jruoho     long                    FileSize;
    184       1.1.1.2  jruoho     BOOLEAN                 PrematureEOF = FALSE;
    185  1.1.1.3.12.1     tls     UINT32                  Total = 0;
    186           1.1  jruoho 
    187           1.1  jruoho 
    188           1.1  jruoho     if (Gbl_NoErrors)
    189           1.1  jruoho     {
    190           1.1  jruoho         return;
    191           1.1  jruoho     }
    192           1.1  jruoho 
    193           1.1  jruoho     /*
    194           1.1  jruoho      * Only listing files have a header, and remarks/optimizations
    195           1.1  jruoho      * are always output
    196           1.1  jruoho      */
    197           1.1  jruoho     if (!Header)
    198           1.1  jruoho     {
    199           1.1  jruoho         /* Ignore remarks if requested */
    200           1.1  jruoho 
    201           1.1  jruoho         switch (Enode->Level)
    202           1.1  jruoho         {
    203  1.1.1.3.12.1     tls         case ASL_WARNING:
    204  1.1.1.3.12.1     tls         case ASL_WARNING2:
    205  1.1.1.3.12.1     tls         case ASL_WARNING3:
    206  1.1.1.3.12.1     tls 
    207  1.1.1.3.12.1     tls             if (!Gbl_DisplayWarnings)
    208  1.1.1.3.12.1     tls             {
    209  1.1.1.3.12.1     tls                 return;
    210  1.1.1.3.12.1     tls             }
    211  1.1.1.3.12.1     tls             break;
    212  1.1.1.3.12.1     tls 
    213           1.1  jruoho         case ASL_REMARK:
    214  1.1.1.3.12.1     tls 
    215           1.1  jruoho             if (!Gbl_DisplayRemarks)
    216           1.1  jruoho             {
    217           1.1  jruoho                 return;
    218           1.1  jruoho             }
    219           1.1  jruoho             break;
    220           1.1  jruoho 
    221           1.1  jruoho         case ASL_OPTIMIZATION:
    222  1.1.1.3.12.1     tls 
    223           1.1  jruoho             if (!Gbl_DisplayOptimizations)
    224           1.1  jruoho             {
    225           1.1  jruoho                 return;
    226           1.1  jruoho             }
    227           1.1  jruoho             break;
    228           1.1  jruoho 
    229           1.1  jruoho         default:
    230  1.1.1.3.12.1     tls 
    231           1.1  jruoho             break;
    232           1.1  jruoho         }
    233           1.1  jruoho     }
    234           1.1  jruoho 
    235  1.1.1.3.12.1     tls     /* Get the various required file handles */
    236           1.1  jruoho 
    237           1.1  jruoho     OutputFile = Gbl_Files[FileId].Handle;
    238       1.1.1.2  jruoho 
    239  1.1.1.3.12.1     tls     if (!Enode->SourceLine)
    240       1.1.1.2  jruoho     {
    241  1.1.1.3.12.1     tls         /* Use the merged header/source file if present, otherwise use input file */
    242       1.1.1.2  jruoho 
    243  1.1.1.3.12.1     tls         SourceFile = Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle;
    244  1.1.1.3.12.1     tls         if (!SourceFile)
    245  1.1.1.3.12.1     tls         {
    246  1.1.1.3.12.1     tls             SourceFile = Gbl_Files[ASL_FILE_INPUT].Handle;
    247  1.1.1.3.12.1     tls         }
    248       1.1.1.2  jruoho 
    249  1.1.1.3.12.1     tls         if (SourceFile)
    250       1.1.1.2  jruoho         {
    251  1.1.1.3.12.1     tls             /* Determine if the error occurred at source file EOF */
    252  1.1.1.3.12.1     tls 
    253  1.1.1.3.12.1     tls             fseek (SourceFile, 0, SEEK_END);
    254  1.1.1.3.12.1     tls             FileSize = ftell (SourceFile);
    255  1.1.1.3.12.1     tls 
    256  1.1.1.3.12.1     tls             if ((long) Enode->LogicalByteOffset >= FileSize)
    257  1.1.1.3.12.1     tls             {
    258  1.1.1.3.12.1     tls                 PrematureEOF = TRUE;
    259  1.1.1.3.12.1     tls             }
    260       1.1.1.2  jruoho         }
    261       1.1.1.2  jruoho     }
    262           1.1  jruoho 
    263           1.1  jruoho     if (Header)
    264           1.1  jruoho     {
    265           1.1  jruoho         fprintf (OutputFile, "%s", Header);
    266           1.1  jruoho     }
    267           1.1  jruoho 
    268           1.1  jruoho     /* Print filename and line number if present and valid */
    269           1.1  jruoho 
    270           1.1  jruoho     if (Enode->Filename)
    271           1.1  jruoho     {
    272           1.1  jruoho         if (Gbl_VerboseErrors)
    273           1.1  jruoho         {
    274  1.1.1.3.12.1     tls             fprintf (OutputFile, "%-8s", Enode->Filename);
    275           1.1  jruoho 
    276           1.1  jruoho             if (Enode->LineNumber)
    277           1.1  jruoho             {
    278  1.1.1.3.12.1     tls                 if (Enode->SourceLine)
    279           1.1  jruoho                 {
    280  1.1.1.3.12.1     tls                     fprintf (OutputFile, " %6u: %s",
    281  1.1.1.3.12.1     tls                         Enode->LineNumber, Enode->SourceLine);
    282  1.1.1.3.12.1     tls                 }
    283  1.1.1.3.12.1     tls                 else
    284  1.1.1.3.12.1     tls                 {
    285  1.1.1.3.12.1     tls                     fprintf (OutputFile, " %6u: ", Enode->LineNumber);
    286  1.1.1.3.12.1     tls 
    287       1.1.1.2  jruoho                     /*
    288  1.1.1.3.12.1     tls                      * If not at EOF, get the corresponding source code line and
    289  1.1.1.3.12.1     tls                      * display it. Don't attempt this if we have a premature EOF
    290  1.1.1.3.12.1     tls                      * condition.
    291       1.1.1.2  jruoho                      */
    292  1.1.1.3.12.1     tls                     if (!PrematureEOF)
    293           1.1  jruoho                     {
    294  1.1.1.3.12.1     tls                         /*
    295  1.1.1.3.12.1     tls                          * Seek to the offset in the combined source file, read
    296  1.1.1.3.12.1     tls                          * the source line, and write it to the output.
    297  1.1.1.3.12.1     tls                          */
    298  1.1.1.3.12.1     tls                         Actual = fseek (SourceFile, (long) Enode->LogicalByteOffset,
    299  1.1.1.3.12.1     tls                                     (int) SEEK_SET);
    300  1.1.1.3.12.1     tls                         if (Actual)
    301       1.1.1.2  jruoho                         {
    302       1.1.1.2  jruoho                             fprintf (OutputFile,
    303  1.1.1.3.12.1     tls                                 "[*** iASL: Seek error on source code temp file %s ***]",
    304       1.1.1.2  jruoho                                 Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
    305       1.1.1.2  jruoho                         }
    306  1.1.1.3.12.1     tls                         else
    307       1.1.1.2  jruoho                         {
    308       1.1.1.2  jruoho                             RActual = fread (&SourceByte, 1, 1, SourceFile);
    309  1.1.1.3.12.1     tls                             if (RActual != 1)
    310  1.1.1.3.12.1     tls                             {
    311  1.1.1.3.12.1     tls                                 fprintf (OutputFile,
    312  1.1.1.3.12.1     tls                                     "[*** iASL: Read error on source code temp file %s ***]",
    313  1.1.1.3.12.1     tls                                     Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
    314  1.1.1.3.12.1     tls                             }
    315  1.1.1.3.12.1     tls                             else
    316  1.1.1.3.12.1     tls                             {
    317  1.1.1.3.12.1     tls                                 /* Read/write the source line, up to the maximum line length */
    318  1.1.1.3.12.1     tls 
    319  1.1.1.3.12.1     tls                                 while (RActual && SourceByte && (SourceByte != '\n'))
    320  1.1.1.3.12.1     tls                                 {
    321  1.1.1.3.12.1     tls                                     if (Total < 256)
    322  1.1.1.3.12.1     tls                                     {
    323  1.1.1.3.12.1     tls                                         /* After the max line length, we will just read the line, no write */
    324  1.1.1.3.12.1     tls 
    325  1.1.1.3.12.1     tls                                         if (fwrite (&SourceByte, 1, 1, OutputFile) != 1)
    326  1.1.1.3.12.1     tls                                         {
    327  1.1.1.3.12.1     tls                                             printf ("[*** iASL: Write error on output file ***]\n");
    328  1.1.1.3.12.1     tls                                             return;
    329  1.1.1.3.12.1     tls                                         }
    330  1.1.1.3.12.1     tls                                     }
    331  1.1.1.3.12.1     tls                                     else if (Total == 256)
    332  1.1.1.3.12.1     tls                                     {
    333  1.1.1.3.12.1     tls                                         fprintf (OutputFile,
    334  1.1.1.3.12.1     tls                                             "\n[*** iASL: Very long input line, message below refers to column %u ***]",
    335  1.1.1.3.12.1     tls                                             Enode->Column);
    336  1.1.1.3.12.1     tls                                     }
    337  1.1.1.3.12.1     tls 
    338  1.1.1.3.12.1     tls                                     RActual = fread (&SourceByte, 1, 1, SourceFile);
    339  1.1.1.3.12.1     tls                                     if (RActual != 1)
    340  1.1.1.3.12.1     tls                                     {
    341  1.1.1.3.12.1     tls                                         fprintf (OutputFile,
    342  1.1.1.3.12.1     tls                                             "[*** iASL: Read error on source code temp file %s ***]",
    343  1.1.1.3.12.1     tls                                             Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
    344  1.1.1.3.12.1     tls                                         return;
    345  1.1.1.3.12.1     tls                                     }
    346  1.1.1.3.12.1     tls                                     Total++;
    347  1.1.1.3.12.1     tls                                 }
    348  1.1.1.3.12.1     tls                             }
    349       1.1.1.2  jruoho                         }
    350           1.1  jruoho                     }
    351       1.1.1.2  jruoho 
    352  1.1.1.3.12.1     tls                     fprintf (OutputFile, "\n");
    353  1.1.1.3.12.1     tls                 }
    354           1.1  jruoho             }
    355           1.1  jruoho         }
    356           1.1  jruoho         else
    357           1.1  jruoho         {
    358  1.1.1.3.12.1     tls             /*
    359  1.1.1.3.12.1     tls              * Less verbose version of the error message, enabled via the
    360  1.1.1.3.12.1     tls              * -vi switch. The format is compatible with MS Visual Studio.
    361  1.1.1.3.12.1     tls              */
    362           1.1  jruoho             fprintf (OutputFile, "%s", Enode->Filename);
    363           1.1  jruoho 
    364           1.1  jruoho             if (Enode->LineNumber)
    365           1.1  jruoho             {
    366  1.1.1.3.12.1     tls                 fprintf (OutputFile, "(%u) : ",
    367  1.1.1.3.12.1     tls                     Enode->LineNumber);
    368           1.1  jruoho             }
    369           1.1  jruoho         }
    370           1.1  jruoho     }
    371           1.1  jruoho 
    372           1.1  jruoho     /* NULL message ID, just print the raw message */
    373           1.1  jruoho 
    374           1.1  jruoho     if (Enode->MessageId == 0)
    375           1.1  jruoho     {
    376           1.1  jruoho         fprintf (OutputFile, "%s\n", Enode->Message);
    377           1.1  jruoho     }
    378           1.1  jruoho     else
    379           1.1  jruoho     {
    380           1.1  jruoho         /* Decode the message ID */
    381           1.1  jruoho 
    382  1.1.1.3.12.1     tls         if (Gbl_VerboseErrors)
    383  1.1.1.3.12.1     tls         {
    384  1.1.1.3.12.1     tls             fprintf (OutputFile, "%s %4.4d -",
    385  1.1.1.3.12.1     tls                         AslErrorLevel[Enode->Level],
    386  1.1.1.3.12.1     tls                         Enode->MessageId + ((Enode->Level+1) * 1000));
    387  1.1.1.3.12.1     tls         }
    388  1.1.1.3.12.1     tls         else /* IDE case */
    389  1.1.1.3.12.1     tls         {
    390  1.1.1.3.12.1     tls             fprintf (OutputFile, "%s %4.4d:",
    391  1.1.1.3.12.1     tls                         AslErrorLevelIde[Enode->Level],
    392  1.1.1.3.12.1     tls                         Enode->MessageId + ((Enode->Level+1) * 1000));
    393  1.1.1.3.12.1     tls         }
    394           1.1  jruoho 
    395           1.1  jruoho         MainMessage = AslMessages[Enode->MessageId];
    396           1.1  jruoho         ExtraMessage = Enode->Message;
    397           1.1  jruoho 
    398           1.1  jruoho         if (Enode->LineNumber)
    399           1.1  jruoho         {
    400  1.1.1.3.12.1     tls             /* Main message: try to use string from AslMessages first */
    401  1.1.1.3.12.1     tls 
    402  1.1.1.3.12.1     tls             if (!MainMessage)
    403  1.1.1.3.12.1     tls             {
    404  1.1.1.3.12.1     tls                 MainMessage = "";
    405  1.1.1.3.12.1     tls             }
    406  1.1.1.3.12.1     tls 
    407           1.1  jruoho             MsgLength = strlen (MainMessage);
    408           1.1  jruoho             if (MsgLength == 0)
    409           1.1  jruoho             {
    410  1.1.1.3.12.1     tls                 /* Use the secondary/extra message as main message */
    411  1.1.1.3.12.1     tls 
    412           1.1  jruoho                 MainMessage = Enode->Message;
    413  1.1.1.3.12.1     tls                 if (!MainMessage)
    414  1.1.1.3.12.1     tls                 {
    415  1.1.1.3.12.1     tls                     MainMessage = "";
    416  1.1.1.3.12.1     tls                 }
    417           1.1  jruoho 
    418           1.1  jruoho                 MsgLength = strlen (MainMessage);
    419           1.1  jruoho                 ExtraMessage = NULL;
    420           1.1  jruoho             }
    421           1.1  jruoho 
    422       1.1.1.2  jruoho             if (Gbl_VerboseErrors && !PrematureEOF)
    423           1.1  jruoho             {
    424  1.1.1.3.12.1     tls                 if (Total >= 256)
    425           1.1  jruoho                 {
    426  1.1.1.3.12.1     tls                     fprintf (OutputFile, "    %s",
    427  1.1.1.3.12.1     tls                         MainMessage);
    428           1.1  jruoho                 }
    429           1.1  jruoho                 else
    430           1.1  jruoho                 {
    431  1.1.1.3.12.1     tls                     SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2;
    432  1.1.1.3.12.1     tls                     ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1;
    433  1.1.1.3.12.1     tls 
    434  1.1.1.3.12.1     tls                     if ((MsgLength + ErrorColumn) < (SourceColumn - 1))
    435  1.1.1.3.12.1     tls                     {
    436  1.1.1.3.12.1     tls                         fprintf (OutputFile, "%*s%s",
    437  1.1.1.3.12.1     tls                             (int) ((SourceColumn - 1) - ErrorColumn),
    438  1.1.1.3.12.1     tls                             MainMessage, " ^ ");
    439  1.1.1.3.12.1     tls                     }
    440  1.1.1.3.12.1     tls                     else
    441  1.1.1.3.12.1     tls                     {
    442  1.1.1.3.12.1     tls                         fprintf (OutputFile, "%*s %s",
    443  1.1.1.3.12.1     tls                             (int) ((SourceColumn - ErrorColumn) + 1), "^",
    444  1.1.1.3.12.1     tls                             MainMessage);
    445  1.1.1.3.12.1     tls                     }
    446           1.1  jruoho                 }
    447           1.1  jruoho             }
    448           1.1  jruoho             else
    449           1.1  jruoho             {
    450           1.1  jruoho                 fprintf (OutputFile, " %s", MainMessage);
    451           1.1  jruoho             }
    452           1.1  jruoho 
    453           1.1  jruoho             /* Print the extra info message if present */
    454           1.1  jruoho 
    455           1.1  jruoho             if (ExtraMessage)
    456           1.1  jruoho             {
    457           1.1  jruoho                 fprintf (OutputFile, " (%s)", ExtraMessage);
    458           1.1  jruoho             }
    459           1.1  jruoho 
    460       1.1.1.2  jruoho             if (PrematureEOF)
    461       1.1.1.2  jruoho             {
    462       1.1.1.2  jruoho                 fprintf (OutputFile, " and premature End-Of-File");
    463       1.1.1.2  jruoho             }
    464       1.1.1.2  jruoho 
    465           1.1  jruoho             fprintf (OutputFile, "\n");
    466           1.1  jruoho             if (Gbl_VerboseErrors)
    467           1.1  jruoho             {
    468           1.1  jruoho                 fprintf (OutputFile, "\n");
    469           1.1  jruoho             }
    470           1.1  jruoho         }
    471           1.1  jruoho         else
    472           1.1  jruoho         {
    473           1.1  jruoho             fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage);
    474           1.1  jruoho         }
    475           1.1  jruoho     }
    476           1.1  jruoho }
    477           1.1  jruoho 
    478           1.1  jruoho 
    479           1.1  jruoho /*******************************************************************************
    480           1.1  jruoho  *
    481           1.1  jruoho  * FUNCTION:    AePrintErrorLog
    482           1.1  jruoho  *
    483           1.1  jruoho  * PARAMETERS:  FileId           - Where to output the error log
    484           1.1  jruoho  *
    485           1.1  jruoho  * RETURN:      None
    486           1.1  jruoho  *
    487           1.1  jruoho  * DESCRIPTION: Print the entire contents of the error log
    488           1.1  jruoho  *
    489           1.1  jruoho  ******************************************************************************/
    490           1.1  jruoho 
    491           1.1  jruoho void
    492           1.1  jruoho AePrintErrorLog (
    493           1.1  jruoho     UINT32                  FileId)
    494           1.1  jruoho {
    495           1.1  jruoho     ASL_ERROR_MSG           *Enode = Gbl_ErrorLog;
    496           1.1  jruoho 
    497           1.1  jruoho 
    498           1.1  jruoho     /* Walk the error node list */
    499           1.1  jruoho 
    500           1.1  jruoho     while (Enode)
    501           1.1  jruoho     {
    502           1.1  jruoho         AePrintException (FileId, Enode, NULL);
    503           1.1  jruoho         Enode = Enode->Next;
    504           1.1  jruoho     }
    505           1.1  jruoho }
    506           1.1  jruoho 
    507           1.1  jruoho 
    508           1.1  jruoho /*******************************************************************************
    509           1.1  jruoho  *
    510  1.1.1.3.12.1     tls  * FUNCTION:    AslCommonError2
    511  1.1.1.3.12.1     tls  *
    512  1.1.1.3.12.1     tls  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
    513  1.1.1.3.12.1     tls  *              MessageId           - Index into global message buffer
    514  1.1.1.3.12.1     tls  *              LineNumber          - Actual file line number
    515  1.1.1.3.12.1     tls  *              Column              - Column in current line
    516  1.1.1.3.12.1     tls  *              SourceLine          - Actual source code line
    517  1.1.1.3.12.1     tls  *              Filename            - source filename
    518  1.1.1.3.12.1     tls  *              ExtraMessage        - additional error message
    519  1.1.1.3.12.1     tls  *
    520  1.1.1.3.12.1     tls  * RETURN:      None
    521  1.1.1.3.12.1     tls  *
    522  1.1.1.3.12.1     tls  * DESCRIPTION: Create a new error node and add it to the error log
    523  1.1.1.3.12.1     tls  *
    524  1.1.1.3.12.1     tls  ******************************************************************************/
    525  1.1.1.3.12.1     tls 
    526  1.1.1.3.12.1     tls void
    527  1.1.1.3.12.1     tls AslCommonError2 (
    528  1.1.1.3.12.1     tls     UINT8                   Level,
    529  1.1.1.3.12.1     tls     UINT8                   MessageId,
    530  1.1.1.3.12.1     tls     UINT32                  LineNumber,
    531  1.1.1.3.12.1     tls     UINT32                  Column,
    532  1.1.1.3.12.1     tls     char                    *SourceLine,
    533  1.1.1.3.12.1     tls     char                    *Filename,
    534  1.1.1.3.12.1     tls     char                    *ExtraMessage)
    535  1.1.1.3.12.1     tls {
    536  1.1.1.3.12.1     tls     char                    *MessageBuffer = NULL;
    537  1.1.1.3.12.1     tls     char                    *LineBuffer;
    538  1.1.1.3.12.1     tls     ASL_ERROR_MSG           *Enode;
    539  1.1.1.3.12.1     tls 
    540  1.1.1.3.12.1     tls 
    541  1.1.1.3.12.1     tls     Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
    542  1.1.1.3.12.1     tls 
    543  1.1.1.3.12.1     tls     if (ExtraMessage)
    544  1.1.1.3.12.1     tls     {
    545  1.1.1.3.12.1     tls         /* Allocate a buffer for the message and a new error node */
    546  1.1.1.3.12.1     tls 
    547  1.1.1.3.12.1     tls         MessageBuffer = UtLocalCalloc (strlen (ExtraMessage) + 1);
    548  1.1.1.3.12.1     tls 
    549  1.1.1.3.12.1     tls         /* Keep a copy of the extra message */
    550  1.1.1.3.12.1     tls 
    551  1.1.1.3.12.1     tls         ACPI_STRCPY (MessageBuffer, ExtraMessage);
    552  1.1.1.3.12.1     tls     }
    553  1.1.1.3.12.1     tls 
    554  1.1.1.3.12.1     tls     LineBuffer = UtLocalCalloc (strlen (SourceLine) + 1);
    555  1.1.1.3.12.1     tls     ACPI_STRCPY (LineBuffer, SourceLine);
    556  1.1.1.3.12.1     tls 
    557  1.1.1.3.12.1     tls     /* Initialize the error node */
    558  1.1.1.3.12.1     tls 
    559  1.1.1.3.12.1     tls     if (Filename)
    560  1.1.1.3.12.1     tls     {
    561  1.1.1.3.12.1     tls         Enode->Filename       = Filename;
    562  1.1.1.3.12.1     tls         Enode->FilenameLength = strlen (Filename);
    563  1.1.1.3.12.1     tls         if (Enode->FilenameLength < 6)
    564  1.1.1.3.12.1     tls         {
    565  1.1.1.3.12.1     tls             Enode->FilenameLength = 6;
    566  1.1.1.3.12.1     tls         }
    567  1.1.1.3.12.1     tls     }
    568  1.1.1.3.12.1     tls 
    569  1.1.1.3.12.1     tls     Enode->MessageId            = MessageId;
    570  1.1.1.3.12.1     tls     Enode->Level                = Level;
    571  1.1.1.3.12.1     tls     Enode->LineNumber           = LineNumber;
    572  1.1.1.3.12.1     tls     Enode->LogicalLineNumber    = LineNumber;
    573  1.1.1.3.12.1     tls     Enode->LogicalByteOffset    = 0;
    574  1.1.1.3.12.1     tls     Enode->Column               = Column;
    575  1.1.1.3.12.1     tls     Enode->Message              = MessageBuffer;
    576  1.1.1.3.12.1     tls     Enode->SourceLine           = LineBuffer;
    577  1.1.1.3.12.1     tls 
    578  1.1.1.3.12.1     tls     /* Add the new node to the error node list */
    579  1.1.1.3.12.1     tls 
    580  1.1.1.3.12.1     tls     AeAddToErrorLog (Enode);
    581  1.1.1.3.12.1     tls 
    582  1.1.1.3.12.1     tls     if (Gbl_DebugFlag)
    583  1.1.1.3.12.1     tls     {
    584  1.1.1.3.12.1     tls         /* stderr is a file, send error to it immediately */
    585  1.1.1.3.12.1     tls 
    586  1.1.1.3.12.1     tls         AePrintException (ASL_FILE_STDERR, Enode, NULL);
    587  1.1.1.3.12.1     tls     }
    588  1.1.1.3.12.1     tls 
    589  1.1.1.3.12.1     tls     Gbl_ExceptionCount[Level]++;
    590  1.1.1.3.12.1     tls }
    591  1.1.1.3.12.1     tls 
    592  1.1.1.3.12.1     tls 
    593  1.1.1.3.12.1     tls /*******************************************************************************
    594  1.1.1.3.12.1     tls  *
    595           1.1  jruoho  * FUNCTION:    AslCommonError
    596           1.1  jruoho  *
    597           1.1  jruoho  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
    598           1.1  jruoho  *              MessageId           - Index into global message buffer
    599           1.1  jruoho  *              CurrentLineNumber   - Actual file line number
    600           1.1  jruoho  *              LogicalLineNumber   - Cumulative line number
    601           1.1  jruoho  *              LogicalByteOffset   - Byte offset in source file
    602           1.1  jruoho  *              Column              - Column in current line
    603           1.1  jruoho  *              Filename            - source filename
    604           1.1  jruoho  *              ExtraMessage        - additional error message
    605           1.1  jruoho  *
    606           1.1  jruoho  * RETURN:      None
    607           1.1  jruoho  *
    608           1.1  jruoho  * DESCRIPTION: Create a new error node and add it to the error log
    609           1.1  jruoho  *
    610           1.1  jruoho  ******************************************************************************/
    611           1.1  jruoho 
    612           1.1  jruoho void
    613           1.1  jruoho AslCommonError (
    614           1.1  jruoho     UINT8                   Level,
    615           1.1  jruoho     UINT8                   MessageId,
    616           1.1  jruoho     UINT32                  CurrentLineNumber,
    617           1.1  jruoho     UINT32                  LogicalLineNumber,
    618           1.1  jruoho     UINT32                  LogicalByteOffset,
    619           1.1  jruoho     UINT32                  Column,
    620           1.1  jruoho     char                    *Filename,
    621           1.1  jruoho     char                    *ExtraMessage)
    622           1.1  jruoho {
    623           1.1  jruoho     char                    *MessageBuffer = NULL;
    624           1.1  jruoho     ASL_ERROR_MSG           *Enode;
    625           1.1  jruoho 
    626           1.1  jruoho 
    627           1.1  jruoho     Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
    628           1.1  jruoho 
    629           1.1  jruoho     if (ExtraMessage)
    630           1.1  jruoho     {
    631           1.1  jruoho         /* Allocate a buffer for the message and a new error node */
    632           1.1  jruoho 
    633  1.1.1.3.12.1     tls         MessageBuffer = UtLocalCalloc (strlen (ExtraMessage) + 1);
    634           1.1  jruoho 
    635           1.1  jruoho         /* Keep a copy of the extra message */
    636           1.1  jruoho 
    637           1.1  jruoho         ACPI_STRCPY (MessageBuffer, ExtraMessage);
    638           1.1  jruoho     }
    639           1.1  jruoho 
    640           1.1  jruoho     /* Initialize the error node */
    641           1.1  jruoho 
    642           1.1  jruoho     if (Filename)
    643           1.1  jruoho     {
    644           1.1  jruoho         Enode->Filename       = Filename;
    645           1.1  jruoho         Enode->FilenameLength = strlen (Filename);
    646           1.1  jruoho         if (Enode->FilenameLength < 6)
    647           1.1  jruoho         {
    648           1.1  jruoho             Enode->FilenameLength = 6;
    649           1.1  jruoho         }
    650           1.1  jruoho     }
    651           1.1  jruoho 
    652           1.1  jruoho     Enode->MessageId            = MessageId;
    653           1.1  jruoho     Enode->Level                = Level;
    654           1.1  jruoho     Enode->LineNumber           = CurrentLineNumber;
    655           1.1  jruoho     Enode->LogicalLineNumber    = LogicalLineNumber;
    656           1.1  jruoho     Enode->LogicalByteOffset    = LogicalByteOffset;
    657           1.1  jruoho     Enode->Column               = Column;
    658           1.1  jruoho     Enode->Message              = MessageBuffer;
    659  1.1.1.3.12.1     tls     Enode->SourceLine           = NULL;
    660           1.1  jruoho 
    661           1.1  jruoho     /* Add the new node to the error node list */
    662           1.1  jruoho 
    663           1.1  jruoho     AeAddToErrorLog (Enode);
    664           1.1  jruoho 
    665           1.1  jruoho     if (Gbl_DebugFlag)
    666           1.1  jruoho     {
    667           1.1  jruoho         /* stderr is a file, send error to it immediately */
    668           1.1  jruoho 
    669           1.1  jruoho         AePrintException (ASL_FILE_STDERR, Enode, NULL);
    670           1.1  jruoho     }
    671           1.1  jruoho 
    672           1.1  jruoho     Gbl_ExceptionCount[Level]++;
    673           1.1  jruoho     if (Gbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
    674           1.1  jruoho     {
    675           1.1  jruoho         printf ("\nMaximum error count (%u) exceeded\n", ASL_MAX_ERROR_COUNT);
    676           1.1  jruoho 
    677           1.1  jruoho         Gbl_SourceLine = 0;
    678           1.1  jruoho         Gbl_NextError = Gbl_ErrorLog;
    679           1.1  jruoho         CmCleanupAndExit ();
    680           1.1  jruoho         exit(1);
    681           1.1  jruoho     }
    682           1.1  jruoho 
    683           1.1  jruoho     return;
    684           1.1  jruoho }
    685           1.1  jruoho 
    686           1.1  jruoho 
    687           1.1  jruoho /*******************************************************************************
    688           1.1  jruoho  *
    689  1.1.1.3.12.1     tls  * FUNCTION:    AslDisableException
    690  1.1.1.3.12.1     tls  *
    691  1.1.1.3.12.1     tls  * PARAMETERS:  MessageIdString     - ID to be disabled
    692  1.1.1.3.12.1     tls  *
    693  1.1.1.3.12.1     tls  * RETURN:      Status
    694  1.1.1.3.12.1     tls  *
    695  1.1.1.3.12.1     tls  * DESCRIPTION: Enter a message ID into the global disabled messages table
    696  1.1.1.3.12.1     tls  *
    697  1.1.1.3.12.1     tls  ******************************************************************************/
    698  1.1.1.3.12.1     tls 
    699  1.1.1.3.12.1     tls ACPI_STATUS
    700  1.1.1.3.12.1     tls AslDisableException (
    701  1.1.1.3.12.1     tls     char                    *MessageIdString)
    702  1.1.1.3.12.1     tls {
    703  1.1.1.3.12.1     tls     UINT32                  MessageId;
    704  1.1.1.3.12.1     tls 
    705  1.1.1.3.12.1     tls 
    706  1.1.1.3.12.1     tls     /* Convert argument to an integer and validate it */
    707  1.1.1.3.12.1     tls 
    708  1.1.1.3.12.1     tls     MessageId = (UINT32) strtoul (MessageIdString, NULL, 0);
    709  1.1.1.3.12.1     tls 
    710  1.1.1.3.12.1     tls     if ((MessageId < 2000) || (MessageId > 5999))
    711  1.1.1.3.12.1     tls     {
    712  1.1.1.3.12.1     tls         printf ("\"%s\" is not a valid warning/remark ID\n",
    713  1.1.1.3.12.1     tls             MessageIdString);
    714  1.1.1.3.12.1     tls         return (AE_BAD_PARAMETER);
    715  1.1.1.3.12.1     tls     }
    716  1.1.1.3.12.1     tls 
    717  1.1.1.3.12.1     tls     /* Insert value into the global disabled message array */
    718  1.1.1.3.12.1     tls 
    719  1.1.1.3.12.1     tls     if (Gbl_DisabledMessagesIndex >= ASL_MAX_DISABLED_MESSAGES)
    720  1.1.1.3.12.1     tls     {
    721  1.1.1.3.12.1     tls         printf ("Too many messages have been disabled (max %u)\n",
    722  1.1.1.3.12.1     tls             ASL_MAX_DISABLED_MESSAGES);
    723  1.1.1.3.12.1     tls         return (AE_LIMIT);
    724  1.1.1.3.12.1     tls     }
    725  1.1.1.3.12.1     tls 
    726  1.1.1.3.12.1     tls     Gbl_DisabledMessages[Gbl_DisabledMessagesIndex] = MessageId;
    727  1.1.1.3.12.1     tls     Gbl_DisabledMessagesIndex++;
    728  1.1.1.3.12.1     tls     return (AE_OK);
    729  1.1.1.3.12.1     tls }
    730  1.1.1.3.12.1     tls 
    731  1.1.1.3.12.1     tls 
    732  1.1.1.3.12.1     tls /*******************************************************************************
    733  1.1.1.3.12.1     tls  *
    734  1.1.1.3.12.1     tls  * FUNCTION:    AslIsExceptionDisabled
    735  1.1.1.3.12.1     tls  *
    736  1.1.1.3.12.1     tls  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
    737  1.1.1.3.12.1     tls  *              MessageId           - Index into global message buffer
    738  1.1.1.3.12.1     tls  *
    739  1.1.1.3.12.1     tls  * RETURN:      TRUE if exception/message should be ignored
    740  1.1.1.3.12.1     tls  *
    741  1.1.1.3.12.1     tls  * DESCRIPTION: Check if the user has specified options such that this
    742  1.1.1.3.12.1     tls  *              exception should be ignored
    743  1.1.1.3.12.1     tls  *
    744  1.1.1.3.12.1     tls  ******************************************************************************/
    745  1.1.1.3.12.1     tls 
    746  1.1.1.3.12.1     tls BOOLEAN
    747  1.1.1.3.12.1     tls AslIsExceptionDisabled (
    748  1.1.1.3.12.1     tls     UINT8                   Level,
    749  1.1.1.3.12.1     tls     UINT8                   MessageId)
    750  1.1.1.3.12.1     tls {
    751  1.1.1.3.12.1     tls     UINT32                  EncodedMessageId;
    752  1.1.1.3.12.1     tls     UINT32                  i;
    753  1.1.1.3.12.1     tls 
    754  1.1.1.3.12.1     tls 
    755  1.1.1.3.12.1     tls     switch (Level)
    756  1.1.1.3.12.1     tls     {
    757  1.1.1.3.12.1     tls     case ASL_WARNING2:
    758  1.1.1.3.12.1     tls     case ASL_WARNING3:
    759  1.1.1.3.12.1     tls 
    760  1.1.1.3.12.1     tls         /* Check for global disable via -w1/-w2/-w3 options */
    761  1.1.1.3.12.1     tls 
    762  1.1.1.3.12.1     tls         if (Level > Gbl_WarningLevel)
    763  1.1.1.3.12.1     tls         {
    764  1.1.1.3.12.1     tls             return (TRUE);
    765  1.1.1.3.12.1     tls         }
    766  1.1.1.3.12.1     tls         /* Fall through */
    767  1.1.1.3.12.1     tls 
    768  1.1.1.3.12.1     tls     case ASL_WARNING:
    769  1.1.1.3.12.1     tls     case ASL_REMARK:
    770  1.1.1.3.12.1     tls         /*
    771  1.1.1.3.12.1     tls          * Ignore this warning/remark if it has been disabled by
    772  1.1.1.3.12.1     tls          * the user (-vw option)
    773  1.1.1.3.12.1     tls          */
    774  1.1.1.3.12.1     tls         EncodedMessageId = MessageId + ((Level + 1) * 1000);
    775  1.1.1.3.12.1     tls         for (i = 0; i < Gbl_DisabledMessagesIndex; i++)
    776  1.1.1.3.12.1     tls         {
    777  1.1.1.3.12.1     tls             /* Simple implementation via fixed array */
    778  1.1.1.3.12.1     tls 
    779  1.1.1.3.12.1     tls             if (EncodedMessageId == Gbl_DisabledMessages[i])
    780  1.1.1.3.12.1     tls             {
    781  1.1.1.3.12.1     tls                 return (TRUE);
    782  1.1.1.3.12.1     tls             }
    783  1.1.1.3.12.1     tls         }
    784  1.1.1.3.12.1     tls         break;
    785  1.1.1.3.12.1     tls 
    786  1.1.1.3.12.1     tls     default:
    787  1.1.1.3.12.1     tls         break;
    788  1.1.1.3.12.1     tls     }
    789  1.1.1.3.12.1     tls 
    790  1.1.1.3.12.1     tls     return (FALSE);
    791  1.1.1.3.12.1     tls }
    792  1.1.1.3.12.1     tls 
    793  1.1.1.3.12.1     tls 
    794  1.1.1.3.12.1     tls /*******************************************************************************
    795  1.1.1.3.12.1     tls  *
    796           1.1  jruoho  * FUNCTION:    AslError
    797           1.1  jruoho  *
    798           1.1  jruoho  * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
    799           1.1  jruoho  *              MessageId           - Index into global message buffer
    800           1.1  jruoho  *              Op                  - Parse node where error happened
    801           1.1  jruoho  *              ExtraMessage        - additional error message
    802           1.1  jruoho  *
    803           1.1  jruoho  * RETURN:      None
    804           1.1  jruoho  *
    805           1.1  jruoho  * DESCRIPTION: Main error reporting routine for the ASL compiler (all code
    806           1.1  jruoho  *              except the parser.)
    807           1.1  jruoho  *
    808           1.1  jruoho  ******************************************************************************/
    809           1.1  jruoho 
    810           1.1  jruoho void
    811           1.1  jruoho AslError (
    812           1.1  jruoho     UINT8                   Level,
    813           1.1  jruoho     UINT8                   MessageId,
    814           1.1  jruoho     ACPI_PARSE_OBJECT       *Op,
    815           1.1  jruoho     char                    *ExtraMessage)
    816           1.1  jruoho {
    817           1.1  jruoho 
    818  1.1.1.3.12.1     tls     /* Check if user wants to ignore this exception */
    819           1.1  jruoho 
    820  1.1.1.3.12.1     tls     if (AslIsExceptionDisabled (Level, MessageId))
    821  1.1.1.3.12.1     tls     {
    822  1.1.1.3.12.1     tls         return;
    823           1.1  jruoho     }
    824           1.1  jruoho 
    825           1.1  jruoho     if (Op)
    826           1.1  jruoho     {
    827           1.1  jruoho         AslCommonError (Level, MessageId, Op->Asl.LineNumber,
    828  1.1.1.3.12.1     tls             Op->Asl.LogicalLineNumber,
    829  1.1.1.3.12.1     tls             Op->Asl.LogicalByteOffset,
    830  1.1.1.3.12.1     tls             Op->Asl.Column,
    831  1.1.1.3.12.1     tls             Op->Asl.Filename, ExtraMessage);
    832           1.1  jruoho     }
    833           1.1  jruoho     else
    834           1.1  jruoho     {
    835           1.1  jruoho         AslCommonError (Level, MessageId, 0,
    836  1.1.1.3.12.1     tls             0, 0, 0, NULL, ExtraMessage);
    837           1.1  jruoho     }
    838           1.1  jruoho }
    839           1.1  jruoho 
    840           1.1  jruoho 
    841           1.1  jruoho /*******************************************************************************
    842           1.1  jruoho  *
    843           1.1  jruoho  * FUNCTION:    AslCoreSubsystemError
    844           1.1  jruoho  *
    845           1.1  jruoho  * PARAMETERS:  Op                  - Parse node where error happened
    846           1.1  jruoho  *              Status              - The ACPI CA Exception
    847           1.1  jruoho  *              ExtraMessage        - additional error message
    848           1.1  jruoho  *              Abort               - TRUE -> Abort compilation
    849           1.1  jruoho  *
    850           1.1  jruoho  * RETURN:      None
    851           1.1  jruoho  *
    852           1.1  jruoho  * DESCRIPTION: Error reporting routine for exceptions returned by the ACPI
    853           1.1  jruoho  *              CA core subsystem.
    854           1.1  jruoho  *
    855           1.1  jruoho  ******************************************************************************/
    856           1.1  jruoho 
    857           1.1  jruoho void
    858           1.1  jruoho AslCoreSubsystemError (
    859           1.1  jruoho     ACPI_PARSE_OBJECT       *Op,
    860           1.1  jruoho     ACPI_STATUS             Status,
    861           1.1  jruoho     char                    *ExtraMessage,
    862           1.1  jruoho     BOOLEAN                 Abort)
    863           1.1  jruoho {
    864           1.1  jruoho 
    865  1.1.1.3.12.1     tls     snprintf (MsgBuffer, sizeof(MsgBuffer), "%s %s", AcpiFormatException (Status), ExtraMessage);
    866           1.1  jruoho 
    867           1.1  jruoho     if (Op)
    868           1.1  jruoho     {
    869           1.1  jruoho         AslCommonError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, Op->Asl.LineNumber,
    870           1.1  jruoho                         Op->Asl.LogicalLineNumber,
    871           1.1  jruoho                         Op->Asl.LogicalByteOffset,
    872           1.1  jruoho                         Op->Asl.Column,
    873           1.1  jruoho                         Op->Asl.Filename, MsgBuffer);
    874           1.1  jruoho     }
    875           1.1  jruoho     else
    876           1.1  jruoho     {
    877           1.1  jruoho         AslCommonError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, 0,
    878           1.1  jruoho                         0, 0, 0, NULL, MsgBuffer);
    879           1.1  jruoho     }
    880           1.1  jruoho 
    881           1.1  jruoho     if (Abort)
    882           1.1  jruoho     {
    883           1.1  jruoho         AslAbort ();
    884           1.1  jruoho     }
    885           1.1  jruoho }
    886           1.1  jruoho 
    887           1.1  jruoho 
    888           1.1  jruoho /*******************************************************************************
    889           1.1  jruoho  *
    890           1.1  jruoho  * FUNCTION:    AslCompilererror
    891           1.1  jruoho  *
    892           1.1  jruoho  * PARAMETERS:  CompilerMessage         - Error message from the parser
    893           1.1  jruoho  *
    894           1.1  jruoho  * RETURN:      Status (0 for now)
    895           1.1  jruoho  *
    896           1.1  jruoho  * DESCRIPTION: Report an error situation discovered in a production
    897           1.1  jruoho  *              NOTE: don't change the name of this function, it is called
    898           1.1  jruoho  *              from the auto-generated parser.
    899           1.1  jruoho  *
    900           1.1  jruoho  ******************************************************************************/
    901           1.1  jruoho 
    902           1.1  jruoho int
    903           1.1  jruoho AslCompilererror (
    904       1.1.1.3  jruoho     const char              *CompilerMessage)
    905           1.1  jruoho {
    906           1.1  jruoho 
    907           1.1  jruoho     AslCommonError (ASL_ERROR, ASL_MSG_SYNTAX, Gbl_CurrentLineNumber,
    908       1.1.1.3  jruoho         Gbl_LogicalLineNumber, Gbl_CurrentLineOffset,
    909       1.1.1.3  jruoho         Gbl_CurrentColumn, Gbl_Files[ASL_FILE_INPUT].Filename,
    910       1.1.1.3  jruoho         ACPI_CAST_PTR (char, CompilerMessage));
    911           1.1  jruoho 
    912  1.1.1.3.12.1     tls     return (0);
    913           1.1  jruoho }
    914