aslstartup.c revision 241973
1193267Sjkim/****************************************************************************** 2193267Sjkim * 3193267Sjkim * Module Name: aslstartup - Compiler startup routines, called from main 4193267Sjkim * 5193267Sjkim *****************************************************************************/ 6193267Sjkim 7217365Sjkim/* 8245582Sjkim * Copyright (C) 2000 - 2012, Intel Corp. 9193267Sjkim * All rights reserved. 10193267Sjkim * 11217365Sjkim * Redistribution and use in source and binary forms, with or without 12217365Sjkim * modification, are permitted provided that the following conditions 13217365Sjkim * are met: 14217365Sjkim * 1. Redistributions of source code must retain the above copyright 15217365Sjkim * notice, this list of conditions, and the following disclaimer, 16217365Sjkim * without modification. 17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20217365Sjkim * including a substantially similar Disclaimer requirement for further 21217365Sjkim * binary redistribution. 22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23217365Sjkim * of any contributors may be used to endorse or promote products derived 24217365Sjkim * from this software without specific prior written permission. 25193267Sjkim * 26217365Sjkim * Alternatively, this software may be distributed under the terms of the 27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28217365Sjkim * Software Foundation. 29193267Sjkim * 30217365Sjkim * NO WARRANTY 31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 42217365Sjkim */ 43193267Sjkim 44193267Sjkim 45193341Sjkim#include <contrib/dev/acpica/compiler/aslcompiler.h> 46193341Sjkim#include <contrib/dev/acpica/include/actables.h> 47246849Sjkim#include <contrib/dev/acpica/include/acapps.h> 48193341Sjkim 49193267Sjkim#define _COMPONENT ACPI_COMPILER 50193267Sjkim ACPI_MODULE_NAME ("aslstartup") 51193267Sjkim 52193267Sjkim 53193267Sjkim#define ASL_MAX_FILES 256 54193267Sjkimstatic char *FileList[ASL_MAX_FILES]; 55212761Sjkimstatic BOOLEAN AslToFile = TRUE; 56212761Sjkim 57193267Sjkim 58193267Sjkim/* Local prototypes */ 59193267Sjkim 60193267Sjkimstatic char ** 61193267SjkimAsDoWildcard ( 62193267Sjkim char *DirectoryPathname, 63193267Sjkim char *FileSpecifier); 64193267Sjkim 65193267Sjkimstatic UINT8 66212761SjkimAslDetectSourceFileType ( 67209746Sjkim ASL_FILE_INFO *Info); 68209746Sjkim 69193267Sjkim 70246849Sjkim/******************************************************************************* 71246849Sjkim * 72246849Sjkim * FUNCTION: AslInitializeGlobals 73209746Sjkim * 74246849Sjkim * PARAMETERS: None 75193267Sjkim * 76193267Sjkim * RETURN: None 77193267Sjkim * 78193267Sjkim * DESCRIPTION: Re-initialize globals needed to restart the compiler. This 79193267Sjkim * allows multiple files to be disassembled and/or compiled. 80193267Sjkim * 81193267Sjkim ******************************************************************************/ 82193267Sjkim 83193267Sjkimvoid 84193267SjkimAslInitializeGlobals ( 85193267Sjkim void) 86193267Sjkim{ 87193267Sjkim UINT32 i; 88209746Sjkim 89193267Sjkim 90193267Sjkim /* Init compiler globals */ 91193267Sjkim 92193267Sjkim Gbl_CurrentColumn = 0; 93193267Sjkim Gbl_CurrentLineNumber = 1; 94193267Sjkim Gbl_LogicalLineNumber = 1; 95193267Sjkim Gbl_CurrentLineOffset = 0; 96193267Sjkim Gbl_InputFieldCount = 0; 97193267Sjkim Gbl_InputByteCount = 0; 98193267Sjkim Gbl_NsLookupCount = 0; 99193267Sjkim Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 100193267Sjkim 101209746Sjkim Gbl_ErrorLog = NULL; 102233250Sjkim Gbl_NextError = NULL; 103233250Sjkim Gbl_Signature = NULL; 104193267Sjkim Gbl_FileType = 0; 105193267Sjkim 106193267Sjkim TotalExecutableOpcodes = 0; 107193267Sjkim TotalNamedObjects = 0; 108209746Sjkim TotalKeywords = 0; 109209746Sjkim TotalParseNodes = 0; 110193267Sjkim TotalMethods = 0; 111233250Sjkim TotalAllocations = 0; 112233250Sjkim TotalAllocated = 0; 113233250Sjkim TotalFolds = 0; 114233250Sjkim 115233250Sjkim AslGbl_NextEvent = 0; 116233250Sjkim for (i = 0; i < ASL_NUM_REPORT_LEVELS; i++) 117233250Sjkim { 118233250Sjkim Gbl_ExceptionCount[i] = 0; 119233250Sjkim } 120193267Sjkim 121193267Sjkim for (i = ASL_FILE_INPUT; i <= ASL_MAX_FILE_TYPE; i++) 122193267Sjkim { 123193267Sjkim Gbl_Files[i].Handle = NULL; 124193267Sjkim Gbl_Files[i].Filename = NULL; 125193267Sjkim } 126233250Sjkim} 127233250Sjkim 128233250Sjkim 129233250Sjkim/****************************************************************************** 130233250Sjkim * 131193267Sjkim * FUNCTION: AsDoWildcard 132193267Sjkim * 133193267Sjkim * PARAMETERS: None 134193267Sjkim * 135193267Sjkim * RETURN: None 136193267Sjkim * 137193267Sjkim * DESCRIPTION: Process files via wildcards. This function is for the Windows 138193267Sjkim * case only. 139193267Sjkim * 140193267Sjkim ******************************************************************************/ 141193267Sjkim 142193267Sjkimstatic char ** 143193267SjkimAsDoWildcard ( 144193267Sjkim char *DirectoryPathname, 145193267Sjkim char *FileSpecifier) 146193267Sjkim{ 147193267Sjkim#ifdef WIN32 148193267Sjkim void *DirInfo; 149193267Sjkim char *Filename; 150193267Sjkim int FileCount; 151193267Sjkim 152193267Sjkim 153193267Sjkim FileCount = 0; 154193267Sjkim 155212761Sjkim /* Open parent directory */ 156193267Sjkim 157193267Sjkim DirInfo = AcpiOsOpenDirectory (DirectoryPathname, FileSpecifier, REQUEST_FILE_ONLY); 158193267Sjkim if (!DirInfo) 159193267Sjkim { 160193267Sjkim /* Either the directory of file does not exist */ 161193267Sjkim 162193267Sjkim Gbl_Files[ASL_FILE_INPUT].Filename = FileSpecifier; 163193267Sjkim FlFileError (ASL_FILE_INPUT, ASL_MSG_OPEN); 164193267Sjkim AslAbort (); 165193267Sjkim } 166193267Sjkim 167193267Sjkim /* Process each file that matches the wildcard specification */ 168193267Sjkim 169193267Sjkim while ((Filename = AcpiOsGetNextFilename (DirInfo))) 170193267Sjkim { 171193267Sjkim /* Add the filename to the file list */ 172193267Sjkim 173193267Sjkim FileList[FileCount] = AcpiOsAllocate (strlen (Filename) + 1); 174193267Sjkim strcpy (FileList[FileCount], Filename); 175193267Sjkim FileCount++; 176193267Sjkim 177193267Sjkim if (FileCount >= ASL_MAX_FILES) 178193267Sjkim { 179193267Sjkim printf ("Max files reached\n"); 180193267Sjkim FileList[0] = NULL; 181193267Sjkim return (FileList); 182193267Sjkim } 183193267Sjkim } 184193267Sjkim 185193267Sjkim /* Cleanup */ 186193267Sjkim 187193267Sjkim AcpiOsCloseDirectory (DirInfo); 188193267Sjkim FileList[FileCount] = NULL; 189193267Sjkim return (FileList); 190193267Sjkim 191193267Sjkim#else 192193267Sjkim /* 193193267Sjkim * Linux/Unix cases - Wildcards are expanded by the shell automatically. 194193267Sjkim * Just return the filename in a null terminated list 195193267Sjkim */ 196193267Sjkim FileList[0] = AcpiOsAllocate (strlen (FileSpecifier) + 1); 197193267Sjkim strcpy (FileList[0], FileSpecifier); 198193267Sjkim FileList[1] = NULL; 199193267Sjkim 200193267Sjkim return (FileList); 201193267Sjkim#endif 202193267Sjkim} 203193267Sjkim 204193267Sjkim 205193267Sjkim/******************************************************************************* 206193267Sjkim * 207193267Sjkim * FUNCTION: AslDetectSourceFileType 208193267Sjkim * 209193267Sjkim * PARAMETERS: Info - Name/Handle for the file (must be open) 210193267Sjkim * 211193267Sjkim * RETURN: File Type 212209746Sjkim * 213209746Sjkim * DESCRIPTION: Determine the type of the input file. Either binary (contains 214209746Sjkim * non-ASCII characters), ASL file, or an ACPI Data Table file. 215209746Sjkim * 216209746Sjkim ******************************************************************************/ 217209746Sjkim 218209746Sjkimstatic UINT8 219209746SjkimAslDetectSourceFileType ( 220209746Sjkim ASL_FILE_INFO *Info) 221209746Sjkim{ 222209746Sjkim char *FileChar; 223212761Sjkim UINT8 Type; 224209746Sjkim ACPI_STATUS Status; 225209746Sjkim 226209746Sjkim 227209746Sjkim /* Check for 100% ASCII source file (comments are ignored) */ 228209746Sjkim 229209746Sjkim Status = FlCheckForAscii (Info->Handle, Info->Filename, TRUE); 230209746Sjkim if (ACPI_FAILURE (Status)) 231209746Sjkim { 232246849Sjkim printf ("Non-ascii input file - %s\n", Info->Filename); 233246849Sjkim 234246849Sjkim if (!Gbl_IgnoreErrors) 235246849Sjkim { 236246849Sjkim Type = ASL_INPUT_TYPE_BINARY; 237246849Sjkim goto Cleanup; 238246849Sjkim } 239246849Sjkim } 240246849Sjkim 241209746Sjkim /* 242209746Sjkim * File is ASCII. Determine if this is an ASL file or an ACPI data 243235945Sjkim * table file. 244209746Sjkim */ 245209746Sjkim while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle)) 246209746Sjkim { 247241973Sjkim /* Uppercase the buffer for caseless compare */ 248241973Sjkim 249241973Sjkim FileChar = Gbl_CurrentLineBuffer; 250241973Sjkim while (*FileChar) 251241973Sjkim { 252241973Sjkim *FileChar = (char) toupper ((int) *FileChar); 253209746Sjkim FileChar++; 254209746Sjkim } 255209746Sjkim 256209746Sjkim /* Presence of "DefinitionBlock" indicates actual ASL code */ 257209746Sjkim 258209746Sjkim if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK")) 259240716Sjkim { 260209746Sjkim /* Appears to be an ASL file */ 261209746Sjkim 262209746Sjkim Type = ASL_INPUT_TYPE_ASCII_ASL; 263209746Sjkim goto Cleanup; 264209746Sjkim } 265209746Sjkim } 266209746Sjkim 267209746Sjkim /* Not an ASL source file, default to a data table source file */ 268209746Sjkim 269209746Sjkim Type = ASL_INPUT_TYPE_ASCII_DATA; 270209746Sjkim 271209746SjkimCleanup: 272209746Sjkim 273209746Sjkim /* Must seek back to the start of the file */ 274209746Sjkim 275209746Sjkim fseek (Info->Handle, 0, SEEK_SET); 276209746Sjkim return (Type); 277209746Sjkim} 278209746Sjkim 279209746Sjkim 280209746Sjkim/******************************************************************************* 281209746Sjkim * 282209746Sjkim * FUNCTION: AslDoOneFile 283209746Sjkim * 284209746Sjkim * PARAMETERS: Filename - Name of the file 285209746Sjkim * 286209746Sjkim * RETURN: Status 287209746Sjkim * 288209746Sjkim * DESCRIPTION: Process a single file - either disassemble, compile, or both 289209746Sjkim * 290209746Sjkim ******************************************************************************/ 291209746Sjkim 292209746SjkimACPI_STATUS 293209746SjkimAslDoOneFile ( 294209746Sjkim char *Filename) 295209746Sjkim{ 296246849Sjkim ACPI_STATUS Status; 297246849Sjkim 298246849Sjkim 299246849Sjkim /* Re-initialize "some" compiler/preprocessor globals */ 300246849Sjkim 301246849Sjkim AslInitializeGlobals (); 302246849Sjkim PrInitializeGlobals (); 303246849Sjkim 304246849Sjkim Gbl_Files[ASL_FILE_INPUT].Filename = Filename; 305246849Sjkim 306246849Sjkim /* 307246849Sjkim * AML Disassembly (Optional) 308246849Sjkim */ 309246849Sjkim if (Gbl_DisasmFlag || Gbl_GetAllTables) 310246849Sjkim { 311246849Sjkim /* ACPICA subsystem initialization */ 312246849Sjkim 313246849Sjkim Status = AdInitialize (); 314246849Sjkim if (ACPI_FAILURE (Status)) 315246849Sjkim { 316246849Sjkim return (Status); 317246849Sjkim } 318246849Sjkim 319246849Sjkim Status = AcpiAllocateRootTable (4); 320246849Sjkim if (ACPI_FAILURE (Status)) 321246849Sjkim { 322246849Sjkim AcpiOsPrintf ("Could not initialize ACPI Table Manager, %s\n", 323246849Sjkim AcpiFormatException (Status)); 324246849Sjkim return (Status); 325246849Sjkim } 326246849Sjkim 327246849Sjkim /* This is where the disassembly happens */ 328246849Sjkim 329246849Sjkim AcpiGbl_DbOpt_disasm = TRUE; 330246849Sjkim Status = AdAmlDisassemble (AslToFile, 331246849Sjkim Gbl_Files[ASL_FILE_INPUT].Filename, 332246849Sjkim Gbl_OutputFilenamePrefix, 333246849Sjkim &Gbl_Files[ASL_FILE_INPUT].Filename, 334246849Sjkim Gbl_GetAllTables); 335246849Sjkim if (ACPI_FAILURE (Status)) 336246849Sjkim { 337246849Sjkim return (Status); 338246849Sjkim } 339246849Sjkim 340246849Sjkim /* Shutdown compiler and ACPICA subsystem */ 341246849Sjkim 342246849Sjkim AeClearErrorLog (); 343246849Sjkim (void) AcpiTerminate (); 344246849Sjkim 345246849Sjkim /* 346246849Sjkim * Gbl_Files[ASL_FILE_INPUT].Filename was replaced with the 347246849Sjkim * .DSL disassembly file, which can now be compiled if requested 348246849Sjkim */ 349246849Sjkim if (Gbl_DoCompile) 350246849Sjkim { 351246849Sjkim AcpiOsPrintf ("\nCompiling \"%s\"\n", 352246849Sjkim Gbl_Files[ASL_FILE_INPUT].Filename); 353246849Sjkim } 354246849Sjkim else 355246849Sjkim { 356246849Sjkim Gbl_Files[ASL_FILE_INPUT].Filename = NULL; 357246849Sjkim return (AE_OK); 358246849Sjkim } 359246849Sjkim } 360246849Sjkim 361246849Sjkim /* 362246849Sjkim * Open the input file. Here, this should be an ASCII source file, 363246849Sjkim * either an ASL file or a Data Table file 364246849Sjkim */ 365246849Sjkim Status = FlOpenInputFile (Gbl_Files[ASL_FILE_INPUT].Filename); 366246849Sjkim if (ACPI_FAILURE (Status)) 367246849Sjkim { 368246849Sjkim AePrintErrorLog (ASL_FILE_STDERR); 369246849Sjkim return (AE_ERROR); 370246849Sjkim } 371246849Sjkim 372246849Sjkim /* Determine input file type */ 373246849Sjkim 374246849Sjkim Gbl_FileType = AslDetectSourceFileType (&Gbl_Files[ASL_FILE_INPUT]); 375246849Sjkim if (Gbl_FileType == ASL_INPUT_TYPE_BINARY) 376193267Sjkim { 377193267Sjkim return (AE_ERROR); 378193267Sjkim } 379193267Sjkim 380193267Sjkim /* 381193267Sjkim * If -p not specified, we will use the input filename as the 382193267Sjkim * output filename prefix 383193267Sjkim */ 384193267Sjkim if (Gbl_UseDefaultAmlFilename) 385193267Sjkim { 386193267Sjkim Gbl_OutputFilenamePrefix = Gbl_Files[ASL_FILE_INPUT].Filename; 387193267Sjkim } 388193267Sjkim 389193267Sjkim /* Open the optional output files (listings, etc.) */ 390193267Sjkim 391193267Sjkim Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix); 392193267Sjkim if (ACPI_FAILURE (Status)) 393233250Sjkim { 394193267Sjkim AePrintErrorLog (ASL_FILE_STDERR); 395193267Sjkim return (AE_ERROR); 396233250Sjkim } 397193267Sjkim 398233250Sjkim /* 399233250Sjkim * Compilation of ASL source versus DataTable source uses different 400193267Sjkim * compiler subsystems 401193267Sjkim */ 402193267Sjkim switch (Gbl_FileType) 403193267Sjkim { 404193267Sjkim /* 405246849Sjkim * Data Table Compilation 406246849Sjkim */ 407193267Sjkim case ASL_INPUT_TYPE_ASCII_DATA: 408193267Sjkim 409193267Sjkim Status = DtDoCompile (); 410193267Sjkim if (ACPI_FAILURE (Status)) 411193267Sjkim { 412193267Sjkim return (Status); 413209746Sjkim } 414209746Sjkim 415193267Sjkim if (Gbl_Signature) 416209746Sjkim { 417209746Sjkim ACPI_FREE (Gbl_Signature); 418193267Sjkim Gbl_Signature = NULL; 419209746Sjkim } 420209746Sjkim 421209746Sjkim /* Check if any errors occurred during compile */ 422209746Sjkim 423209746Sjkim Status = AslCheckForErrorExit (); 424209746Sjkim if (ACPI_FAILURE (Status)) 425209746Sjkim { 426209746Sjkim return (Status); 427209746Sjkim } 428209746Sjkim 429209746Sjkim /* Cleanup (for next source file) and exit */ 430209746Sjkim 431209746Sjkim AeClearErrorLog (); 432209746Sjkim PrTerminatePreprocessor (); 433209746Sjkim return (Status); 434209746Sjkim 435209746Sjkim /* 436209746Sjkim * ASL Compilation 437209746Sjkim */ 438209746Sjkim case ASL_INPUT_TYPE_ASCII_ASL: 439209746Sjkim 440209746Sjkim /* ACPICA subsystem initialization */ 441209746Sjkim 442209746Sjkim Status = AdInitialize (); 443209746Sjkim if (ACPI_FAILURE (Status)) 444209746Sjkim { 445209746Sjkim return (Status); 446209746Sjkim } 447209746Sjkim 448209746Sjkim (void) CmDoCompile (); 449209746Sjkim (void) AcpiTerminate (); 450209746Sjkim 451209746Sjkim /* Check if any errors occurred during compile */ 452209746Sjkim 453209746Sjkim Status = AslCheckForErrorExit (); 454209746Sjkim if (ACPI_FAILURE (Status)) 455209746Sjkim { 456209746Sjkim return (Status); 457209746Sjkim } 458209746Sjkim 459209746Sjkim /* Cleanup (for next source file) and exit */ 460209746Sjkim 461234623Sjkim AeClearErrorLog (); 462234623Sjkim PrTerminatePreprocessor (); 463234623Sjkim return (AE_OK); 464234623Sjkim 465209746Sjkim case ASL_INPUT_TYPE_BINARY: 466209746Sjkim 467193267Sjkim AePrintErrorLog (ASL_FILE_STDERR); 468209746Sjkim return (AE_ERROR); 469209746Sjkim 470193267Sjkim default: 471234623Sjkim printf ("Unknown file type %X\n", Gbl_FileType); 472234623Sjkim return (AE_ERROR); 473234623Sjkim } 474234623Sjkim} 475234623Sjkim 476234623Sjkim 477234623Sjkim/******************************************************************************* 478234623Sjkim * 479234623Sjkim * FUNCTION: AslDoOnePathname 480234623Sjkim * 481234623Sjkim * PARAMETERS: Pathname - Full pathname, possibly with wildcards 482209746Sjkim * 483233250Sjkim * RETURN: Status 484209746Sjkim * 485193267Sjkim * DESCRIPTION: Process one pathname, possible terminated with a wildcard 486209746Sjkim * specification. If a wildcard, it is expanded and the multiple 487234623Sjkim * files are processed. 488209746Sjkim * 489209746Sjkim ******************************************************************************/ 490193267Sjkim 491209746SjkimACPI_STATUS 492209746SjkimAslDoOnePathname ( 493193267Sjkim char *Pathname, 494193267Sjkim ASL_PATHNAME_CALLBACK PathCallback) 495193267Sjkim{ 496193267Sjkim ACPI_STATUS Status = AE_OK; 497193267Sjkim char **WildcardList; 498193267Sjkim char *Filename; 499234623Sjkim char *FullPathname; 500212761Sjkim 501193267Sjkim 502234623Sjkim /* Split incoming path into a directory/filename combo */ 503234623Sjkim 504234623Sjkim Status = FlSplitInputPathname (Pathname, &Gbl_DirectoryPath, &Filename); 505234623Sjkim if (ACPI_FAILURE (Status)) 506193267Sjkim { 507234623Sjkim return (Status); 508193267Sjkim } 509193267Sjkim 510234623Sjkim /* Expand possible wildcard into a file list (Windows/DOS only) */ 511234623Sjkim 512193267Sjkim WildcardList = AsDoWildcard (Gbl_DirectoryPath, Filename); 513233250Sjkim while (*WildcardList) 514209746Sjkim { 515209746Sjkim FullPathname = ACPI_ALLOCATE ( 516246849Sjkim strlen (Gbl_DirectoryPath) + strlen (*WildcardList) + 1); 517246849Sjkim 518246849Sjkim /* Construct a full path to the file */ 519246849Sjkim 520246849Sjkim strcpy (FullPathname, Gbl_DirectoryPath); 521246849Sjkim strcat (FullPathname, *WildcardList); 522246849Sjkim 523246849Sjkim /* 524246849Sjkim * If -p not specified, we will use the input filename as the 525246849Sjkim * output filename prefix 526246849Sjkim */ 527246849Sjkim if (Gbl_UseDefaultAmlFilename) 528246849Sjkim { 529246849Sjkim Gbl_OutputFilenamePrefix = FullPathname; 530246849Sjkim } 531209746Sjkim 532209746Sjkim /* Save status from all compiles */ 533209746Sjkim 534209746Sjkim Status |= (*PathCallback) (FullPathname); 535209746Sjkim 536209746Sjkim ACPI_FREE (FullPathname); 537209746Sjkim ACPI_FREE (*WildcardList); 538209746Sjkim *WildcardList = NULL; 539193267Sjkim WildcardList++; 540193267Sjkim } 541193267Sjkim 542193267Sjkim ACPI_FREE (Gbl_DirectoryPath); 543193267Sjkim ACPI_FREE (Filename); 544193267Sjkim return (Status); 545193267Sjkim} 546193267Sjkim 547193267Sjkim 548193267Sjkim/******************************************************************************* 549193267Sjkim * 550193267Sjkim * FUNCTION: AslCheckForErrorExit 551193267Sjkim * 552193267Sjkim * PARAMETERS: None. Examines global exception count array 553193267Sjkim * 554193267Sjkim * RETURN: Status 555193267Sjkim * 556193267Sjkim * DESCRIPTION: Determine if compiler should abort with error status 557193267Sjkim * 558193267Sjkim ******************************************************************************/ 559210976Sjkim 560210976SjkimACPI_STATUS 561193267SjkimAslCheckForErrorExit ( 562209746Sjkim void) 563212761Sjkim{ 564193267Sjkim 565193267Sjkim /* 566193267Sjkim * Return non-zero exit code if there have been errors, unless the 567193267Sjkim * global ignore error flag has been set 568193267Sjkim */ 569193267Sjkim if (!Gbl_IgnoreErrors) 570193267Sjkim { 571193267Sjkim if (Gbl_ExceptionCount[ASL_ERROR] > 0) 572193267Sjkim { 573193267Sjkim return (AE_ERROR); 574193267Sjkim } 575193267Sjkim 576193267Sjkim /* Optionally treat warnings as errors */ 577193267Sjkim 578212761Sjkim if (Gbl_WarningsAsErrors) 579212761Sjkim { 580193267Sjkim if ((Gbl_ExceptionCount[ASL_WARNING] > 0) || 581193267Sjkim (Gbl_ExceptionCount[ASL_WARNING2] > 0) || 582212761Sjkim (Gbl_ExceptionCount[ASL_WARNING3] > 0)) 583193267Sjkim { 584193267Sjkim return (AE_ERROR); 585193267Sjkim } 586193267Sjkim } 587212761Sjkim } 588193267Sjkim 589193267Sjkim return (AE_OK); 590193267Sjkim} 591193267Sjkim