aslstartup.c revision 250838
1193267Sjkim/****************************************************************************** 2193267Sjkim * 3193267Sjkim * Module Name: aslstartup - Compiler startup routines, called from main 4193267Sjkim * 5193267Sjkim *****************************************************************************/ 6193267Sjkim 7217365Sjkim/* 8245582Sjkim * Copyright (C) 2000 - 2013, 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/acdisasm.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 70246849Sjkimstatic ACPI_STATUS 71246849SjkimAslDoDisassembly ( 72246849Sjkim void); 73209746Sjkim 74246849Sjkim 75193267Sjkim/******************************************************************************* 76193267Sjkim * 77193267Sjkim * FUNCTION: AslInitializeGlobals 78193267Sjkim * 79193267Sjkim * PARAMETERS: None 80193267Sjkim * 81193267Sjkim * RETURN: None 82193267Sjkim * 83193267Sjkim * DESCRIPTION: Re-initialize globals needed to restart the compiler. This 84193267Sjkim * allows multiple files to be disassembled and/or compiled. 85193267Sjkim * 86193267Sjkim ******************************************************************************/ 87193267Sjkim 88209746Sjkimvoid 89193267SjkimAslInitializeGlobals ( 90193267Sjkim void) 91193267Sjkim{ 92193267Sjkim UINT32 i; 93193267Sjkim 94193267Sjkim 95193267Sjkim /* Init compiler globals */ 96193267Sjkim 97193267Sjkim Gbl_CurrentColumn = 0; 98193267Sjkim Gbl_CurrentLineNumber = 1; 99193267Sjkim Gbl_LogicalLineNumber = 1; 100193267Sjkim Gbl_CurrentLineOffset = 0; 101209746Sjkim Gbl_InputFieldCount = 0; 102233250Sjkim Gbl_InputByteCount = 0; 103233250Sjkim Gbl_NsLookupCount = 0; 104193267Sjkim Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 105193267Sjkim 106193267Sjkim Gbl_ErrorLog = NULL; 107193267Sjkim Gbl_NextError = NULL; 108209746Sjkim Gbl_Signature = NULL; 109209746Sjkim Gbl_FileType = 0; 110193267Sjkim 111233250Sjkim TotalExecutableOpcodes = 0; 112233250Sjkim TotalNamedObjects = 0; 113233250Sjkim TotalKeywords = 0; 114233250Sjkim TotalParseNodes = 0; 115233250Sjkim TotalMethods = 0; 116233250Sjkim TotalAllocations = 0; 117233250Sjkim TotalAllocated = 0; 118233250Sjkim TotalFolds = 0; 119233250Sjkim 120193267Sjkim AslGbl_NextEvent = 0; 121193267Sjkim for (i = 0; i < ASL_NUM_REPORT_LEVELS; i++) 122193267Sjkim { 123193267Sjkim Gbl_ExceptionCount[i] = 0; 124193267Sjkim } 125193267Sjkim 126233250Sjkim for (i = ASL_FILE_INPUT; i <= ASL_MAX_FILE_TYPE; i++) 127233250Sjkim { 128233250Sjkim Gbl_Files[i].Handle = NULL; 129233250Sjkim Gbl_Files[i].Filename = NULL; 130233250Sjkim } 131193267Sjkim} 132193267Sjkim 133193267Sjkim 134193267Sjkim/****************************************************************************** 135193267Sjkim * 136193267Sjkim * FUNCTION: AsDoWildcard 137193267Sjkim * 138193267Sjkim * PARAMETERS: None 139193267Sjkim * 140193267Sjkim * RETURN: None 141193267Sjkim * 142193267Sjkim * DESCRIPTION: Process files via wildcards. This function is for the Windows 143193267Sjkim * case only. 144193267Sjkim * 145193267Sjkim ******************************************************************************/ 146193267Sjkim 147193267Sjkimstatic char ** 148193267SjkimAsDoWildcard ( 149193267Sjkim char *DirectoryPathname, 150193267Sjkim char *FileSpecifier) 151193267Sjkim{ 152193267Sjkim#ifdef WIN32 153193267Sjkim void *DirInfo; 154193267Sjkim char *Filename; 155212761Sjkim int FileCount; 156193267Sjkim 157193267Sjkim 158193267Sjkim FileCount = 0; 159193267Sjkim 160193267Sjkim /* Open parent directory */ 161193267Sjkim 162193267Sjkim DirInfo = AcpiOsOpenDirectory (DirectoryPathname, FileSpecifier, REQUEST_FILE_ONLY); 163193267Sjkim if (!DirInfo) 164193267Sjkim { 165193267Sjkim /* Either the directory of file does not exist */ 166193267Sjkim 167193267Sjkim Gbl_Files[ASL_FILE_INPUT].Filename = FileSpecifier; 168193267Sjkim FlFileError (ASL_FILE_INPUT, ASL_MSG_OPEN); 169193267Sjkim AslAbort (); 170193267Sjkim } 171193267Sjkim 172193267Sjkim /* Process each file that matches the wildcard specification */ 173193267Sjkim 174193267Sjkim while ((Filename = AcpiOsGetNextFilename (DirInfo))) 175193267Sjkim { 176193267Sjkim /* Add the filename to the file list */ 177193267Sjkim 178193267Sjkim FileList[FileCount] = AcpiOsAllocate (strlen (Filename) + 1); 179193267Sjkim strcpy (FileList[FileCount], Filename); 180193267Sjkim FileCount++; 181193267Sjkim 182193267Sjkim if (FileCount >= ASL_MAX_FILES) 183193267Sjkim { 184193267Sjkim printf ("Max files reached\n"); 185193267Sjkim FileList[0] = NULL; 186193267Sjkim return (FileList); 187193267Sjkim } 188193267Sjkim } 189193267Sjkim 190193267Sjkim /* Cleanup */ 191193267Sjkim 192193267Sjkim AcpiOsCloseDirectory (DirInfo); 193193267Sjkim FileList[FileCount] = NULL; 194193267Sjkim return (FileList); 195193267Sjkim 196193267Sjkim#else 197193267Sjkim /* 198193267Sjkim * Linux/Unix cases - Wildcards are expanded by the shell automatically. 199193267Sjkim * Just return the filename in a null terminated list 200193267Sjkim */ 201193267Sjkim FileList[0] = AcpiOsAllocate (strlen (FileSpecifier) + 1); 202193267Sjkim strcpy (FileList[0], FileSpecifier); 203193267Sjkim FileList[1] = NULL; 204193267Sjkim 205193267Sjkim return (FileList); 206193267Sjkim#endif 207193267Sjkim} 208193267Sjkim 209193267Sjkim 210193267Sjkim/******************************************************************************* 211193267Sjkim * 212209746Sjkim * FUNCTION: AslDetectSourceFileType 213209746Sjkim * 214209746Sjkim * PARAMETERS: Info - Name/Handle for the file (must be open) 215209746Sjkim * 216209746Sjkim * RETURN: File Type 217209746Sjkim * 218209746Sjkim * DESCRIPTION: Determine the type of the input file. Either binary (contains 219209746Sjkim * non-ASCII characters), ASL file, or an ACPI Data Table file. 220209746Sjkim * 221209746Sjkim ******************************************************************************/ 222209746Sjkim 223212761Sjkimstatic UINT8 224209746SjkimAslDetectSourceFileType ( 225209746Sjkim ASL_FILE_INFO *Info) 226209746Sjkim{ 227209746Sjkim char *FileChar; 228209746Sjkim UINT8 Type; 229209746Sjkim ACPI_STATUS Status; 230209746Sjkim 231209746Sjkim 232246849Sjkim /* Check for a valid binary ACPI table */ 233246849Sjkim 234246849Sjkim Status = FlCheckForAcpiTable (Info->Handle); 235246849Sjkim if (ACPI_SUCCESS (Status)) 236246849Sjkim { 237246849Sjkim Type = ASL_INPUT_TYPE_ACPI_TABLE; 238246849Sjkim goto Cleanup; 239246849Sjkim } 240246849Sjkim 241209746Sjkim /* Check for 100% ASCII source file (comments are ignored) */ 242209746Sjkim 243235945Sjkim Status = FlCheckForAscii (Info->Handle, Info->Filename, TRUE); 244209746Sjkim if (ACPI_FAILURE (Status)) 245209746Sjkim { 246209746Sjkim printf ("Non-ascii input file - %s\n", Info->Filename); 247241973Sjkim 248241973Sjkim if (!Gbl_IgnoreErrors) 249241973Sjkim { 250241973Sjkim Type = ASL_INPUT_TYPE_BINARY; 251241973Sjkim goto Cleanup; 252241973Sjkim } 253209746Sjkim } 254209746Sjkim 255209746Sjkim /* 256209746Sjkim * File is ASCII. Determine if this is an ASL file or an ACPI data 257209746Sjkim * table file. 258209746Sjkim */ 259240716Sjkim while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle)) 260209746Sjkim { 261209746Sjkim /* Uppercase the buffer for caseless compare */ 262209746Sjkim 263209746Sjkim FileChar = Gbl_CurrentLineBuffer; 264209746Sjkim while (*FileChar) 265209746Sjkim { 266209746Sjkim *FileChar = (char) toupper ((int) *FileChar); 267209746Sjkim FileChar++; 268209746Sjkim } 269209746Sjkim 270209746Sjkim /* Presence of "DefinitionBlock" indicates actual ASL code */ 271209746Sjkim 272209746Sjkim if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK")) 273209746Sjkim { 274209746Sjkim /* Appears to be an ASL file */ 275209746Sjkim 276209746Sjkim Type = ASL_INPUT_TYPE_ASCII_ASL; 277209746Sjkim goto Cleanup; 278209746Sjkim } 279209746Sjkim } 280209746Sjkim 281209746Sjkim /* Not an ASL source file, default to a data table source file */ 282209746Sjkim 283209746Sjkim Type = ASL_INPUT_TYPE_ASCII_DATA; 284209746Sjkim 285209746SjkimCleanup: 286209746Sjkim 287209746Sjkim /* Must seek back to the start of the file */ 288209746Sjkim 289209746Sjkim fseek (Info->Handle, 0, SEEK_SET); 290209746Sjkim return (Type); 291209746Sjkim} 292209746Sjkim 293209746Sjkim 294209746Sjkim/******************************************************************************* 295209746Sjkim * 296246849Sjkim * FUNCTION: AslDoDisassembly 297246849Sjkim * 298246849Sjkim * PARAMETERS: None 299246849Sjkim * 300246849Sjkim * RETURN: Status 301246849Sjkim * 302246849Sjkim * DESCRIPTION: Initiate AML file disassembly. Uses ACPICA subsystem to build 303246849Sjkim * namespace. 304246849Sjkim * 305246849Sjkim ******************************************************************************/ 306246849Sjkim 307246849Sjkimstatic ACPI_STATUS 308246849SjkimAslDoDisassembly ( 309246849Sjkim void) 310246849Sjkim{ 311246849Sjkim ACPI_STATUS Status; 312246849Sjkim 313246849Sjkim 314246849Sjkim /* ACPICA subsystem initialization */ 315246849Sjkim 316246849Sjkim Status = AdInitialize (); 317246849Sjkim if (ACPI_FAILURE (Status)) 318246849Sjkim { 319246849Sjkim return (Status); 320246849Sjkim } 321246849Sjkim 322246849Sjkim Status = AcpiAllocateRootTable (4); 323246849Sjkim if (ACPI_FAILURE (Status)) 324246849Sjkim { 325246849Sjkim AcpiOsPrintf ("Could not initialize ACPI Table Manager, %s\n", 326246849Sjkim AcpiFormatException (Status)); 327246849Sjkim return (Status); 328246849Sjkim } 329246849Sjkim 330246849Sjkim /* This is where the disassembly happens */ 331246849Sjkim 332246849Sjkim AcpiGbl_DbOpt_disasm = TRUE; 333246849Sjkim Status = AdAmlDisassemble (AslToFile, 334246849Sjkim Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_OutputFilenamePrefix, 335246849Sjkim &Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_GetAllTables); 336246849Sjkim if (ACPI_FAILURE (Status)) 337246849Sjkim { 338246849Sjkim return (Status); 339246849Sjkim } 340246849Sjkim 341246849Sjkim /* Check if any control methods were unresolved */ 342246849Sjkim 343246849Sjkim AcpiDmUnresolvedWarning (0); 344246849Sjkim 345246849Sjkim#if 0 346246849Sjkim /* TBD: Handle additional output files for disassembler */ 347246849Sjkim 348246849Sjkim Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix); 349246849Sjkim NsDisplayNamespace (); 350246849Sjkim#endif 351246849Sjkim 352246849Sjkim /* Shutdown compiler and ACPICA subsystem */ 353246849Sjkim 354246849Sjkim AeClearErrorLog (); 355246849Sjkim (void) AcpiTerminate (); 356246849Sjkim 357246849Sjkim /* 358246849Sjkim * Gbl_Files[ASL_FILE_INPUT].Filename was replaced with the 359246849Sjkim * .DSL disassembly file, which can now be compiled if requested 360246849Sjkim */ 361246849Sjkim if (Gbl_DoCompile) 362246849Sjkim { 363246849Sjkim AcpiOsPrintf ("\nCompiling \"%s\"\n", 364246849Sjkim Gbl_Files[ASL_FILE_INPUT].Filename); 365246849Sjkim return (AE_CTRL_CONTINUE); 366246849Sjkim } 367246849Sjkim 368246849Sjkim ACPI_FREE (Gbl_Files[ASL_FILE_INPUT].Filename); 369246849Sjkim Gbl_Files[ASL_FILE_INPUT].Filename = NULL; 370246849Sjkim return (AE_OK); 371246849Sjkim} 372246849Sjkim 373246849Sjkim 374246849Sjkim/******************************************************************************* 375246849Sjkim * 376193267Sjkim * FUNCTION: AslDoOneFile 377193267Sjkim * 378193267Sjkim * PARAMETERS: Filename - Name of the file 379193267Sjkim * 380193267Sjkim * RETURN: Status 381193267Sjkim * 382193267Sjkim * DESCRIPTION: Process a single file - either disassemble, compile, or both 383193267Sjkim * 384193267Sjkim ******************************************************************************/ 385193267Sjkim 386193267SjkimACPI_STATUS 387193267SjkimAslDoOneFile ( 388193267Sjkim char *Filename) 389193267Sjkim{ 390193267Sjkim ACPI_STATUS Status; 391193267Sjkim 392193267Sjkim 393233250Sjkim /* Re-initialize "some" compiler/preprocessor globals */ 394193267Sjkim 395193267Sjkim AslInitializeGlobals (); 396233250Sjkim PrInitializeGlobals (); 397193267Sjkim 398233250Sjkim Gbl_Files[ASL_FILE_INPUT].Filename = Filename; 399233250Sjkim 400193267Sjkim /* 401193267Sjkim * AML Disassembly (Optional) 402193267Sjkim */ 403193267Sjkim if (Gbl_DisasmFlag || Gbl_GetAllTables) 404193267Sjkim { 405246849Sjkim Status = AslDoDisassembly (); 406246849Sjkim if (Status != AE_CTRL_CONTINUE) 407193267Sjkim { 408193267Sjkim return (Status); 409193267Sjkim } 410193267Sjkim } 411193267Sjkim 412193267Sjkim /* 413209746Sjkim * Open the input file. Here, this should be an ASCII source file, 414209746Sjkim * either an ASL file or a Data Table file 415193267Sjkim */ 416209746Sjkim Status = FlOpenInputFile (Gbl_Files[ASL_FILE_INPUT].Filename); 417209746Sjkim if (ACPI_FAILURE (Status)) 418193267Sjkim { 419209746Sjkim AePrintErrorLog (ASL_FILE_STDERR); 420209746Sjkim return (AE_ERROR); 421209746Sjkim } 422209746Sjkim 423209746Sjkim /* Determine input file type */ 424209746Sjkim 425209746Sjkim Gbl_FileType = AslDetectSourceFileType (&Gbl_Files[ASL_FILE_INPUT]); 426209746Sjkim if (Gbl_FileType == ASL_INPUT_TYPE_BINARY) 427209746Sjkim { 428209746Sjkim return (AE_ERROR); 429209746Sjkim } 430209746Sjkim 431209746Sjkim /* 432209746Sjkim * If -p not specified, we will use the input filename as the 433209746Sjkim * output filename prefix 434209746Sjkim */ 435209746Sjkim if (Gbl_UseDefaultAmlFilename) 436209746Sjkim { 437209746Sjkim Gbl_OutputFilenamePrefix = Gbl_Files[ASL_FILE_INPUT].Filename; 438209746Sjkim } 439209746Sjkim 440209746Sjkim /* Open the optional output files (listings, etc.) */ 441209746Sjkim 442209746Sjkim Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix); 443209746Sjkim if (ACPI_FAILURE (Status)) 444209746Sjkim { 445209746Sjkim AePrintErrorLog (ASL_FILE_STDERR); 446209746Sjkim return (AE_ERROR); 447209746Sjkim } 448209746Sjkim 449209746Sjkim /* 450209746Sjkim * Compilation of ASL source versus DataTable source uses different 451209746Sjkim * compiler subsystems 452209746Sjkim */ 453209746Sjkim switch (Gbl_FileType) 454209746Sjkim { 455209746Sjkim /* 456209746Sjkim * Data Table Compilation 457209746Sjkim */ 458209746Sjkim case ASL_INPUT_TYPE_ASCII_DATA: 459209746Sjkim 460209746Sjkim Status = DtDoCompile (); 461234623Sjkim if (ACPI_FAILURE (Status)) 462234623Sjkim { 463234623Sjkim return (Status); 464234623Sjkim } 465209746Sjkim 466209746Sjkim if (Gbl_Signature) 467193267Sjkim { 468209746Sjkim ACPI_FREE (Gbl_Signature); 469209746Sjkim Gbl_Signature = NULL; 470193267Sjkim } 471234623Sjkim 472234623Sjkim /* Check if any errors occurred during compile */ 473234623Sjkim 474234623Sjkim Status = AslCheckForErrorExit (); 475234623Sjkim if (ACPI_FAILURE (Status)) 476234623Sjkim { 477234623Sjkim return (Status); 478234623Sjkim } 479234623Sjkim 480234623Sjkim /* Cleanup (for next source file) and exit */ 481234623Sjkim 482209746Sjkim AeClearErrorLog (); 483233250Sjkim PrTerminatePreprocessor (); 484209746Sjkim return (Status); 485193267Sjkim 486209746Sjkim /* 487234623Sjkim * ASL Compilation 488209746Sjkim */ 489209746Sjkim case ASL_INPUT_TYPE_ASCII_ASL: 490193267Sjkim 491209746Sjkim /* ACPICA subsystem initialization */ 492209746Sjkim 493193267Sjkim Status = AdInitialize (); 494193267Sjkim if (ACPI_FAILURE (Status)) 495193267Sjkim { 496193267Sjkim return (Status); 497193267Sjkim } 498193267Sjkim 499234623Sjkim (void) CmDoCompile (); 500212761Sjkim (void) AcpiTerminate (); 501193267Sjkim 502234623Sjkim /* Check if any errors occurred during compile */ 503234623Sjkim 504234623Sjkim Status = AslCheckForErrorExit (); 505234623Sjkim if (ACPI_FAILURE (Status)) 506193267Sjkim { 507234623Sjkim return (Status); 508193267Sjkim } 509193267Sjkim 510234623Sjkim /* Cleanup (for next source file) and exit */ 511234623Sjkim 512193267Sjkim AeClearErrorLog (); 513233250Sjkim PrTerminatePreprocessor (); 514209746Sjkim return (AE_OK); 515209746Sjkim 516246849Sjkim /* 517246849Sjkim * Binary ACPI table was auto-detected, disassemble it 518246849Sjkim */ 519246849Sjkim case ASL_INPUT_TYPE_ACPI_TABLE: 520246849Sjkim 521246849Sjkim /* We have what appears to be an ACPI table, disassemble it */ 522246849Sjkim 523246849Sjkim FlCloseFile (ASL_FILE_INPUT); 524246849Sjkim Gbl_DoCompile = FALSE; 525246849Sjkim Gbl_DisasmFlag = TRUE; 526246849Sjkim Status = AslDoDisassembly (); 527246849Sjkim return (Status); 528246849Sjkim 529246849Sjkim /* Unknown binary table */ 530246849Sjkim 531209746Sjkim case ASL_INPUT_TYPE_BINARY: 532209746Sjkim 533209746Sjkim AePrintErrorLog (ASL_FILE_STDERR); 534209746Sjkim return (AE_ERROR); 535209746Sjkim 536209746Sjkim default: 537250838Sjkim 538209746Sjkim printf ("Unknown file type %X\n", Gbl_FileType); 539209746Sjkim return (AE_ERROR); 540193267Sjkim } 541193267Sjkim} 542193267Sjkim 543193267Sjkim 544193267Sjkim/******************************************************************************* 545193267Sjkim * 546193267Sjkim * FUNCTION: AslDoOnePathname 547193267Sjkim * 548193267Sjkim * PARAMETERS: Pathname - Full pathname, possibly with wildcards 549193267Sjkim * 550193267Sjkim * RETURN: Status 551193267Sjkim * 552193267Sjkim * DESCRIPTION: Process one pathname, possible terminated with a wildcard 553193267Sjkim * specification. If a wildcard, it is expanded and the multiple 554193267Sjkim * files are processed. 555193267Sjkim * 556193267Sjkim ******************************************************************************/ 557193267Sjkim 558193267SjkimACPI_STATUS 559193267SjkimAslDoOnePathname ( 560210976Sjkim char *Pathname, 561210976Sjkim ASL_PATHNAME_CALLBACK PathCallback) 562193267Sjkim{ 563209746Sjkim ACPI_STATUS Status = AE_OK; 564212761Sjkim char **WildcardList; 565193267Sjkim char *Filename; 566193267Sjkim char *FullPathname; 567193267Sjkim 568193267Sjkim 569193267Sjkim /* Split incoming path into a directory/filename combo */ 570193267Sjkim 571193267Sjkim Status = FlSplitInputPathname (Pathname, &Gbl_DirectoryPath, &Filename); 572193267Sjkim if (ACPI_FAILURE (Status)) 573193267Sjkim { 574193267Sjkim return (Status); 575193267Sjkim } 576193267Sjkim 577193267Sjkim /* Expand possible wildcard into a file list (Windows/DOS only) */ 578193267Sjkim 579212761Sjkim WildcardList = AsDoWildcard (Gbl_DirectoryPath, Filename); 580212761Sjkim while (*WildcardList) 581193267Sjkim { 582193267Sjkim FullPathname = ACPI_ALLOCATE ( 583212761Sjkim strlen (Gbl_DirectoryPath) + strlen (*WildcardList) + 1); 584193267Sjkim 585193267Sjkim /* Construct a full path to the file */ 586193267Sjkim 587193267Sjkim strcpy (FullPathname, Gbl_DirectoryPath); 588212761Sjkim strcat (FullPathname, *WildcardList); 589193267Sjkim 590193267Sjkim /* 591193267Sjkim * If -p not specified, we will use the input filename as the 592193267Sjkim * output filename prefix 593193267Sjkim */ 594193267Sjkim if (Gbl_UseDefaultAmlFilename) 595193267Sjkim { 596193267Sjkim Gbl_OutputFilenamePrefix = FullPathname; 597193267Sjkim } 598193267Sjkim 599209746Sjkim /* Save status from all compiles */ 600193267Sjkim 601210976Sjkim Status |= (*PathCallback) (FullPathname); 602209746Sjkim 603193267Sjkim ACPI_FREE (FullPathname); 604212761Sjkim ACPI_FREE (*WildcardList); 605212761Sjkim *WildcardList = NULL; 606212761Sjkim WildcardList++; 607193267Sjkim } 608193267Sjkim 609193267Sjkim ACPI_FREE (Gbl_DirectoryPath); 610193267Sjkim ACPI_FREE (Filename); 611209746Sjkim return (Status); 612193267Sjkim} 613193267Sjkim 614234623Sjkim 615234623Sjkim/******************************************************************************* 616234623Sjkim * 617234623Sjkim * FUNCTION: AslCheckForErrorExit 618234623Sjkim * 619234623Sjkim * PARAMETERS: None. Examines global exception count array 620234623Sjkim * 621234623Sjkim * RETURN: Status 622234623Sjkim * 623234623Sjkim * DESCRIPTION: Determine if compiler should abort with error status 624234623Sjkim * 625234623Sjkim ******************************************************************************/ 626234623Sjkim 627234623SjkimACPI_STATUS 628234623SjkimAslCheckForErrorExit ( 629234623Sjkim void) 630234623Sjkim{ 631234623Sjkim 632234623Sjkim /* 633234623Sjkim * Return non-zero exit code if there have been errors, unless the 634234623Sjkim * global ignore error flag has been set 635234623Sjkim */ 636234623Sjkim if (!Gbl_IgnoreErrors) 637234623Sjkim { 638234623Sjkim if (Gbl_ExceptionCount[ASL_ERROR] > 0) 639234623Sjkim { 640234623Sjkim return (AE_ERROR); 641234623Sjkim } 642234623Sjkim 643234623Sjkim /* Optionally treat warnings as errors */ 644234623Sjkim 645234623Sjkim if (Gbl_WarningsAsErrors) 646234623Sjkim { 647234623Sjkim if ((Gbl_ExceptionCount[ASL_WARNING] > 0) || 648234623Sjkim (Gbl_ExceptionCount[ASL_WARNING2] > 0) || 649234623Sjkim (Gbl_ExceptionCount[ASL_WARNING3] > 0)) 650234623Sjkim { 651234623Sjkim return (AE_ERROR); 652234623Sjkim } 653234623Sjkim } 654234623Sjkim } 655234623Sjkim 656234623Sjkim return (AE_OK); 657234623Sjkim} 658