1 2 /****************************************************************************** 3 * 4 * Module Name: aslmain - compiler main and utilities 5 * 6 *****************************************************************************/ 7 8 /* 9 * Copyright (C) 2000 - 2011, Intel Corp. 10 * All rights reserved. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 1. Redistributions of source code must retain the above copyright 16 * notice, this list of conditions, and the following disclaimer, 17 * without modification. 18 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 19 * substantially similar to the "NO WARRANTY" disclaimer below 20 * ("Disclaimer") and any redistribution must be conditioned upon 21 * including a substantially similar Disclaimer requirement for further 22 * binary redistribution. 23 * 3. Neither the names of the above-listed copyright holders nor the names 24 * of any contributors may be used to endorse or promote products derived 25 * from this software without specific prior written permission. 26 * 27 * Alternatively, this software may be distributed under the terms of the 28 * GNU General Public License ("GPL") version 2 as published by the Free 29 * Software Foundation. 30 * 31 * NO WARRANTY 32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 33 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 35 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 36 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 41 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 42 * POSSIBILITY OF SUCH DAMAGES. 43 */ 44 45 46 #define _DECLARE_GLOBALS 47 48 #include <contrib/dev/acpica/compiler/aslcompiler.h> 49 #include <contrib/dev/acpica/include/acapps.h> 50 #include <contrib/dev/acpica/include/acdisasm.h> 51 52 #ifdef _DEBUG 53 #include <crtdbg.h> 54 #endif 55 56 #define _COMPONENT ACPI_COMPILER 57 ACPI_MODULE_NAME ("aslmain") 58 59 /* Local prototypes */ 60 61 static void 62 Options ( 63 void); 64 65 static void 66 HelpMessage ( 67 void); 68 69 static void 70 Usage ( 71 void); 72 73 static void 74 AslInitialize ( 75 void); 76 77 static int 78 AslCommandLine ( 79 int argc, 80 char **argv); 81 82 static int 83 AslDoOptions ( 84 int argc, 85 char **argv, 86 BOOLEAN IsResponseFile); 87 88 static void 89 AslMergeOptionTokens ( 90 char *InBuffer, 91 char *OutBuffer); 92 93 static int 94 AslDoResponseFile ( 95 char *Filename); 96 97 98 #define ASL_TOKEN_SEPARATORS " \t\n" 99 #define ASL_SUPPORTED_OPTIONS "@:2b:c:d^e:fgh^i^I:l^no:p:r:s:t:T:v:w:x:z" 100 101 102 /******************************************************************************* 103 * 104 * FUNCTION: Options 105 * 106 * PARAMETERS: None 107 * 108 * RETURN: None 109 * 110 * DESCRIPTION: Display option help message 111 * 112 ******************************************************************************/ 113 114 static void 115 Options ( 116 void) 117 { 118 119 printf ("Global:\n"); 120 printf (" -@<file> Specify command file\n"); 121 printf (" -I<dir> Specify additional include directory\n"); 122 123 printf ("\nGeneral Output:\n"); 124 printf (" -p<prefix> Specify path/filename prefix for all output files\n"); 125 printf (" -va Disable all errors and warnings (summary only)\n"); 126 printf (" -vi Less verbose errors and warnings for use with IDEs\n"); 127 printf (" -vo Enable optimization comments\n"); 128 printf (" -vr Disable remarks\n"); 129 printf (" -vs Disable signon\n"); 130 printf (" -w<1|2|3> Set warning reporting level\n"); 131 132 printf ("\nAML Output Files:\n"); 133 printf (" -s<a|c> Create AML in assembler or C source file (*.asm or *.c)\n"); 134 printf (" -i<a|c> Create assembler or C include file (*.inc or *.h)\n"); 135 printf (" -t<a|c|s> Create AML in assembler, C, or ASL hex table (*.hex)\n"); 136 137 printf ("\nAML Code Generation:\n"); 138 printf (" -oa Disable all optimizations (compatibility mode)\n"); 139 printf (" -of Disable constant folding\n"); 140 printf (" -oi Disable integer optimization to Zero/One/Ones\n"); 141 printf (" -on Disable named reference string optimization\n"); 142 printf (" -cr Disable Resource Descriptor error checking\n"); 143 printf (" -r<Revision> Override table header Revision (1-255)\n"); 144 145 printf ("\nASL Listing Files:\n"); 146 printf (" -l Create mixed listing file (ASL source and AML) (*.lst)\n"); 147 printf (" -ln Create namespace file (*.nsp)\n"); 148 printf (" -ls Create combined source file (expanded includes) (*.src)\n"); 149 150 printf ("\nACPI Data Tables:\n"); 151 printf (" -T <Sig> Create table template file for <Sig> (or \"ALL\")\n"); 152 printf (" -vt Create verbose templates (full disassembly)\n"); 153 154 printf ("\nAML Disassembler:\n"); 155 printf (" -d [file] Disassemble or decode binary ACPI table to file (*.dsl)\n"); 156 printf (" -da [f1,f2] Disassemble multiple tables from single namespace\n"); 157 printf (" -dc [file] Disassemble AML and immediately compile it\n"); 158 printf (" (Obtain DSDT from current system if no input file)\n"); 159 printf (" -e [f1,f2] Include ACPI table(s) for external symbol resolution\n"); 160 printf (" -2 Emit ACPI 2.0 compatible ASL code\n"); 161 printf (" -g Get ACPI tables and write to files (*.dat)\n"); 162 163 printf ("\nHelp:\n"); 164 printf (" -h Additional help and compiler debug options\n"); 165 printf (" -hc Display operators allowed in constant expressions\n"); 166 printf (" -hr Display ACPI reserved method names\n"); 167 printf (" -ht Display currently supported ACPI table names\n"); 168 } 169 170 171 /******************************************************************************* 172 * 173 * FUNCTION: HelpMessage 174 * 175 * PARAMETERS: None 176 * 177 * RETURN: None 178 * 179 * DESCRIPTION: Display help message 180 * 181 ******************************************************************************/ 182 183 static void 184 HelpMessage ( 185 void) 186 { 187 188 printf ("AML output filename generation:\n"); 189 printf (" Output filenames are generated by appending an extension to a common\n"); 190 printf (" filename prefix. The filename prefix is obtained via one of the\n"); 191 printf (" following methods (in priority order):\n"); 192 printf (" 1) The -p option specifies the prefix\n"); 193 printf (" 2) The prefix of the AMLFileName in the ASL Definition Block\n"); 194 printf (" 3) The prefix of the input filename\n"); 195 printf ("\n"); 196 197 Options (); 198 199 printf ("\nCompiler/Disassembler Debug Options:\n"); 200 printf (" -b<p|t|b> Create compiler debug/trace file (*.txt)\n"); 201 printf (" Types: Parse/Tree/Both\n"); 202 printf (" -f Ignore errors, force creation of AML output file(s)\n"); 203 printf (" -n Parse only, no output generation\n"); 204 printf (" -ot Display compile times\n"); 205 printf (" -x<level> Set debug level for trace output\n"); 206 printf (" -z Do not insert new compiler ID for DataTables\n"); 207 } 208 209 210 /******************************************************************************* 211 * 212 * FUNCTION: Usage 213 * 214 * PARAMETERS: None 215 * 216 * RETURN: None 217 * 218 * DESCRIPTION: Display usage and option message 219 * 220 ******************************************************************************/ 221 222 static void 223 Usage ( 224 void) 225 { 226 227 printf ("%s\n", ASL_COMPLIANCE); 228 printf ("Usage: %s [Options] [Files]\n\n", ASL_INVOCATION_NAME); 229 Options (); 230 } 231 232 233 /******************************************************************************* 234 * 235 * FUNCTION: AslInitialize 236 * 237 * PARAMETERS: None 238 * 239 * RETURN: None 240 * 241 * DESCRIPTION: Initialize compiler globals 242 * 243 ******************************************************************************/ 244 245 static void 246 AslInitialize ( 247 void) 248 { 249 UINT32 i; 250 251 252 #ifdef _DEBUG 253 _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(0)); 254 #endif 255 256 AcpiDbgLevel = 0; 257 258 for (i = 0; i < ASL_NUM_FILES; i++) 259 { 260 Gbl_Files[i].Handle = NULL; 261 Gbl_Files[i].Filename = NULL; 262 } 263 264 Gbl_Files[ASL_FILE_STDOUT].Handle = stdout; 265 Gbl_Files[ASL_FILE_STDOUT].Filename = "STDOUT"; 266 267 Gbl_Files[ASL_FILE_STDERR].Handle = stderr; 268 Gbl_Files[ASL_FILE_STDERR].Filename = "STDERR"; 269 } 270 271 272 /******************************************************************************* 273 * 274 * FUNCTION: AslMergeOptionTokens 275 * 276 * PARAMETERS: InBuffer - Input containing an option string 277 * OutBuffer - Merged output buffer 278 * 279 * RETURN: None 280 * 281 * DESCRIPTION: Remove all whitespace from an option string. 282 * 283 ******************************************************************************/ 284 285 static void 286 AslMergeOptionTokens ( 287 char *InBuffer, 288 char *OutBuffer) 289 { 290 char *Token; 291 292 293 *OutBuffer = 0; 294 295 Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 296 while (Token) 297 { 298 strcat (OutBuffer, Token); 299 Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 300 } 301 } 302 303 304 /******************************************************************************* 305 * 306 * FUNCTION: AslDoResponseFile 307 * 308 * PARAMETERS: Filename - Name of the response file 309 * 310 * RETURN: Status 311 * 312 * DESCRIPTION: Open a response file and process all options within. 313 * 314 ******************************************************************************/ 315 316 static int 317 AslDoResponseFile ( 318 char *Filename) 319 { 320 char *argv = StringBuffer2; 321 FILE *ResponseFile; 322 int OptStatus = 0; 323 int Opterr; 324 int Optind; 325 326 327 ResponseFile = fopen (Filename, "r"); 328 if (!ResponseFile) 329 { 330 printf ("Could not open command file %s, %s\n", 331 Filename, strerror (errno)); 332 return -1; 333 } 334 335 /* Must save the current GetOpt globals */ 336 337 Opterr = AcpiGbl_Opterr; 338 Optind = AcpiGbl_Optind; 339 340 /* 341 * Process all lines in the response file. There must be one complete 342 * option per line 343 */ 344 while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 345 { 346 /* Compress all tokens, allowing us to use a single argv entry */ 347 348 AslMergeOptionTokens (StringBuffer, StringBuffer2); 349 350 /* Process the option */ 351 352 AcpiGbl_Opterr = 0; 353 AcpiGbl_Optind = 0; 354 355 OptStatus = AslDoOptions (1, &argv, TRUE); 356 if (OptStatus) 357 { 358 printf ("Invalid option in command file %s: %s\n", 359 Filename, StringBuffer); 360 break; 361 } 362 } 363 364 /* Restore the GetOpt globals */ 365 366 AcpiGbl_Opterr = Opterr; 367 AcpiGbl_Optind = Optind; 368 369 fclose (ResponseFile); 370 return (OptStatus); 371 } 372 373 374 /******************************************************************************* 375 * 376 * FUNCTION: AslDoOptions 377 * 378 * PARAMETERS: argc/argv - Standard argc/argv 379 * IsResponseFile - TRUE if executing a response file. 380 * 381 * RETURN: Status 382 * 383 * DESCRIPTION: Command line option processing 384 * 385 ******************************************************************************/ 386 387 static int 388 AslDoOptions ( 389 int argc, 390 char **argv, 391 BOOLEAN IsResponseFile) 392 { 393 int j; 394 ACPI_STATUS Status; 395 396 397 /* Get the command line options */ 398 399 while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j) 400 { 401 case '@': /* Begin a response file */ 402 403 if (IsResponseFile) 404 { 405 printf ("Nested command files are not supported\n"); 406 return -1; 407 } 408 409 if (AslDoResponseFile (AcpiGbl_Optarg)) 410 { 411 return -1; 412 } 413 break; 414 415 416 case '2': 417 418 Gbl_Acpi2 = TRUE; 419 break; 420 421 422 case 'b': 423 424 switch (AcpiGbl_Optarg[0]) 425 { 426 case 'b': 427 AslCompilerdebug = 1; /* same as yydebug */ 428 break; 429 430 case 'p': 431 AslCompilerdebug = 1; /* same as yydebug */ 432 break; 433 434 case 't': 435 break; 436 437 default: 438 printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 439 return (-1); 440 } 441 442 /* Produce debug output file */ 443 444 Gbl_DebugFlag = TRUE; 445 break; 446 447 448 case 'c': 449 switch (AcpiGbl_Optarg[0]) 450 { 451 case 'r': 452 Gbl_NoResourceChecking = TRUE; 453 break; 454 455 default: 456 printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 457 return (-1); 458 } 459 break; 460 461 462 case 'd': 463 switch (AcpiGbl_Optarg[0]) 464 { 465 case '^': 466 Gbl_DoCompile = FALSE; 467 break; 468 469 case 'a': 470 Gbl_DoCompile = FALSE; 471 Gbl_DisassembleAll = TRUE; 472 break; 473 474 case 'c': 475 break; 476 477 default: 478 printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 479 return (-1); 480 } 481 482 Gbl_DisasmFlag = TRUE; 483 break; 484 485 486 case 'e': 487 Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg); 488 if (ACPI_FAILURE (Status)) 489 { 490 printf ("Could not add %s to external list\n", AcpiGbl_Optarg); 491 return (-1); 492 } 493 break; 494 495 496 case 'f': 497 498 /* Ignore errors and force creation of aml file */ 499 500 Gbl_IgnoreErrors = TRUE; 501 break; 502 503 504 case 'g': 505 506 /* Get all ACPI tables */ 507 508 Gbl_GetAllTables = TRUE; 509 Gbl_DoCompile = FALSE; 510 break; 511 512 513 case 'h': 514 515 switch (AcpiGbl_Optarg[0]) 516 { 517 case '^': 518 HelpMessage (); 519 exit (0); 520 521 case 'c': 522 UtDisplayConstantOpcodes (); 523 exit (0); 524 525 case 'r': 526 /* reserved names */ 527 528 ApDisplayReservedNames (); 529 exit (0); 530 531 case 't': 532 UtDisplaySupportedTables (); 533 exit (0); 534 535 default: 536 printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 537 return (-1); 538 } 539 540 541 case 'I': /* Add an include file search directory */ 542 543 FlAddIncludeDirectory (AcpiGbl_Optarg); 544 break; 545 546 547 case 'i': 548 549 switch (AcpiGbl_Optarg[0]) 550 { 551 case 'a': 552 553 /* Produce assembly code include file */ 554 555 Gbl_AsmIncludeOutputFlag = TRUE; 556 break; 557 558 case 'c': 559 560 /* Produce C include file */ 561 562 Gbl_C_IncludeOutputFlag = TRUE; 563 break; 564 565 default: 566 printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 567 return (-1); 568 } 569 break; 570 571 572 case 'l': 573 574 switch (AcpiGbl_Optarg[0]) 575 { 576 case '^': 577 /* Produce listing file (Mixed source/aml) */ 578 579 Gbl_ListingFlag = TRUE; 580 break; 581 582 case 'n': 583 /* Produce namespace file */ 584 585 Gbl_NsOutputFlag = TRUE; 586 break; 587 588 case 's': 589 /* Produce combined source file */ 590 591 Gbl_SourceOutputFlag = TRUE; 592 break; 593 594 default: 595 printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 596 return (-1); 597 } 598 break; 599 600 601 case 'o': 602 603 switch (AcpiGbl_Optarg[0]) 604 { 605 case 'a': 606 607 /* Disable all optimizations */ 608 609 Gbl_FoldConstants = FALSE; 610 Gbl_IntegerOptimizationFlag = FALSE; 611 Gbl_ReferenceOptimizationFlag = FALSE; 612 break; 613 614 case 'f': 615 616 /* Disable folding on "normal" expressions */ 617 618 Gbl_FoldConstants = FALSE; 619 break; 620 621 case 'i': 622 623 /* Disable integer optimization to constants */ 624 625 Gbl_IntegerOptimizationFlag = FALSE; 626 break; 627 628 case 'n': 629 630 /* Disable named reference optimization */ 631 632 Gbl_ReferenceOptimizationFlag = FALSE; 633 break; 634 635 case 't': 636 637 /* Display compile time(s) */ 638 639 Gbl_CompileTimesFlag = TRUE; 640 break; 641 642 default: 643 printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 644 return (-1); 645 } 646 break; 647 648 649 case 'n': 650 651 /* Parse only */ 652 653 Gbl_ParseOnlyFlag = TRUE; 654 break; 655 656 657 case 'p': 658 659 /* Override default AML output filename */ 660 661 Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 662 Gbl_UseDefaultAmlFilename = FALSE; 663 break; 664 665 666 case 'r': 667 Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 668 break; 669 670 671 case 's': 672 673 switch (AcpiGbl_Optarg[0]) 674 { 675 case 'a': 676 677 /* Produce assembly code output file */ 678 679 Gbl_AsmOutputFlag = TRUE; 680 break; 681 682 case 'c': 683 684 /* Produce C hex output file */ 685 686 Gbl_C_OutputFlag = TRUE; 687 break; 688 689 default: 690 printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 691 return (-1); 692 } 693 break; 694 695 696 case 't': 697 698 /* Produce hex table output file */ 699 700 switch (AcpiGbl_Optarg[0]) 701 { 702 case 'a': 703 Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 704 break; 705 706 case 'c': 707 Gbl_HexOutputFlag = HEX_OUTPUT_C; 708 break; 709 710 case 's': 711 Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 712 break; 713 714 default: 715 printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 716 return (-1); 717 } 718 break; 719 720 721 case 'T': 722 Gbl_DoTemplates = TRUE; 723 Gbl_TemplateSignature = AcpiGbl_Optarg; 724 break; 725 726 727 case 'v': 728 729 switch (AcpiGbl_Optarg[0]) 730 { 731 case 'a': 732 /* Disable All error/warning messages */ 733 734 Gbl_NoErrors = TRUE; 735 break; 736 737 case 'i': 738 /* Less verbose error messages */ 739 740 Gbl_VerboseErrors = FALSE; 741 break; 742 743 case 'o': 744 Gbl_DisplayOptimizations = TRUE; 745 break; 746 747 case 'r': 748 Gbl_DisplayRemarks = FALSE; 749 break; 750 751 case 's': 752 Gbl_DoSignon = FALSE; 753 break; 754 755 case 't': 756 Gbl_VerboseTemplates = TRUE; 757 break; 758 759 default: 760 printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 761 return (-1); 762 } 763 break; 764 765 766 case 'w': /* Set warning levels */ 767 768 switch (AcpiGbl_Optarg[0]) 769 { 770 case '1': 771 Gbl_WarningLevel = ASL_WARNING; 772 break; 773 774 case '2': 775 Gbl_WarningLevel = ASL_WARNING2; 776 break; 777 778 case '3': 779 Gbl_WarningLevel = ASL_WARNING3; 780 break; 781 782 default: 783 printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 784 return (-1); 785 } 786 break; 787 788 789 case 'x': 790 791 AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 792 break; 793 794 795 case 'z': 796 797 Gbl_UseOriginalCompilerId = TRUE; 798 break; 799 800 801 default: 802 803 return (-1); 804 } 805 806 return (0); 807 } 808 809 810 /******************************************************************************* 811 * 812 * FUNCTION: AslCommandLine 813 * 814 * PARAMETERS: argc/argv 815 * 816 * RETURN: Last argv index 817 * 818 * DESCRIPTION: Command line processing 819 * 820 ******************************************************************************/ 821 822 static int 823 AslCommandLine ( 824 int argc, 825 char **argv) 826 { 827 int BadCommandLine = 0; 828 ACPI_STATUS Status; 829 830 831 /* Minimum command line contains at least the command and an input file */ 832 833 if (argc < 2) 834 { 835 printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 836 Usage (); 837 exit (1); 838 } 839 840 /* Process all command line options */ 841 842 BadCommandLine = AslDoOptions (argc, argv, FALSE); 843 844 if (Gbl_DoTemplates) 845 { 846 Status = DtCreateTemplates (Gbl_TemplateSignature); 847 if (ACPI_FAILURE (Status)) 848 { 849 exit (-1); 850 } 851 exit (1); 852 } 853 854 /* Next parameter must be the input filename */ 855 856 if (!argv[AcpiGbl_Optind] && 857 !Gbl_DisasmFlag && 858 !Gbl_GetAllTables) 859 { 860 printf ("Missing input filename\n"); 861 BadCommandLine = TRUE; 862 } 863 864 if (Gbl_DoSignon) 865 { 866 printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 867 } 868 869 /* Abort if anything went wrong on the command line */ 870 871 if (BadCommandLine) 872 { 873 printf ("\n"); 874 Usage (); 875 exit (1); 876 } 877 878 return (AcpiGbl_Optind); 879 } 880 881 882 /******************************************************************************* 883 * 884 * FUNCTION: main 885 * 886 * PARAMETERS: Standard argc/argv 887 * 888 * RETURN: Program termination code 889 * 890 * DESCRIPTION: C main routine for the Asl Compiler. Handle command line 891 * options and begin the compile for each file on the command line 892 * 893 ******************************************************************************/ 894 895 int ACPI_SYSTEM_XFACE 896 main ( 897 int argc, 898 char **argv) 899 { 900 ACPI_STATUS Status; 901 int Index1; 902 int Index2; 903 904 905 AcpiGbl_ExternalFileList = NULL; 906 907 #ifdef _DEBUG 908 _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF | 909 _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); 910 #endif 911 912 /* Init and command line */ 913 914 AslInitialize (); 915 Index1 = Index2 = AslCommandLine (argc, argv); 916 917 /* Options that have no additional parameters or pathnames */ 918 919 if (Gbl_GetAllTables) 920 { 921 Status = AslDoOneFile (NULL); 922 if (ACPI_FAILURE (Status)) 923 { 924 return (-1); 925 } 926 return (0); 927 } 928 929 if (Gbl_DisassembleAll) 930 { 931 while (argv[Index1]) 932 { 933 Status = AslDoOnePathname (argv[Index1], AcpiDmAddToExternalFileList); 934 if (ACPI_FAILURE (Status)) 935 { 936 return (-1); 937 } 938 939 Index1++; 940 } 941 } 942 943 /* Process each pathname/filename in the list, with possible wildcards */ 944 945 while (argv[Index2]) 946 { 947 Status = AslDoOnePathname (argv[Index2], AslDoOneFile); 948 if (ACPI_FAILURE (Status)) 949 { 950 return (-1); 951 } 952 953 Index2++; 954 } 955 956 if (AcpiGbl_ExternalFileList) 957 { 958 AcpiDmClearExternalFileList(); 959 } 960 961 return (0); 962 } 963 964 965