Subversion Repositories Kolibri OS

Rev

Rev 1498 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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