2 /******************************************************************************
4 * Module Name: aslmain - compiler main and utilities
6 *****************************************************************************/
8 /******************************************************************************
12 * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
13 * All rights reserved.
17 * 2.1. This is your license from Intel Corp. under its intellectual property
18 * rights. You may have additional license terms from the party that provided
19 * you this software, covering your right to use that party's intellectual
22 * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23 * copy of the source code appearing in this file ("Covered Code") an
24 * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25 * base code distributed originally by Intel ("Original Intel Code") to copy,
26 * make derivatives, distribute, use and display any portion of the Covered
27 * Code in any form, with the right to sublicense such rights; and
29 * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
30 * license (with the right to sublicense), under only those claims of Intel
31 * patents that are infringed by the Original Intel Code, to make, use, sell,
32 * offer to sell, and import the Covered Code and derivative works thereof
33 * solely to the minimum extent necessary to exercise the above copyright
34 * license, and in no event shall the patent license extend to any additions
35 * to or modifications of the Original Intel Code. No other license or right
36 * is granted directly or by implication, estoppel or otherwise;
38 * The above copyright and patent license is granted only if the following
43 * 3.1. Redistribution of Source with Rights to Further Distribute Source.
44 * Redistribution of source code of any substantial portion of the Covered
45 * Code or modification with rights to further distribute source must include
46 * the above Copyright Notice, the above License, this list of Conditions,
47 * and the following Disclaimer and Export Compliance provision. In addition,
48 * Licensee must cause all Covered Code to which Licensee contributes to
49 * contain a file documenting the changes Licensee made to create that Covered
50 * Code and the date of any change. Licensee must include in that file the
51 * documentation of any changes made by any predecessor Licensee. Licensee
52 * must include a prominent statement that the modification is derived,
53 * directly or indirectly, from Original Intel Code.
55 * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
56 * Redistribution of source code of any substantial portion of the Covered
57 * Code or modification without rights to further distribute source must
58 * include the following Disclaimer and Export Compliance provision in the
59 * documentation and/or other materials provided with distribution. In
60 * addition, Licensee may not authorize further sublicense of source of any
61 * portion of the Covered Code, and must include terms to the effect that the
62 * license from Licensee to its licensee is limited to the intellectual
63 * property embodied in the software Licensee provides to its licensee, and
64 * not to intellectual property embodied in modifications its licensee may
67 * 3.3. Redistribution of Executable. Redistribution in executable form of any
68 * substantial portion of the Covered Code or modification must reproduce the
69 * above Copyright Notice, and the following Disclaimer and Export Compliance
70 * provision in the documentation and/or other materials provided with the
73 * 3.4. Intel retains all right, title, and interest in and to the Original
76 * 3.5. Neither the name Intel nor any other trademark owned or controlled by
77 * Intel shall be used in advertising or otherwise to promote the sale, use or
78 * other dealings in products derived from or relating to the Covered Code
79 * without prior written authorization from Intel.
81 * 4. Disclaimer and Export Compliance
83 * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
84 * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
85 * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
86 * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
87 * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
88 * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
91 * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
92 * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
93 * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
94 * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
95 * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
96 * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
97 * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
100 * 4.3. Licensee shall not export, either directly or indirectly, any of this
101 * software or system incorporating such software without first obtaining any
102 * required license or other approval from the U. S. Department of Commerce or
103 * any other agency or department of the United States Government. In the
104 * event Licensee exports any such software from the United States or
105 * re-exports any such software from a foreign destination, Licensee shall
106 * ensure that the distribution and export/re-export of the software is in
107 * compliance with all laws, regulations, orders, or other restrictions of the
108 * U.S. Export Administration Regulations. Licensee agrees that neither it nor
109 * any of its subsidiaries will export/re-export any technical data, process,
110 * software, or service, directly or indirectly, to any country for which the
111 * United States government or any agency thereof requires an export license,
112 * other governmental approval, or letter of assurance, without first obtaining
113 * such license, approval or letter.
115 *****************************************************************************/
118 #define _DECLARE_GLOBALS
120 #include "aslcompiler.h"
127 #define _COMPONENT ACPI_COMPILER
128 ACPI_MODULE_NAME ("aslmain")
130 /* Local prototypes */
154 /*******************************************************************************
162 * DESCRIPTION: Display option help message
164 ******************************************************************************/
171 printf ("General Output:\n");
172 printf (" -p <prefix> Specify path/filename prefix for all output files\n");
173 printf (" -va Disable all errors and warnings (summary only)\n");
174 printf (" -vi Less verbose errors and warnings for use with IDEs\n");
175 printf (" -vo Enable optimization comments\n");
176 printf (" -vr Disable remarks\n");
177 printf (" -vs Disable signon\n");
178 printf (" -w<1|2|3> Set warning reporting level\n");
180 printf ("\nAML Output Files:\n");
181 printf (" -s<a|c> Create AML in assembler or C source file (*.asm or *.c)\n");
182 printf (" -i<a|c> Create assembler or C include file (*.inc or *.h)\n");
183 printf (" -t<a|c> Create AML in assembler or C hex table (*.hex)\n");
185 printf ("\nAML Code Generation:\n");
186 printf (" -oa Disable all optimizations (compatibility mode)\n");
187 printf (" -of Disable constant folding\n");
188 printf (" -oi Disable integer optimization to Zero/One/Ones\n");
189 printf (" -on Disable named reference string optimization\n");
190 printf (" -r<Revision> Override table header Revision (1-255)\n");
192 printf ("\nListings:\n");
193 printf (" -l Create mixed listing file (ASL source and AML) (*.lst)\n");
194 printf (" -ln Create namespace file (*.nsp)\n");
195 printf (" -ls Create combined source file (expanded includes) (*.src)\n");
197 printf ("\nAML Disassembler:\n");
198 printf (" -d [file] Disassemble or decode binary ACPI table to file (*.dsl)\n");
199 printf (" -dc [file] Disassemble AML and immediately compile it\n");
200 printf (" (Obtain DSDT from current system if no input file)\n");
201 printf (" -e [f1,f2] Include ACPI table(s) for external symbol resolution\n");
202 printf (" -2 Emit ACPI 2.0 compatible ASL code\n");
203 printf (" -g Get ACPI tables and write to files (*.dat)\n");
205 printf ("\nHelp:\n");
206 printf (" -h Additional help and compiler debug options\n");
207 printf (" -hc Display operators allowed in constant expressions\n");
208 printf (" -hr Display ACPI reserved method names\n");
212 /*******************************************************************************
214 * FUNCTION: HelpMessage
220 * DESCRIPTION: Display help message
222 ******************************************************************************/
229 printf ("AML output filename generation:\n");
230 printf (" Output filenames are generated by appending an extension to a common\n");
231 printf (" filename prefix. The filename prefix is obtained via one of the\n");
232 printf (" following methods (in priority order):\n");
233 printf (" 1) The -p option specifies the prefix\n");
234 printf (" 2) The prefix of the AMLFileName in the ASL Definition Block\n");
235 printf (" 3) The prefix of the input filename\n");
240 printf ("\nCompiler/Disassembler Debug Options:\n");
241 printf (" -b<p|t|b> Create compiler debug/trace file (*.txt)\n");
242 printf (" Types: Parse/Tree/Both\n");
243 printf (" -f Ignore errors, force creation of AML output file(s)\n");
244 printf (" -c Parse only, no output generation\n");
245 printf (" -ot Display compile times\n");
246 printf (" -x<level> Set debug level for trace output\n");
250 /*******************************************************************************
258 * DESCRIPTION: Display usage and option message
260 ******************************************************************************/
267 printf ("Usage: %s [Options] [Files]\n\n", CompilerName
);
272 /*******************************************************************************
274 * FUNCTION: AslInitialize
280 * DESCRIPTION: Initialize compiler globals
282 ******************************************************************************/
292 _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF
| _CrtSetDbgFlag(0));
297 for (i
= 0; i
< ASL_NUM_FILES
; i
++)
299 Gbl_Files
[i
].Handle
= NULL
;
300 Gbl_Files
[i
].Filename
= NULL
;
303 Gbl_Files
[ASL_FILE_STDOUT
].Handle
= stdout
;
304 Gbl_Files
[ASL_FILE_STDOUT
].Filename
= "STDOUT";
306 Gbl_Files
[ASL_FILE_STDERR
].Handle
= stderr
;
307 Gbl_Files
[ASL_FILE_STDERR
].Filename
= "STDERR";
311 /*******************************************************************************
313 * FUNCTION: AslCommandLine
315 * PARAMETERS: argc/argv
319 * DESCRIPTION: Command line processing
321 ******************************************************************************/
328 BOOLEAN BadCommandLine
= FALSE
;
332 /* Minimum command line contains at least one option or an input file */
336 AslCompilerSignon (ASL_FILE_STDOUT
);
341 /* Get the command line options */
343 while ((j
= AcpiGetopt (argc
, argv
, "2b:cd^e:fgh^i^l^o:p:r:s:t:v:w:x:")) != EOF
) switch (j
)
352 switch (AcpiGbl_Optarg
[0])
355 AslCompilerdebug
= 1; /* same as yydebug */
359 AslCompilerdebug
= 1; /* same as yydebug */
366 printf ("Unknown option: -b%s\n", AcpiGbl_Optarg
);
367 BadCommandLine
= TRUE
;
371 /* Produce debug output file */
373 Gbl_DebugFlag
= TRUE
;
381 Gbl_ParseOnlyFlag
= TRUE
;
386 switch (AcpiGbl_Optarg
[0])
389 Gbl_DoCompile
= FALSE
;
396 printf ("Unknown option: -d%s\n", AcpiGbl_Optarg
);
397 BadCommandLine
= TRUE
;
401 Gbl_DisasmFlag
= TRUE
;
406 Gbl_ExternalFilename
= AcpiGbl_Optarg
;
412 /* Ignore errors and force creation of aml file */
414 Gbl_IgnoreErrors
= TRUE
;
420 /* Get all ACPI tables */
422 Gbl_GetAllTables
= TRUE
;
423 Gbl_DoCompile
= FALSE
;
429 switch (AcpiGbl_Optarg
[0])
436 UtDisplayConstantOpcodes ();
442 MpDisplayReservedNames ();
446 printf ("Unknown option: -h%s\n", AcpiGbl_Optarg
);
447 BadCommandLine
= TRUE
;
455 switch (AcpiGbl_Optarg
[0])
459 /* Produce assembly code include file */
461 Gbl_AsmIncludeOutputFlag
= TRUE
;
466 /* Produce C include file */
468 Gbl_C_IncludeOutputFlag
= TRUE
;
472 printf ("Unknown option: -s%s\n", AcpiGbl_Optarg
);
473 BadCommandLine
= TRUE
;
481 switch (AcpiGbl_Optarg
[0])
484 /* Produce listing file (Mixed source/aml) */
486 Gbl_ListingFlag
= TRUE
;
490 /* Produce namespace file */
492 Gbl_NsOutputFlag
= TRUE
;
496 /* Produce combined source file */
498 Gbl_SourceOutputFlag
= TRUE
;
502 printf ("Unknown option: -l%s\n", AcpiGbl_Optarg
);
503 BadCommandLine
= TRUE
;
511 switch (AcpiGbl_Optarg
[0])
515 /* Disable all optimizations */
517 Gbl_FoldConstants
= FALSE
;
518 Gbl_IntegerOptimizationFlag
= FALSE
;
519 Gbl_ReferenceOptimizationFlag
= FALSE
;
524 /* Disable folding on "normal" expressions */
526 Gbl_FoldConstants
= FALSE
;
531 /* Disable integer optimization to constants */
533 Gbl_IntegerOptimizationFlag
= FALSE
;
538 /* Disable named reference optimization */
540 Gbl_ReferenceOptimizationFlag
= FALSE
;
545 /* Display compile time(s) */
547 Gbl_CompileTimesFlag
= TRUE
;
551 printf ("Unknown option: -c%s\n", AcpiGbl_Optarg
);
552 BadCommandLine
= TRUE
;
560 /* Override default AML output filename */
562 Gbl_OutputFilenamePrefix
= AcpiGbl_Optarg
;
563 Gbl_UseDefaultAmlFilename
= FALSE
;
568 Gbl_RevisionOverride
= (UINT8
) strtoul (AcpiGbl_Optarg
, NULL
, 0);
574 switch (AcpiGbl_Optarg
[0])
578 /* Produce assembly code output file */
580 Gbl_AsmOutputFlag
= TRUE
;
585 /* Produce C hex output file */
587 Gbl_C_OutputFlag
= TRUE
;
591 printf ("Unknown option: -s%s\n", AcpiGbl_Optarg
);
592 BadCommandLine
= TRUE
;
600 /* Produce hex table output file */
602 switch (AcpiGbl_Optarg
[0])
605 Gbl_HexOutputFlag
= HEX_OUTPUT_ASM
;
609 Gbl_HexOutputFlag
= HEX_OUTPUT_C
;
613 printf ("Unknown option: -t%s\n", AcpiGbl_Optarg
);
614 BadCommandLine
= TRUE
;
622 switch (AcpiGbl_Optarg
[0])
625 /* Disable All error/warning messages */
631 /* Less verbose error messages */
633 Gbl_VerboseErrors
= FALSE
;
637 Gbl_DisplayOptimizations
= TRUE
;
641 Gbl_DisplayRemarks
= FALSE
;
645 Gbl_DoSignon
= FALSE
;
649 printf ("Unknown option: -v%s\n", AcpiGbl_Optarg
);
650 BadCommandLine
= TRUE
;
656 case 'w': /* Set warning levels */
658 switch (AcpiGbl_Optarg
[0])
661 Gbl_WarningLevel
= ASL_WARNING
;
665 Gbl_WarningLevel
= ASL_WARNING2
;
669 Gbl_WarningLevel
= ASL_WARNING3
;
673 printf ("Unknown option: -w%s\n", AcpiGbl_Optarg
);
674 BadCommandLine
= TRUE
;
682 AcpiDbgLevel
= strtoul (AcpiGbl_Optarg
, NULL
, 16);
688 BadCommandLine
= TRUE
;
692 /* Next parameter must be the input filename */
694 if (!argv
[AcpiGbl_Optind
] &&
698 printf ("Missing input filename\n");
699 BadCommandLine
= TRUE
;
704 AslCompilerSignon (ASL_FILE_STDOUT
);
707 /* Abort if anything went wrong on the command line */
716 return (AcpiGbl_Optind
);
720 /*******************************************************************************
724 * PARAMETERS: Standard argc/argv
726 * RETURN: Program termination code
728 * DESCRIPTION: C main routine for the Asl Compiler. Handle command line
729 * options and begin the compile for each file on the command line
731 ******************************************************************************/
733 int ACPI_SYSTEM_XFACE
743 _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF
| _CRTDBG_LEAK_CHECK_DF
|
744 _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG
));
747 /* Init and command line */
750 Index
= AslCommandLine (argc
, argv
);
752 /* Options that have no additional parameters or pathnames */
754 if (Gbl_GetAllTables
)
756 Status
= AslDoOneFile (NULL
);
757 if (ACPI_FAILURE (Status
))
764 /* Process each pathname/filename in the list, with possible wildcards */
768 Status
= AslDoOnePathname (argv
[Index
]);
769 if (ACPI_FAILURE (Status
))