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