diff options
author | jkim <jkim@FreeBSD.org> | 2013-05-17 23:13:40 +0000 |
---|---|---|
committer | jkim <jkim@FreeBSD.org> | 2013-05-17 23:13:40 +0000 |
commit | af69f95bba3597db53a980597cfd371c9f6ee7cf (patch) | |
tree | 740dae2325e162bb086ea6e7e5d481c4b669e232 /source/compiler/aslmain.c | |
parent | 00f95aec269522bc092cf85fe57fcfc19efecec9 (diff) | |
download | FreeBSD-src-af69f95bba3597db53a980597cfd371c9f6ee7cf.zip FreeBSD-src-af69f95bba3597db53a980597cfd371c9f6ee7cf.tar.gz |
Import ACPICA 20130517.
Diffstat (limited to 'source/compiler/aslmain.c')
-rw-r--r-- | source/compiler/aslmain.c | 774 |
1 files changed, 20 insertions, 754 deletions
diff --git a/source/compiler/aslmain.c b/source/compiler/aslmain.c index 4cc63fa..a75a6fd 100644 --- a/source/compiler/aslmain.c +++ b/source/compiler/aslmain.c @@ -41,7 +41,6 @@ * POSSIBILITY OF SUCH DAMAGES. */ - #define _DECLARE_GLOBALS #include "aslcompiler.h" @@ -49,26 +48,11 @@ #include "acdisasm.h" #include <signal.h> -#ifdef _DEBUG -#include <crtdbg.h> -#endif - #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslmain") -/* Local prototypes */ - -static void -Options ( - void); - -static void -FilenameHelp ( - void); -static void -Usage ( - void); +/* Local prototypes */ static void ACPI_SYSTEM_XFACE AslSignalHandler ( @@ -78,34 +62,10 @@ static void AslInitialize ( void); -static int -AslCommandLine ( - int argc, - char **argv); - -static int -AslDoOptions ( - int argc, - char **argv, - BOOLEAN IsResponseFile); - -static void -AslMergeOptionTokens ( - char *InBuffer, - char *OutBuffer); - -static int -AslDoResponseFile ( - char *Filename); - - -#define ASL_TOKEN_SEPARATORS " \t\n" -#define ASL_SUPPORTED_OPTIONS "@:b|c|d^D:e:fgh^i|I:l^m:no|p:P^r:s|t|T:G^v^w|x:z" - /******************************************************************************* * - * FUNCTION: Options + * FUNCTION: Usage * * PARAMETERS: None * @@ -116,10 +76,12 @@ AslDoResponseFile ( * ******************************************************************************/ -static void -Options ( +void +Usage ( void) { + printf ("%s\n\n", ASL_COMPLIANCE); + ACPI_USAGE_HEADER ("iasl [Options] [Files]"); printf ("\nGlobal:\n"); ACPI_OPTION ("-@ <file>", "Specify command file"); @@ -140,6 +102,7 @@ Options ( ACPI_OPTION ("-vo", "Enable optimization comments"); ACPI_OPTION ("-vr", "Disable remarks"); ACPI_OPTION ("-vs", "Disable signon"); + ACPI_OPTION ("-vw <messageid>", "Disable specific warning or remark"); ACPI_OPTION ("-w1 -w2 -w3", "Set warning reporting level"); ACPI_OPTION ("-we", "Report warnings as errors"); @@ -209,8 +172,8 @@ Options ( * ******************************************************************************/ -static void -FilenameHelp ( +void +AslFilenameHelp ( void) { @@ -225,29 +188,6 @@ FilenameHelp ( } -/******************************************************************************* - * - * FUNCTION: Usage - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Display usage and option message - * - ******************************************************************************/ - -static void -Usage ( - void) -{ - - printf ("%s\n\n", ASL_COMPLIANCE); - ACPI_USAGE_HEADER ("iasl [Options] [Files]"); - Options (); -} - - /****************************************************************************** * * FUNCTION: AslSignalHandler @@ -310,11 +250,6 @@ AslInitialize ( UINT32 i; -#ifdef _DEBUG - _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(0)); -#endif - - for (i = 0; i < ASL_NUM_FILES; i++) { Gbl_Files[i].Handle = NULL; @@ -326,675 +261,6 @@ AslInitialize ( Gbl_Files[ASL_FILE_STDERR].Handle = stderr; Gbl_Files[ASL_FILE_STDERR].Filename = "STDERR"; - - /* Allocate the line buffer(s) */ - - Gbl_LineBufferSize /= 2; - UtExpandLineBuffers (); -} - - -/******************************************************************************* - * - * FUNCTION: AslMergeOptionTokens - * - * PARAMETERS: InBuffer - Input containing an option string - * OutBuffer - Merged output buffer - * - * RETURN: None - * - * DESCRIPTION: Remove all whitespace from an option string. - * - ******************************************************************************/ - -static void -AslMergeOptionTokens ( - char *InBuffer, - char *OutBuffer) -{ - char *Token; - - - *OutBuffer = 0; - - Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); - while (Token) - { - strcat (OutBuffer, Token); - Token = strtok (NULL, ASL_TOKEN_SEPARATORS); - } -} - - -/******************************************************************************* - * - * FUNCTION: AslDoResponseFile - * - * PARAMETERS: Filename - Name of the response file - * - * RETURN: Status - * - * DESCRIPTION: Open a response file and process all options within. - * - ******************************************************************************/ - -static int -AslDoResponseFile ( - char *Filename) -{ - char *argv = StringBuffer2; - FILE *ResponseFile; - int OptStatus = 0; - int Opterr; - int Optind; - - - ResponseFile = fopen (Filename, "r"); - if (!ResponseFile) - { - printf ("Could not open command file %s, %s\n", - Filename, strerror (errno)); - return (-1); - } - - /* Must save the current GetOpt globals */ - - Opterr = AcpiGbl_Opterr; - Optind = AcpiGbl_Optind; - - /* - * Process all lines in the response file. There must be one complete - * option per line - */ - while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) - { - /* Compress all tokens, allowing us to use a single argv entry */ - - AslMergeOptionTokens (StringBuffer, StringBuffer2); - - /* Process the option */ - - AcpiGbl_Opterr = 0; - AcpiGbl_Optind = 0; - - OptStatus = AslDoOptions (1, &argv, TRUE); - if (OptStatus) - { - printf ("Invalid option in command file %s: %s\n", - Filename, StringBuffer); - break; - } - } - - /* Restore the GetOpt globals */ - - AcpiGbl_Opterr = Opterr; - AcpiGbl_Optind = Optind; - - fclose (ResponseFile); - return (OptStatus); -} - - -/******************************************************************************* - * - * FUNCTION: AslDoOptions - * - * PARAMETERS: argc/argv - Standard argc/argv - * IsResponseFile - TRUE if executing a response file. - * - * RETURN: Status - * - * DESCRIPTION: Command line option processing - * - ******************************************************************************/ - -static int -AslDoOptions ( - int argc, - char **argv, - BOOLEAN IsResponseFile) -{ - int j; - ACPI_STATUS Status; - - - /* Get the command line options */ - - while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j) - { - case '@': /* Begin a response file */ - - if (IsResponseFile) - { - printf ("Nested command files are not supported\n"); - return (-1); - } - - if (AslDoResponseFile (AcpiGbl_Optarg)) - { - return (-1); - } - break; - - - case 'b': /* Debug output options */ - switch (AcpiGbl_Optarg[0]) - { - case 'f': - AslCompilerdebug = 1; /* same as yydebug */ - DtParserdebug = 1; - PrParserdebug = 1; - break; - - case 't': - break; - - default: - printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); - return (-1); - } - - /* Produce debug output file */ - - Gbl_DebugFlag = TRUE; - break; - - - case 'c': - switch (AcpiGbl_Optarg[0]) - { - case 'r': - Gbl_NoResourceChecking = TRUE; - break; - - default: - printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); - return (-1); - } - break; - - - case 'd': /* Disassembler */ - switch (AcpiGbl_Optarg[0]) - { - case '^': - Gbl_DoCompile = FALSE; - break; - - case 'a': - Gbl_DoCompile = FALSE; - Gbl_DisassembleAll = TRUE; - break; - - case 'b': /* Do not convert buffers to resource descriptors */ - AcpiGbl_NoResourceDisassembly = TRUE; - break; - - case 'c': - break; - - default: - printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); - return (-1); - } - - Gbl_DisasmFlag = TRUE; - break; - - - case 'D': /* Define a symbol */ - PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); - break; - - - case 'e': /* External files for disassembler */ - Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg); - if (ACPI_FAILURE (Status)) - { - printf ("Could not add %s to external list\n", AcpiGbl_Optarg); - return (-1); - } - break; - - - case 'f': /* Ignore errors and force creation of aml file */ - Gbl_IgnoreErrors = TRUE; - break; - - - case 'G': - Gbl_CompileGeneric = TRUE; - break; - - - case 'g': /* Get all ACPI tables */ - - Gbl_GetAllTables = TRUE; - Gbl_DoCompile = FALSE; - break; - - - case 'h': - switch (AcpiGbl_Optarg[0]) - { - case '^': - Usage (); - exit (0); - - case 'c': - UtDisplayConstantOpcodes (); - exit (0); - - case 'f': - FilenameHelp (); - exit (0); - - case 'r': - /* reserved names */ - - ApDisplayReservedNames (); - exit (0); - - case 't': - UtDisplaySupportedTables (); - exit (0); - - default: - printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); - return (-1); - } - - - case 'I': /* Add an include file search directory */ - FlAddIncludeDirectory (AcpiGbl_Optarg); - break; - - - case 'i': /* Output AML as an include file */ - switch (AcpiGbl_Optarg[0]) - { - case 'a': - - /* Produce assembly code include file */ - - Gbl_AsmIncludeOutputFlag = TRUE; - break; - - case 'c': - - /* Produce C include file */ - - Gbl_C_IncludeOutputFlag = TRUE; - break; - - case 'n': - - /* Compiler/Disassembler: Ignore the NOOP operator */ - - AcpiGbl_IgnoreNoopOperator = TRUE; - break; - - default: - printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); - return (-1); - } - break; - - - case 'l': /* Listing files */ - switch (AcpiGbl_Optarg[0]) - { - case '^': - /* Produce listing file (Mixed source/aml) */ - - Gbl_ListingFlag = TRUE; - break; - - case 'i': - /* Produce preprocessor output file */ - - Gbl_PreprocessorOutputFlag = TRUE; - break; - - case 'n': - /* Produce namespace file */ - - Gbl_NsOutputFlag = TRUE; - break; - - case 's': - /* Produce combined source file */ - - Gbl_SourceOutputFlag = TRUE; - break; - - default: - printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); - return (-1); - } - break; - - - case 'm': /* Set line buffer size */ - Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024; - if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE) - { - Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE; - } - printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize); - break; - - - case 'n': /* Parse only */ - Gbl_ParseOnlyFlag = TRUE; - break; - - - case 'o': /* Control compiler AML optimizations */ - switch (AcpiGbl_Optarg[0]) - { - case 'a': - - /* Disable all optimizations */ - - Gbl_FoldConstants = FALSE; - Gbl_IntegerOptimizationFlag = FALSE; - Gbl_ReferenceOptimizationFlag = FALSE; - break; - - case 'f': - - /* Disable folding on "normal" expressions */ - - Gbl_FoldConstants = FALSE; - break; - - case 'i': - - /* Disable integer optimization to constants */ - - Gbl_IntegerOptimizationFlag = FALSE; - break; - - case 'n': - - /* Disable named reference optimization */ - - Gbl_ReferenceOptimizationFlag = FALSE; - break; - - case 't': - - /* Display compile time(s) */ - - Gbl_CompileTimesFlag = TRUE; - break; - - default: - printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); - return (-1); - } - break; - - - case 'P': /* Preprocessor options */ - switch (AcpiGbl_Optarg[0]) - { - case '^': /* Proprocess only, emit (.i) file */ - Gbl_PreprocessOnly = TRUE; - Gbl_PreprocessorOutputFlag = TRUE; - break; - - case 'n': /* Disable preprocessor */ - Gbl_PreprocessFlag = FALSE; - break; - - default: - printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); - return (-1); - } - break; - - - case 'p': /* Override default AML output filename */ - Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; - Gbl_UseDefaultAmlFilename = FALSE; - break; - - - case 'r': /* Override revision found in table header */ - Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); - break; - - - case 's': /* Create AML in a source code file */ - switch (AcpiGbl_Optarg[0]) - { - case 'a': - - /* Produce assembly code output file */ - - Gbl_AsmOutputFlag = TRUE; - break; - - case 'c': - - /* Produce C hex output file */ - - Gbl_C_OutputFlag = TRUE; - break; - - case 'o': - - /* Produce AML offset table in C */ - - Gbl_C_OffsetTableFlag = TRUE; - break; - - default: - printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); - return (-1); - } - break; - - - case 't': /* Produce hex table output file */ - switch (AcpiGbl_Optarg[0]) - { - case 'a': - Gbl_HexOutputFlag = HEX_OUTPUT_ASM; - break; - - case 'c': - Gbl_HexOutputFlag = HEX_OUTPUT_C; - break; - - case 's': - Gbl_HexOutputFlag = HEX_OUTPUT_ASL; - break; - - default: - printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); - return (-1); - } - break; - - - case 'T': /* Create a ACPI table template file */ - Gbl_DoTemplates = TRUE; - Gbl_TemplateSignature = AcpiGbl_Optarg; - break; - - - case 'v': /* Version and verbosity settings */ - switch (AcpiGbl_Optarg[0]) - { - case '^': - printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); - exit (0); - - case 'a': - /* Disable All error/warning messages */ - - Gbl_NoErrors = TRUE; - break; - - case 'i': - /* - * Support for integrated development environment(s). - * - * 1) No compiler signon - * 2) Send stderr messages to stdout - * 3) Less verbose error messages (single line only for each) - * 4) Error/warning messages are formatted appropriately to - * be recognized by MS Visual Studio - */ - Gbl_VerboseErrors = FALSE; - Gbl_DoSignon = FALSE; - Gbl_Files[ASL_FILE_STDERR].Handle = stdout; - break; - - case 'o': - Gbl_DisplayOptimizations = TRUE; - break; - - case 'r': - Gbl_DisplayRemarks = FALSE; - break; - - case 's': - Gbl_DoSignon = FALSE; - break; - - case 't': - Gbl_VerboseTemplates = TRUE; - break; - - default: - printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); - return (-1); - } - break; - - - case 'w': /* Set warning levels */ - switch (AcpiGbl_Optarg[0]) - { - case '1': - Gbl_WarningLevel = ASL_WARNING; - break; - - case '2': - Gbl_WarningLevel = ASL_WARNING2; - break; - - case '3': - Gbl_WarningLevel = ASL_WARNING3; - break; - - case 'e': - Gbl_WarningsAsErrors = TRUE; - break; - - default: - printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); - return (-1); - } - break; - - - case 'x': /* Set debug print output level */ - AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); - break; - - - case 'z': - Gbl_UseOriginalCompilerId = TRUE; - break; - - - default: - return (-1); - } - - return (0); -} - - -/******************************************************************************* - * - * FUNCTION: AslCommandLine - * - * PARAMETERS: argc/argv - * - * RETURN: Last argv index - * - * DESCRIPTION: Command line processing - * - ******************************************************************************/ - -static int -AslCommandLine ( - int argc, - char **argv) -{ - int BadCommandLine = 0; - ACPI_STATUS Status; - - - /* Minimum command line contains at least the command and an input file */ - - if (argc < 2) - { - printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); - Usage (); - exit (1); - } - - /* Process all command line options */ - - BadCommandLine = AslDoOptions (argc, argv, FALSE); - - if (Gbl_DoTemplates) - { - Status = DtCreateTemplates (Gbl_TemplateSignature); - if (ACPI_FAILURE (Status)) - { - exit (-1); - } - exit (1); - } - - /* Next parameter must be the input filename */ - - if (!argv[AcpiGbl_Optind] && - !Gbl_DisasmFlag && - !Gbl_GetAllTables) - { - printf ("Missing input filename\n"); - BadCommandLine = TRUE; - } - - if (Gbl_DoSignon) - { - printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); - if (Gbl_IgnoreErrors) - { - printf ("Ignoring all errors, forcing AML file generation\n\n"); - } - } - - /* Abort if anything went wrong on the command line */ - - if (BadCommandLine) - { - printf ("\n"); - Usage (); - exit (1); - } - - return (AcpiGbl_Optind); } @@ -1021,24 +287,24 @@ main ( int Index2; - signal (SIGINT, AslSignalHandler); + ACPI_DEBUG_INITIALIZE (); /* For debug version only */ + /* Initialize preprocessor and compiler before command line processing */ + + signal (SIGINT, AslSignalHandler); AcpiGbl_ExternalFileList = NULL; AcpiDbgLevel = 0; - -#ifdef _DEBUG - _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF | - _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); -#endif - - /* Init and command line */ + PrInitializePreprocessor (); + AslInitialize (); Index1 = Index2 = AslCommandLine (argc, argv); - AslInitialize (); - PrInitializePreprocessor (); + /* Allocate the line buffer(s), must be after command line */ + + Gbl_LineBufferSize /= 2; + UtExpandLineBuffers (); - /* Options that have no additional parameters or pathnames */ + /* Perform global actions first/only */ if (Gbl_GetAllTables) { |