aslstartup.c revision 234623
1193267Sjkim 2193267Sjkim/****************************************************************************** 3193267Sjkim * 4193267Sjkim * Module Name: aslstartup - Compiler startup routines, called from main 5193267Sjkim * 6193267Sjkim *****************************************************************************/ 7193267Sjkim 8217365Sjkim/* 9229989Sjkim * Copyright (C) 2000 - 2012, Intel Corp. 10193267Sjkim * All rights reserved. 11193267Sjkim * 12217365Sjkim * Redistribution and use in source and binary forms, with or without 13217365Sjkim * modification, are permitted provided that the following conditions 14217365Sjkim * are met: 15217365Sjkim * 1. Redistributions of source code must retain the above copyright 16217365Sjkim * notice, this list of conditions, and the following disclaimer, 17217365Sjkim * without modification. 18217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 19217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 20217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 21217365Sjkim * including a substantially similar Disclaimer requirement for further 22217365Sjkim * binary redistribution. 23217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 24217365Sjkim * of any contributors may be used to endorse or promote products derived 25217365Sjkim * from this software without specific prior written permission. 26193267Sjkim * 27217365Sjkim * Alternatively, this software may be distributed under the terms of the 28217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 29217365Sjkim * Software Foundation. 30193267Sjkim * 31217365Sjkim * NO WARRANTY 32217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 33217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 34217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 35217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 36217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 37217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 38217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 39217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 40217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 41217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 42217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 43217365Sjkim */ 44193267Sjkim 45193267Sjkim 46193341Sjkim#include <contrib/dev/acpica/compiler/aslcompiler.h> 47193341Sjkim#include <contrib/dev/acpica/include/actables.h> 48193341Sjkim#include <contrib/dev/acpica/include/acapps.h> 49193267Sjkim 50193267Sjkim#define _COMPONENT ACPI_COMPILER 51193267Sjkim ACPI_MODULE_NAME ("aslstartup") 52193267Sjkim 53193267Sjkim 54193267Sjkim#define ASL_MAX_FILES 256 55212761Sjkimstatic char *FileList[ASL_MAX_FILES]; 56212761Sjkimstatic BOOLEAN AslToFile = TRUE; 57193267Sjkim 58193267Sjkim 59193267Sjkim/* Local prototypes */ 60193267Sjkim 61193267Sjkimstatic char ** 62193267SjkimAsDoWildcard ( 63193267Sjkim char *DirectoryPathname, 64193267Sjkim char *FileSpecifier); 65193267Sjkim 66212761Sjkimstatic UINT8 67209746SjkimAslDetectSourceFileType ( 68209746Sjkim ASL_FILE_INFO *Info); 69193267Sjkim 70209746Sjkim 71193267Sjkim/******************************************************************************* 72193267Sjkim * 73193267Sjkim * FUNCTION: AslInitializeGlobals 74193267Sjkim * 75193267Sjkim * PARAMETERS: None 76193267Sjkim * 77193267Sjkim * RETURN: None 78193267Sjkim * 79193267Sjkim * DESCRIPTION: Re-initialize globals needed to restart the compiler. This 80193267Sjkim * allows multiple files to be disassembled and/or compiled. 81193267Sjkim * 82193267Sjkim ******************************************************************************/ 83193267Sjkim 84209746Sjkimvoid 85193267SjkimAslInitializeGlobals ( 86193267Sjkim void) 87193267Sjkim{ 88193267Sjkim UINT32 i; 89193267Sjkim 90193267Sjkim 91193267Sjkim /* Init compiler globals */ 92193267Sjkim 93193267Sjkim Gbl_CurrentColumn = 0; 94193267Sjkim Gbl_CurrentLineNumber = 1; 95193267Sjkim Gbl_LogicalLineNumber = 1; 96193267Sjkim Gbl_CurrentLineOffset = 0; 97209746Sjkim Gbl_InputFieldCount = 0; 98233250Sjkim Gbl_InputByteCount = 0; 99233250Sjkim Gbl_NsLookupCount = 0; 100193267Sjkim Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 101193267Sjkim 102193267Sjkim Gbl_ErrorLog = NULL; 103193267Sjkim Gbl_NextError = NULL; 104209746Sjkim Gbl_Signature = NULL; 105209746Sjkim Gbl_FileType = 0; 106193267Sjkim 107233250Sjkim TotalExecutableOpcodes = 0; 108233250Sjkim TotalNamedObjects = 0; 109233250Sjkim TotalKeywords = 0; 110233250Sjkim TotalParseNodes = 0; 111233250Sjkim TotalMethods = 0; 112233250Sjkim TotalAllocations = 0; 113233250Sjkim TotalAllocated = 0; 114233250Sjkim TotalFolds = 0; 115233250Sjkim 116193267Sjkim AslGbl_NextEvent = 0; 117193267Sjkim for (i = 0; i < ASL_NUM_REPORT_LEVELS; i++) 118193267Sjkim { 119193267Sjkim Gbl_ExceptionCount[i] = 0; 120193267Sjkim } 121193267Sjkim 122233250Sjkim for (i = ASL_FILE_INPUT; i <= ASL_MAX_FILE_TYPE; i++) 123233250Sjkim { 124233250Sjkim Gbl_Files[i].Handle = NULL; 125233250Sjkim Gbl_Files[i].Filename = NULL; 126233250Sjkim } 127193267Sjkim} 128193267Sjkim 129193267Sjkim 130193267Sjkim/****************************************************************************** 131193267Sjkim * 132193267Sjkim * FUNCTION: AsDoWildcard 133193267Sjkim * 134193267Sjkim * PARAMETERS: None 135193267Sjkim * 136193267Sjkim * RETURN: None 137193267Sjkim * 138193267Sjkim * DESCRIPTION: Process files via wildcards. This function is for the Windows 139193267Sjkim * case only. 140193267Sjkim * 141193267Sjkim ******************************************************************************/ 142193267Sjkim 143193267Sjkimstatic char ** 144193267SjkimAsDoWildcard ( 145193267Sjkim char *DirectoryPathname, 146193267Sjkim char *FileSpecifier) 147193267Sjkim{ 148193267Sjkim#ifdef WIN32 149193267Sjkim void *DirInfo; 150193267Sjkim char *Filename; 151212761Sjkim int FileCount; 152193267Sjkim 153193267Sjkim 154193267Sjkim FileCount = 0; 155193267Sjkim 156193267Sjkim /* Open parent directory */ 157193267Sjkim 158193267Sjkim DirInfo = AcpiOsOpenDirectory (DirectoryPathname, FileSpecifier, REQUEST_FILE_ONLY); 159193267Sjkim if (!DirInfo) 160193267Sjkim { 161193267Sjkim /* Either the directory of file does not exist */ 162193267Sjkim 163193267Sjkim Gbl_Files[ASL_FILE_INPUT].Filename = FileSpecifier; 164193267Sjkim FlFileError (ASL_FILE_INPUT, ASL_MSG_OPEN); 165193267Sjkim AslAbort (); 166193267Sjkim } 167193267Sjkim 168193267Sjkim /* Process each file that matches the wildcard specification */ 169193267Sjkim 170193267Sjkim while ((Filename = AcpiOsGetNextFilename (DirInfo))) 171193267Sjkim { 172193267Sjkim /* Add the filename to the file list */ 173193267Sjkim 174193267Sjkim FileList[FileCount] = AcpiOsAllocate (strlen (Filename) + 1); 175193267Sjkim strcpy (FileList[FileCount], Filename); 176193267Sjkim FileCount++; 177193267Sjkim 178193267Sjkim if (FileCount >= ASL_MAX_FILES) 179193267Sjkim { 180193267Sjkim printf ("Max files reached\n"); 181193267Sjkim FileList[0] = NULL; 182193267Sjkim return (FileList); 183193267Sjkim } 184193267Sjkim } 185193267Sjkim 186193267Sjkim /* Cleanup */ 187193267Sjkim 188193267Sjkim AcpiOsCloseDirectory (DirInfo); 189193267Sjkim FileList[FileCount] = NULL; 190193267Sjkim return (FileList); 191193267Sjkim 192193267Sjkim#else 193193267Sjkim /* 194193267Sjkim * Linux/Unix cases - Wildcards are expanded by the shell automatically. 195193267Sjkim * Just return the filename in a null terminated list 196193267Sjkim */ 197193267Sjkim FileList[0] = AcpiOsAllocate (strlen (FileSpecifier) + 1); 198193267Sjkim strcpy (FileList[0], FileSpecifier); 199193267Sjkim FileList[1] = NULL; 200193267Sjkim 201193267Sjkim return (FileList); 202193267Sjkim#endif 203193267Sjkim} 204193267Sjkim 205193267Sjkim 206193267Sjkim/******************************************************************************* 207193267Sjkim * 208209746Sjkim * FUNCTION: AslDetectSourceFileType 209209746Sjkim * 210209746Sjkim * PARAMETERS: Info - Name/Handle for the file (must be open) 211209746Sjkim * 212209746Sjkim * RETURN: File Type 213209746Sjkim * 214209746Sjkim * DESCRIPTION: Determine the type of the input file. Either binary (contains 215209746Sjkim * non-ASCII characters), ASL file, or an ACPI Data Table file. 216209746Sjkim * 217209746Sjkim ******************************************************************************/ 218209746Sjkim 219212761Sjkimstatic UINT8 220209746SjkimAslDetectSourceFileType ( 221209746Sjkim ASL_FILE_INFO *Info) 222209746Sjkim{ 223209746Sjkim char *FileChar; 224209746Sjkim UINT8 Type; 225209746Sjkim ACPI_STATUS Status; 226209746Sjkim 227209746Sjkim 228209746Sjkim /* Check for 100% ASCII source file (comments are ignored) */ 229209746Sjkim 230209746Sjkim Status = FlCheckForAscii (Info); 231209746Sjkim if (ACPI_FAILURE (Status)) 232209746Sjkim { 233209746Sjkim printf ("Non-ascii input file - %s\n", Info->Filename); 234209746Sjkim Type = ASL_INPUT_TYPE_BINARY; 235209746Sjkim goto Cleanup; 236209746Sjkim } 237209746Sjkim 238209746Sjkim /* 239209746Sjkim * File is ASCII. Determine if this is an ASL file or an ACPI data 240209746Sjkim * table file. 241209746Sjkim */ 242209746Sjkim while (fgets (Gbl_CurrentLineBuffer, ASL_LINE_BUFFER_SIZE, Info->Handle)) 243209746Sjkim { 244209746Sjkim /* Uppercase the buffer for caseless compare */ 245209746Sjkim 246209746Sjkim FileChar = Gbl_CurrentLineBuffer; 247209746Sjkim while (*FileChar) 248209746Sjkim { 249209746Sjkim *FileChar = (char) toupper ((int) *FileChar); 250209746Sjkim FileChar++; 251209746Sjkim } 252209746Sjkim 253209746Sjkim /* Presence of "DefinitionBlock" indicates actual ASL code */ 254209746Sjkim 255209746Sjkim if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK")) 256209746Sjkim { 257209746Sjkim /* Appears to be an ASL file */ 258209746Sjkim 259209746Sjkim Type = ASL_INPUT_TYPE_ASCII_ASL; 260209746Sjkim goto Cleanup; 261209746Sjkim } 262209746Sjkim } 263209746Sjkim 264209746Sjkim /* Not an ASL source file, default to a data table source file */ 265209746Sjkim 266209746Sjkim Type = ASL_INPUT_TYPE_ASCII_DATA; 267209746Sjkim 268209746SjkimCleanup: 269209746Sjkim 270209746Sjkim /* Must seek back to the start of the file */ 271209746Sjkim 272209746Sjkim fseek (Info->Handle, 0, SEEK_SET); 273209746Sjkim return (Type); 274209746Sjkim} 275209746Sjkim 276209746Sjkim 277209746Sjkim/******************************************************************************* 278209746Sjkim * 279193267Sjkim * FUNCTION: AslDoOneFile 280193267Sjkim * 281193267Sjkim * PARAMETERS: Filename - Name of the file 282193267Sjkim * 283193267Sjkim * RETURN: Status 284193267Sjkim * 285193267Sjkim * DESCRIPTION: Process a single file - either disassemble, compile, or both 286193267Sjkim * 287193267Sjkim ******************************************************************************/ 288193267Sjkim 289193267SjkimACPI_STATUS 290193267SjkimAslDoOneFile ( 291193267Sjkim char *Filename) 292193267Sjkim{ 293193267Sjkim ACPI_STATUS Status; 294193267Sjkim 295193267Sjkim 296233250Sjkim /* Re-initialize "some" compiler/preprocessor globals */ 297193267Sjkim 298193267Sjkim AslInitializeGlobals (); 299233250Sjkim PrInitializeGlobals (); 300193267Sjkim 301233250Sjkim Gbl_Files[ASL_FILE_INPUT].Filename = Filename; 302233250Sjkim 303193267Sjkim /* 304193267Sjkim * AML Disassembly (Optional) 305193267Sjkim */ 306193267Sjkim if (Gbl_DisasmFlag || Gbl_GetAllTables) 307193267Sjkim { 308209746Sjkim /* ACPICA subsystem initialization */ 309193267Sjkim 310193267Sjkim Status = AdInitialize (); 311193267Sjkim if (ACPI_FAILURE (Status)) 312193267Sjkim { 313193267Sjkim return (Status); 314193267Sjkim } 315193267Sjkim 316193267Sjkim Status = AcpiAllocateRootTable (4); 317193267Sjkim if (ACPI_FAILURE (Status)) 318193267Sjkim { 319193267Sjkim AcpiOsPrintf ("Could not initialize ACPI Table Manager, %s\n", 320193267Sjkim AcpiFormatException (Status)); 321193267Sjkim return (Status); 322193267Sjkim } 323193267Sjkim 324193267Sjkim /* This is where the disassembly happens */ 325193267Sjkim 326193267Sjkim AcpiGbl_DbOpt_disasm = TRUE; 327193267Sjkim Status = AdAmlDisassemble (AslToFile, 328193267Sjkim Gbl_Files[ASL_FILE_INPUT].Filename, 329193267Sjkim Gbl_OutputFilenamePrefix, 330193267Sjkim &Gbl_Files[ASL_FILE_INPUT].Filename, 331193267Sjkim Gbl_GetAllTables); 332193267Sjkim if (ACPI_FAILURE (Status)) 333193267Sjkim { 334193267Sjkim return (Status); 335193267Sjkim } 336193267Sjkim 337193267Sjkim /* Shutdown compiler and ACPICA subsystem */ 338193267Sjkim 339193267Sjkim AeClearErrorLog (); 340212761Sjkim (void) AcpiTerminate (); 341193267Sjkim 342193267Sjkim /* 343193267Sjkim * Gbl_Files[ASL_FILE_INPUT].Filename was replaced with the 344193267Sjkim * .DSL disassembly file, which can now be compiled if requested 345193267Sjkim */ 346193267Sjkim if (Gbl_DoCompile) 347193267Sjkim { 348193267Sjkim AcpiOsPrintf ("\nCompiling \"%s\"\n", 349193267Sjkim Gbl_Files[ASL_FILE_INPUT].Filename); 350193267Sjkim } 351209746Sjkim else 352209746Sjkim { 353209746Sjkim Gbl_Files[ASL_FILE_INPUT].Filename = NULL; 354209746Sjkim return (AE_OK); 355209746Sjkim } 356193267Sjkim } 357193267Sjkim 358193267Sjkim /* 359209746Sjkim * Open the input file. Here, this should be an ASCII source file, 360209746Sjkim * either an ASL file or a Data Table file 361193267Sjkim */ 362209746Sjkim Status = FlOpenInputFile (Gbl_Files[ASL_FILE_INPUT].Filename); 363209746Sjkim if (ACPI_FAILURE (Status)) 364193267Sjkim { 365209746Sjkim AePrintErrorLog (ASL_FILE_STDERR); 366209746Sjkim return (AE_ERROR); 367209746Sjkim } 368209746Sjkim 369209746Sjkim /* Determine input file type */ 370209746Sjkim 371209746Sjkim Gbl_FileType = AslDetectSourceFileType (&Gbl_Files[ASL_FILE_INPUT]); 372209746Sjkim if (Gbl_FileType == ASL_INPUT_TYPE_BINARY) 373209746Sjkim { 374209746Sjkim return (AE_ERROR); 375209746Sjkim } 376209746Sjkim 377209746Sjkim /* 378209746Sjkim * If -p not specified, we will use the input filename as the 379209746Sjkim * output filename prefix 380209746Sjkim */ 381209746Sjkim if (Gbl_UseDefaultAmlFilename) 382209746Sjkim { 383209746Sjkim Gbl_OutputFilenamePrefix = Gbl_Files[ASL_FILE_INPUT].Filename; 384209746Sjkim } 385209746Sjkim 386209746Sjkim /* Open the optional output files (listings, etc.) */ 387209746Sjkim 388209746Sjkim Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix); 389209746Sjkim if (ACPI_FAILURE (Status)) 390209746Sjkim { 391209746Sjkim AePrintErrorLog (ASL_FILE_STDERR); 392209746Sjkim return (AE_ERROR); 393209746Sjkim } 394209746Sjkim 395209746Sjkim /* 396209746Sjkim * Compilation of ASL source versus DataTable source uses different 397209746Sjkim * compiler subsystems 398209746Sjkim */ 399209746Sjkim switch (Gbl_FileType) 400209746Sjkim { 401209746Sjkim /* 402209746Sjkim * Data Table Compilation 403209746Sjkim */ 404209746Sjkim case ASL_INPUT_TYPE_ASCII_DATA: 405209746Sjkim 406209746Sjkim Status = DtDoCompile (); 407234623Sjkim if (ACPI_FAILURE (Status)) 408234623Sjkim { 409234623Sjkim return (Status); 410234623Sjkim } 411209746Sjkim 412209746Sjkim if (Gbl_Signature) 413193267Sjkim { 414209746Sjkim ACPI_FREE (Gbl_Signature); 415209746Sjkim Gbl_Signature = NULL; 416193267Sjkim } 417234623Sjkim 418234623Sjkim /* Check if any errors occurred during compile */ 419234623Sjkim 420234623Sjkim Status = AslCheckForErrorExit (); 421234623Sjkim if (ACPI_FAILURE (Status)) 422234623Sjkim { 423234623Sjkim return (Status); 424234623Sjkim } 425234623Sjkim 426234623Sjkim /* Cleanup (for next source file) and exit */ 427234623Sjkim 428209746Sjkim AeClearErrorLog (); 429233250Sjkim PrTerminatePreprocessor (); 430209746Sjkim return (Status); 431193267Sjkim 432209746Sjkim /* 433234623Sjkim * ASL Compilation 434209746Sjkim */ 435209746Sjkim case ASL_INPUT_TYPE_ASCII_ASL: 436193267Sjkim 437209746Sjkim /* ACPICA subsystem initialization */ 438209746Sjkim 439193267Sjkim Status = AdInitialize (); 440193267Sjkim if (ACPI_FAILURE (Status)) 441193267Sjkim { 442193267Sjkim return (Status); 443193267Sjkim } 444193267Sjkim 445234623Sjkim (void) CmDoCompile (); 446212761Sjkim (void) AcpiTerminate (); 447193267Sjkim 448234623Sjkim /* Check if any errors occurred during compile */ 449234623Sjkim 450234623Sjkim Status = AslCheckForErrorExit (); 451234623Sjkim if (ACPI_FAILURE (Status)) 452193267Sjkim { 453234623Sjkim return (Status); 454193267Sjkim } 455193267Sjkim 456234623Sjkim /* Cleanup (for next source file) and exit */ 457234623Sjkim 458193267Sjkim AeClearErrorLog (); 459233250Sjkim PrTerminatePreprocessor (); 460209746Sjkim return (AE_OK); 461209746Sjkim 462209746Sjkim case ASL_INPUT_TYPE_BINARY: 463209746Sjkim 464209746Sjkim AePrintErrorLog (ASL_FILE_STDERR); 465209746Sjkim return (AE_ERROR); 466209746Sjkim 467209746Sjkim default: 468209746Sjkim printf ("Unknown file type %X\n", Gbl_FileType); 469209746Sjkim return (AE_ERROR); 470193267Sjkim } 471193267Sjkim} 472193267Sjkim 473193267Sjkim 474193267Sjkim/******************************************************************************* 475193267Sjkim * 476193267Sjkim * FUNCTION: AslDoOnePathname 477193267Sjkim * 478193267Sjkim * PARAMETERS: Pathname - Full pathname, possibly with wildcards 479193267Sjkim * 480193267Sjkim * RETURN: Status 481193267Sjkim * 482193267Sjkim * DESCRIPTION: Process one pathname, possible terminated with a wildcard 483193267Sjkim * specification. If a wildcard, it is expanded and the multiple 484193267Sjkim * files are processed. 485193267Sjkim * 486193267Sjkim ******************************************************************************/ 487193267Sjkim 488193267SjkimACPI_STATUS 489193267SjkimAslDoOnePathname ( 490210976Sjkim char *Pathname, 491210976Sjkim ASL_PATHNAME_CALLBACK PathCallback) 492193267Sjkim{ 493209746Sjkim ACPI_STATUS Status = AE_OK; 494212761Sjkim char **WildcardList; 495193267Sjkim char *Filename; 496193267Sjkim char *FullPathname; 497193267Sjkim 498193267Sjkim 499193267Sjkim /* Split incoming path into a directory/filename combo */ 500193267Sjkim 501193267Sjkim Status = FlSplitInputPathname (Pathname, &Gbl_DirectoryPath, &Filename); 502193267Sjkim if (ACPI_FAILURE (Status)) 503193267Sjkim { 504193267Sjkim return (Status); 505193267Sjkim } 506193267Sjkim 507193267Sjkim /* Expand possible wildcard into a file list (Windows/DOS only) */ 508193267Sjkim 509212761Sjkim WildcardList = AsDoWildcard (Gbl_DirectoryPath, Filename); 510212761Sjkim while (*WildcardList) 511193267Sjkim { 512193267Sjkim FullPathname = ACPI_ALLOCATE ( 513212761Sjkim strlen (Gbl_DirectoryPath) + strlen (*WildcardList) + 1); 514193267Sjkim 515193267Sjkim /* Construct a full path to the file */ 516193267Sjkim 517193267Sjkim strcpy (FullPathname, Gbl_DirectoryPath); 518212761Sjkim strcat (FullPathname, *WildcardList); 519193267Sjkim 520193267Sjkim /* 521193267Sjkim * If -p not specified, we will use the input filename as the 522193267Sjkim * output filename prefix 523193267Sjkim */ 524193267Sjkim if (Gbl_UseDefaultAmlFilename) 525193267Sjkim { 526193267Sjkim Gbl_OutputFilenamePrefix = FullPathname; 527193267Sjkim } 528193267Sjkim 529209746Sjkim /* Save status from all compiles */ 530193267Sjkim 531210976Sjkim Status |= (*PathCallback) (FullPathname); 532209746Sjkim 533193267Sjkim ACPI_FREE (FullPathname); 534212761Sjkim ACPI_FREE (*WildcardList); 535212761Sjkim *WildcardList = NULL; 536212761Sjkim WildcardList++; 537193267Sjkim } 538193267Sjkim 539193267Sjkim ACPI_FREE (Gbl_DirectoryPath); 540193267Sjkim ACPI_FREE (Filename); 541209746Sjkim return (Status); 542193267Sjkim} 543193267Sjkim 544234623Sjkim 545234623Sjkim/******************************************************************************* 546234623Sjkim * 547234623Sjkim * FUNCTION: AslCheckForErrorExit 548234623Sjkim * 549234623Sjkim * PARAMETERS: None. Examines global exception count array 550234623Sjkim * 551234623Sjkim * RETURN: Status 552234623Sjkim * 553234623Sjkim * DESCRIPTION: Determine if compiler should abort with error status 554234623Sjkim * 555234623Sjkim ******************************************************************************/ 556234623Sjkim 557234623SjkimACPI_STATUS 558234623SjkimAslCheckForErrorExit ( 559234623Sjkim void) 560234623Sjkim{ 561234623Sjkim 562234623Sjkim /* 563234623Sjkim * Return non-zero exit code if there have been errors, unless the 564234623Sjkim * global ignore error flag has been set 565234623Sjkim */ 566234623Sjkim if (!Gbl_IgnoreErrors) 567234623Sjkim { 568234623Sjkim if (Gbl_ExceptionCount[ASL_ERROR] > 0) 569234623Sjkim { 570234623Sjkim return (AE_ERROR); 571234623Sjkim } 572234623Sjkim 573234623Sjkim /* Optionally treat warnings as errors */ 574234623Sjkim 575234623Sjkim if (Gbl_WarningsAsErrors) 576234623Sjkim { 577234623Sjkim if ((Gbl_ExceptionCount[ASL_WARNING] > 0) || 578234623Sjkim (Gbl_ExceptionCount[ASL_WARNING2] > 0) || 579234623Sjkim (Gbl_ExceptionCount[ASL_WARNING3] > 0)) 580234623Sjkim { 581234623Sjkim return (AE_ERROR); 582234623Sjkim } 583234623Sjkim } 584234623Sjkim } 585234623Sjkim 586234623Sjkim return (AE_OK); 587234623Sjkim} 588