aslstartup.c revision 241973
1227064Sbz/****************************************************************************** 2250340Sdavidcs * 3227064Sbz * Module Name: aslstartup - Compiler startup routines, called from main 4227064Sbz * 5227064Sbz *****************************************************************************/ 6227064Sbz 7227064Sbz/* 8227064Sbz * Copyright (C) 2000 - 2012, Intel Corp. 9227064Sbz * All rights reserved. 10227064Sbz * 11227064Sbz * Redistribution and use in source and binary forms, with or without 12227064Sbz * modification, are permitted provided that the following conditions 13227064Sbz * are met: 14227064Sbz * 1. Redistributions of source code must retain the above copyright 15227064Sbz * notice, this list of conditions, and the following disclaimer, 16227064Sbz * without modification. 17227064Sbz * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18227064Sbz * substantially similar to the "NO WARRANTY" disclaimer below 19227064Sbz * ("Disclaimer") and any redistribution must be conditioned upon 20227064Sbz * including a substantially similar Disclaimer requirement for further 21227064Sbz * binary redistribution. 22227064Sbz * 3. Neither the names of the above-listed copyright holders nor the names 23227064Sbz * of any contributors may be used to endorse or promote products derived 24227064Sbz * from this software without specific prior written permission. 25227064Sbz * 26227064Sbz * Alternatively, this software may be distributed under the terms of the 27227064Sbz * GNU General Public License ("GPL") version 2 as published by the Free 28227064Sbz * Software Foundation. 29227064Sbz * 30227064Sbz * NO WARRANTY 31227064Sbz * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32227064Sbz * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33227064Sbz * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34227064Sbz * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35227064Sbz * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36227064Sbz * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37227064Sbz * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38227064Sbz * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39227064Sbz * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40227064Sbz * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41227064Sbz * POSSIBILITY OF SUCH DAMAGES. 42227064Sbz */ 43227064Sbz 44227064Sbz 45227064Sbz#include <contrib/dev/acpica/compiler/aslcompiler.h> 46227064Sbz#include <contrib/dev/acpica/include/actables.h> 47227064Sbz#include <contrib/dev/acpica/include/acapps.h> 48227064Sbz 49227064Sbz#define _COMPONENT ACPI_COMPILER 50227064Sbz ACPI_MODULE_NAME ("aslstartup") 51227064Sbz 52227064Sbz 53227064Sbz#define ASL_MAX_FILES 256 54227064Sbzstatic char *FileList[ASL_MAX_FILES]; 55227064Sbzstatic BOOLEAN AslToFile = TRUE; 56227064Sbz 57227064Sbz 58227064Sbz/* Local prototypes */ 59227064Sbz 60227064Sbzstatic char ** 61227064SbzAsDoWildcard ( 62227064Sbz char *DirectoryPathname, 63227064Sbz char *FileSpecifier); 64227064Sbz 65227064Sbzstatic UINT8 66227064SbzAslDetectSourceFileType ( 67227064Sbz ASL_FILE_INFO *Info); 68227064Sbz 69227064Sbz 70227064Sbz/******************************************************************************* 71227064Sbz * 72227064Sbz * FUNCTION: AslInitializeGlobals 73227064Sbz * 74227064Sbz * PARAMETERS: None 75227064Sbz * 76227064Sbz * RETURN: None 77227064Sbz * 78227064Sbz * DESCRIPTION: Re-initialize globals needed to restart the compiler. This 79227064Sbz * allows multiple files to be disassembled and/or compiled. 80227064Sbz * 81227064Sbz ******************************************************************************/ 82227064Sbz 83227064Sbzvoid 84227064SbzAslInitializeGlobals ( 85227064Sbz void) 86227064Sbz{ 87227064Sbz UINT32 i; 88227064Sbz 89227064Sbz 90227064Sbz /* Init compiler globals */ 91227064Sbz 92227064Sbz Gbl_CurrentColumn = 0; 93227064Sbz Gbl_CurrentLineNumber = 1; 94227064Sbz Gbl_LogicalLineNumber = 1; 95227064Sbz Gbl_CurrentLineOffset = 0; 96227064Sbz Gbl_InputFieldCount = 0; 97227064Sbz Gbl_InputByteCount = 0; 98227064Sbz Gbl_NsLookupCount = 0; 99227064Sbz Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 100227064Sbz 101227064Sbz Gbl_ErrorLog = NULL; 102227064Sbz Gbl_NextError = NULL; 103227064Sbz Gbl_Signature = NULL; 104227064Sbz Gbl_FileType = 0; 105227064Sbz 106227064Sbz TotalExecutableOpcodes = 0; 107227064Sbz TotalNamedObjects = 0; 108227064Sbz TotalKeywords = 0; 109227064Sbz TotalParseNodes = 0; 110227064Sbz TotalMethods = 0; 111227064Sbz TotalAllocations = 0; 112227064Sbz TotalAllocated = 0; 113227064Sbz TotalFolds = 0; 114227064Sbz 115227064Sbz AslGbl_NextEvent = 0; 116227064Sbz for (i = 0; i < ASL_NUM_REPORT_LEVELS; i++) 117227064Sbz { 118227064Sbz Gbl_ExceptionCount[i] = 0; 119227064Sbz } 120227064Sbz 121227064Sbz for (i = ASL_FILE_INPUT; i <= ASL_MAX_FILE_TYPE; i++) 122227064Sbz { 123227064Sbz Gbl_Files[i].Handle = NULL; 124227064Sbz Gbl_Files[i].Filename = NULL; 125227064Sbz } 126227064Sbz} 127227064Sbz 128227064Sbz 129227064Sbz/****************************************************************************** 130227064Sbz * 131227064Sbz * FUNCTION: AsDoWildcard 132227064Sbz * 133227064Sbz * PARAMETERS: None 134227064Sbz * 135227064Sbz * RETURN: None 136227064Sbz * 137227064Sbz * DESCRIPTION: Process files via wildcards. This function is for the Windows 138227064Sbz * case only. 139227064Sbz * 140227064Sbz ******************************************************************************/ 141227064Sbz 142227064Sbzstatic char ** 143227064SbzAsDoWildcard ( 144227064Sbz char *DirectoryPathname, 145227064Sbz char *FileSpecifier) 146227064Sbz{ 147227064Sbz#ifdef WIN32 148227064Sbz void *DirInfo; 149227064Sbz char *Filename; 150227064Sbz int FileCount; 151227064Sbz 152227064Sbz 153227064Sbz FileCount = 0; 154227064Sbz 155227064Sbz /* Open parent directory */ 156227064Sbz 157227064Sbz DirInfo = AcpiOsOpenDirectory (DirectoryPathname, FileSpecifier, REQUEST_FILE_ONLY); 158227064Sbz if (!DirInfo) 159227064Sbz { 160227064Sbz /* Either the directory of file does not exist */ 161227064Sbz 162227064Sbz Gbl_Files[ASL_FILE_INPUT].Filename = FileSpecifier; 163227064Sbz FlFileError (ASL_FILE_INPUT, ASL_MSG_OPEN); 164227064Sbz AslAbort (); 165227064Sbz } 166227064Sbz 167227064Sbz /* Process each file that matches the wildcard specification */ 168227064Sbz 169227064Sbz while ((Filename = AcpiOsGetNextFilename (DirInfo))) 170227064Sbz { 171227064Sbz /* Add the filename to the file list */ 172227064Sbz 173227064Sbz FileList[FileCount] = AcpiOsAllocate (strlen (Filename) + 1); 174227064Sbz strcpy (FileList[FileCount], Filename); 175227064Sbz FileCount++; 176227064Sbz 177227064Sbz if (FileCount >= ASL_MAX_FILES) 178227064Sbz { 179227064Sbz printf ("Max files reached\n"); 180227064Sbz FileList[0] = NULL; 181227064Sbz return (FileList); 182227064Sbz } 183227064Sbz } 184227064Sbz 185227064Sbz /* Cleanup */ 186227064Sbz 187227064Sbz AcpiOsCloseDirectory (DirInfo); 188227064Sbz FileList[FileCount] = NULL; 189227064Sbz return (FileList); 190227064Sbz 191227064Sbz#else 192227064Sbz /* 193227064Sbz * Linux/Unix cases - Wildcards are expanded by the shell automatically. 194227064Sbz * Just return the filename in a null terminated list 195227064Sbz */ 196227064Sbz FileList[0] = AcpiOsAllocate (strlen (FileSpecifier) + 1); 197227064Sbz strcpy (FileList[0], FileSpecifier); 198227064Sbz FileList[1] = NULL; 199227064Sbz 200227064Sbz return (FileList); 201227064Sbz#endif 202227064Sbz} 203227064Sbz 204227064Sbz 205227064Sbz/******************************************************************************* 206227064Sbz * 207227064Sbz * FUNCTION: AslDetectSourceFileType 208227064Sbz * 209227064Sbz * PARAMETERS: Info - Name/Handle for the file (must be open) 210227064Sbz * 211227064Sbz * RETURN: File Type 212227064Sbz * 213227064Sbz * DESCRIPTION: Determine the type of the input file. Either binary (contains 214227064Sbz * non-ASCII characters), ASL file, or an ACPI Data Table file. 215227064Sbz * 216227064Sbz ******************************************************************************/ 217227064Sbz 218227064Sbzstatic UINT8 219227064SbzAslDetectSourceFileType ( 220227064Sbz ASL_FILE_INFO *Info) 221227064Sbz{ 222227064Sbz char *FileChar; 223227064Sbz UINT8 Type; 224227064Sbz ACPI_STATUS Status; 225227064Sbz 226227064Sbz 227227064Sbz /* Check for 100% ASCII source file (comments are ignored) */ 228227064Sbz 229227064Sbz Status = FlCheckForAscii (Info->Handle, Info->Filename, TRUE); 230227064Sbz if (ACPI_FAILURE (Status)) 231227064Sbz { 232227064Sbz printf ("Non-ascii input file - %s\n", Info->Filename); 233227064Sbz 234227064Sbz if (!Gbl_IgnoreErrors) 235227064Sbz { 236227064Sbz Type = ASL_INPUT_TYPE_BINARY; 237227064Sbz goto Cleanup; 238227064Sbz } 239227064Sbz } 240227064Sbz 241227064Sbz /* 242227064Sbz * File is ASCII. Determine if this is an ASL file or an ACPI data 243227064Sbz * table file. 244227064Sbz */ 245227064Sbz while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle)) 246227064Sbz { 247227064Sbz /* Uppercase the buffer for caseless compare */ 248227064Sbz 249227064Sbz FileChar = Gbl_CurrentLineBuffer; 250227064Sbz while (*FileChar) 251227064Sbz { 252227064Sbz *FileChar = (char) toupper ((int) *FileChar); 253227064Sbz FileChar++; 254227064Sbz } 255227064Sbz 256227064Sbz /* Presence of "DefinitionBlock" indicates actual ASL code */ 257227064Sbz 258227064Sbz if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK")) 259227064Sbz { 260227064Sbz /* Appears to be an ASL file */ 261227064Sbz 262227064Sbz Type = ASL_INPUT_TYPE_ASCII_ASL; 263227064Sbz goto Cleanup; 264227064Sbz } 265227064Sbz } 266227064Sbz 267227064Sbz /* Not an ASL source file, default to a data table source file */ 268227064Sbz 269227064Sbz Type = ASL_INPUT_TYPE_ASCII_DATA; 270227064Sbz 271227064SbzCleanup: 272227064Sbz 273227064Sbz /* Must seek back to the start of the file */ 274227064Sbz 275227064Sbz fseek (Info->Handle, 0, SEEK_SET); 276227064Sbz return (Type); 277227064Sbz} 278227064Sbz 279227064Sbz 280227064Sbz/******************************************************************************* 281227064Sbz * 282227064Sbz * FUNCTION: AslDoOneFile 283227064Sbz * 284227064Sbz * PARAMETERS: Filename - Name of the file 285227064Sbz * 286227064Sbz * RETURN: Status 287227064Sbz * 288227064Sbz * DESCRIPTION: Process a single file - either disassemble, compile, or both 289227064Sbz * 290227064Sbz ******************************************************************************/ 291227064Sbz 292227064SbzACPI_STATUS 293227064SbzAslDoOneFile ( 294227064Sbz char *Filename) 295227064Sbz{ 296227064Sbz ACPI_STATUS Status; 297227064Sbz 298227064Sbz 299227064Sbz /* Re-initialize "some" compiler/preprocessor globals */ 300227064Sbz 301227064Sbz AslInitializeGlobals (); 302227064Sbz PrInitializeGlobals (); 303227064Sbz 304227064Sbz Gbl_Files[ASL_FILE_INPUT].Filename = Filename; 305227064Sbz 306227064Sbz /* 307227064Sbz * AML Disassembly (Optional) 308227064Sbz */ 309227064Sbz if (Gbl_DisasmFlag || Gbl_GetAllTables) 310227064Sbz { 311227064Sbz /* ACPICA subsystem initialization */ 312227064Sbz 313227064Sbz Status = AdInitialize (); 314227064Sbz if (ACPI_FAILURE (Status)) 315227064Sbz { 316227064Sbz return (Status); 317227064Sbz } 318227064Sbz 319227064Sbz Status = AcpiAllocateRootTable (4); 320227064Sbz if (ACPI_FAILURE (Status)) 321227064Sbz { 322227064Sbz AcpiOsPrintf ("Could not initialize ACPI Table Manager, %s\n", 323227064Sbz AcpiFormatException (Status)); 324227064Sbz return (Status); 325227064Sbz } 326227064Sbz 327227064Sbz /* This is where the disassembly happens */ 328227064Sbz 329227064Sbz AcpiGbl_DbOpt_disasm = TRUE; 330227064Sbz Status = AdAmlDisassemble (AslToFile, 331227064Sbz Gbl_Files[ASL_FILE_INPUT].Filename, 332227064Sbz Gbl_OutputFilenamePrefix, 333227064Sbz &Gbl_Files[ASL_FILE_INPUT].Filename, 334227064Sbz Gbl_GetAllTables); 335227064Sbz if (ACPI_FAILURE (Status)) 336227064Sbz { 337227064Sbz return (Status); 338227064Sbz } 339227064Sbz 340227064Sbz /* Shutdown compiler and ACPICA subsystem */ 341227064Sbz 342227064Sbz AeClearErrorLog (); 343227064Sbz (void) AcpiTerminate (); 344227064Sbz 345227064Sbz /* 346227064Sbz * Gbl_Files[ASL_FILE_INPUT].Filename was replaced with the 347227064Sbz * .DSL disassembly file, which can now be compiled if requested 348227064Sbz */ 349227064Sbz if (Gbl_DoCompile) 350227064Sbz { 351227064Sbz AcpiOsPrintf ("\nCompiling \"%s\"\n", 352227064Sbz Gbl_Files[ASL_FILE_INPUT].Filename); 353227064Sbz } 354227064Sbz else 355227064Sbz { 356227064Sbz Gbl_Files[ASL_FILE_INPUT].Filename = NULL; 357227064Sbz return (AE_OK); 358227064Sbz } 359227064Sbz } 360227064Sbz 361227064Sbz /* 362227064Sbz * Open the input file. Here, this should be an ASCII source file, 363227064Sbz * either an ASL file or a Data Table file 364227064Sbz */ 365227064Sbz Status = FlOpenInputFile (Gbl_Files[ASL_FILE_INPUT].Filename); 366227064Sbz if (ACPI_FAILURE (Status)) 367227064Sbz { 368227064Sbz AePrintErrorLog (ASL_FILE_STDERR); 369227064Sbz return (AE_ERROR); 370227064Sbz } 371227064Sbz 372227064Sbz /* Determine input file type */ 373227064Sbz 374227064Sbz Gbl_FileType = AslDetectSourceFileType (&Gbl_Files[ASL_FILE_INPUT]); 375227064Sbz if (Gbl_FileType == ASL_INPUT_TYPE_BINARY) 376227064Sbz { 377227064Sbz return (AE_ERROR); 378227064Sbz } 379227064Sbz 380227064Sbz /* 381227064Sbz * If -p not specified, we will use the input filename as the 382227064Sbz * output filename prefix 383227064Sbz */ 384227064Sbz if (Gbl_UseDefaultAmlFilename) 385227064Sbz { 386227064Sbz Gbl_OutputFilenamePrefix = Gbl_Files[ASL_FILE_INPUT].Filename; 387227064Sbz } 388227064Sbz 389227064Sbz /* Open the optional output files (listings, etc.) */ 390227064Sbz 391227064Sbz Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix); 392227064Sbz if (ACPI_FAILURE (Status)) 393227064Sbz { 394227064Sbz AePrintErrorLog (ASL_FILE_STDERR); 395227064Sbz return (AE_ERROR); 396227064Sbz } 397227064Sbz 398227064Sbz /* 399227064Sbz * Compilation of ASL source versus DataTable source uses different 400227064Sbz * compiler subsystems 401227064Sbz */ 402227064Sbz switch (Gbl_FileType) 403227064Sbz { 404227064Sbz /* 405227064Sbz * Data Table Compilation 406227064Sbz */ 407227064Sbz case ASL_INPUT_TYPE_ASCII_DATA: 408227064Sbz 409227064Sbz Status = DtDoCompile (); 410227064Sbz if (ACPI_FAILURE (Status)) 411227064Sbz { 412227064Sbz return (Status); 413227064Sbz } 414227064Sbz 415227064Sbz if (Gbl_Signature) 416227064Sbz { 417227064Sbz ACPI_FREE (Gbl_Signature); 418227064Sbz Gbl_Signature = NULL; 419227064Sbz } 420227064Sbz 421227064Sbz /* Check if any errors occurred during compile */ 422227064Sbz 423227064Sbz Status = AslCheckForErrorExit (); 424227064Sbz if (ACPI_FAILURE (Status)) 425227064Sbz { 426227064Sbz return (Status); 427227064Sbz } 428227064Sbz 429227064Sbz /* Cleanup (for next source file) and exit */ 430227064Sbz 431227064Sbz AeClearErrorLog (); 432227064Sbz PrTerminatePreprocessor (); 433227064Sbz return (Status); 434227064Sbz 435227064Sbz /* 436227064Sbz * ASL Compilation 437227064Sbz */ 438227064Sbz case ASL_INPUT_TYPE_ASCII_ASL: 439227064Sbz 440227064Sbz /* ACPICA subsystem initialization */ 441227064Sbz 442227064Sbz Status = AdInitialize (); 443227064Sbz if (ACPI_FAILURE (Status)) 444227064Sbz { 445227064Sbz return (Status); 446227064Sbz } 447227064Sbz 448227064Sbz (void) CmDoCompile (); 449227064Sbz (void) AcpiTerminate (); 450227064Sbz 451227064Sbz /* Check if any errors occurred during compile */ 452227064Sbz 453227064Sbz Status = AslCheckForErrorExit (); 454227064Sbz if (ACPI_FAILURE (Status)) 455227064Sbz { 456227064Sbz return (Status); 457227064Sbz } 458227064Sbz 459227064Sbz /* Cleanup (for next source file) and exit */ 460227064Sbz 461227064Sbz AeClearErrorLog (); 462227064Sbz PrTerminatePreprocessor (); 463227064Sbz return (AE_OK); 464227064Sbz 465227064Sbz case ASL_INPUT_TYPE_BINARY: 466227064Sbz 467227064Sbz AePrintErrorLog (ASL_FILE_STDERR); 468227064Sbz return (AE_ERROR); 469227064Sbz 470227064Sbz default: 471227064Sbz printf ("Unknown file type %X\n", Gbl_FileType); 472227064Sbz return (AE_ERROR); 473227064Sbz } 474227064Sbz} 475227064Sbz 476227064Sbz 477227064Sbz/******************************************************************************* 478227064Sbz * 479227064Sbz * FUNCTION: AslDoOnePathname 480227064Sbz * 481227064Sbz * PARAMETERS: Pathname - Full pathname, possibly with wildcards 482227064Sbz * 483227064Sbz * RETURN: Status 484227064Sbz * 485227064Sbz * DESCRIPTION: Process one pathname, possible terminated with a wildcard 486227064Sbz * specification. If a wildcard, it is expanded and the multiple 487227064Sbz * files are processed. 488227064Sbz * 489227064Sbz ******************************************************************************/ 490227064Sbz 491227064SbzACPI_STATUS 492227064SbzAslDoOnePathname ( 493227064Sbz char *Pathname, 494227064Sbz ASL_PATHNAME_CALLBACK PathCallback) 495227064Sbz{ 496227064Sbz ACPI_STATUS Status = AE_OK; 497227064Sbz char **WildcardList; 498227064Sbz char *Filename; 499227064Sbz char *FullPathname; 500227064Sbz 501227064Sbz 502227064Sbz /* Split incoming path into a directory/filename combo */ 503227064Sbz 504227064Sbz Status = FlSplitInputPathname (Pathname, &Gbl_DirectoryPath, &Filename); 505227064Sbz if (ACPI_FAILURE (Status)) 506227064Sbz { 507227064Sbz return (Status); 508227064Sbz } 509227064Sbz 510227064Sbz /* Expand possible wildcard into a file list (Windows/DOS only) */ 511227064Sbz 512227064Sbz WildcardList = AsDoWildcard (Gbl_DirectoryPath, Filename); 513227064Sbz while (*WildcardList) 514227064Sbz { 515227064Sbz FullPathname = ACPI_ALLOCATE ( 516227064Sbz strlen (Gbl_DirectoryPath) + strlen (*WildcardList) + 1); 517227064Sbz 518227064Sbz /* Construct a full path to the file */ 519227064Sbz 520227064Sbz strcpy (FullPathname, Gbl_DirectoryPath); 521227064Sbz strcat (FullPathname, *WildcardList); 522227064Sbz 523227064Sbz /* 524227064Sbz * If -p not specified, we will use the input filename as the 525227064Sbz * output filename prefix 526227064Sbz */ 527227064Sbz if (Gbl_UseDefaultAmlFilename) 528227064Sbz { 529227064Sbz Gbl_OutputFilenamePrefix = FullPathname; 530227064Sbz } 531227064Sbz 532227064Sbz /* Save status from all compiles */ 533227064Sbz 534227064Sbz Status |= (*PathCallback) (FullPathname); 535227064Sbz 536227064Sbz ACPI_FREE (FullPathname); 537227064Sbz ACPI_FREE (*WildcardList); 538227064Sbz *WildcardList = NULL; 539227064Sbz WildcardList++; 540227064Sbz } 541227064Sbz 542227064Sbz ACPI_FREE (Gbl_DirectoryPath); 543227064Sbz ACPI_FREE (Filename); 544227064Sbz return (Status); 545227064Sbz} 546227064Sbz 547227064Sbz 548227064Sbz/******************************************************************************* 549227064Sbz * 550227064Sbz * FUNCTION: AslCheckForErrorExit 551227064Sbz * 552227064Sbz * PARAMETERS: None. Examines global exception count array 553227064Sbz * 554227064Sbz * RETURN: Status 555227064Sbz * 556227064Sbz * DESCRIPTION: Determine if compiler should abort with error status 557227064Sbz * 558227064Sbz ******************************************************************************/ 559227064Sbz 560227064SbzACPI_STATUS 561227064SbzAslCheckForErrorExit ( 562227064Sbz void) 563227064Sbz{ 564227064Sbz 565227064Sbz /* 566227064Sbz * Return non-zero exit code if there have been errors, unless the 567227064Sbz * global ignore error flag has been set 568227064Sbz */ 569227064Sbz if (!Gbl_IgnoreErrors) 570227064Sbz { 571227064Sbz if (Gbl_ExceptionCount[ASL_ERROR] > 0) 572227064Sbz { 573227064Sbz return (AE_ERROR); 574227064Sbz } 575227064Sbz 576227064Sbz /* Optionally treat warnings as errors */ 577227064Sbz 578227064Sbz if (Gbl_WarningsAsErrors) 579227064Sbz { 580227064Sbz if ((Gbl_ExceptionCount[ASL_WARNING] > 0) || 581227064Sbz (Gbl_ExceptionCount[ASL_WARNING2] > 0) || 582227064Sbz (Gbl_ExceptionCount[ASL_WARNING3] > 0)) 583227064Sbz { 584227064Sbz return (AE_ERROR); 585227064Sbz } 586227064Sbz } 587227064Sbz } 588227064Sbz 589227064Sbz return (AE_OK); 590227064Sbz} 591227064Sbz