X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCmain.c;h=a15d1d6b7ee089f2874918f1cd9f58006b9dc362;hb=d5e163c45df3f0603c1f52c7d4467b60a5e0afee;hp=308175e216eb28a4500b6d638e7e0b7e29ae43a6;hpb=7ec6a3cbc5f32844c36bc0a78c64824067c84b97;p=fw%2Fsdcc diff --git a/src/SDCCmain.c b/src/SDCCmain.c index 308175e2..a15d1d6b 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -31,13 +31,12 @@ #include "MySystem.h" #include "SDCCmacro.h" #include "SDCCutil.h" +#include "SDCCdebug.h" #include "SDCCargs.h" -#if NATIVE_WIN32 +#ifdef _WIN32 #include -#endif - -#if !defined(__BORLANDC__) && !defined(_MSC_VER) +#else #include #include #endif @@ -49,7 +48,6 @@ extern int yyparse (); FILE *srcFile; /* source file */ -FILE *cdbFile = NULL; /* debugger information output file */ char *fullSrcFileName; /* full name for the source file; */ /* can be NULL while c1mode or linking without compiling */ char *fullDstFileName; /* full name for the output file; */ @@ -60,16 +58,19 @@ char *dstPath = ""; /* path for the output files; */ /* "" is equivalent with cwd */ char *moduleName; /* module name is source file without path and extension */ /* can be NULL while linking without compiling */ +/* + * in following definitions fixed length arrays are very dangerous! + * Sets should be used instead. See definition of asmOptions. + */ const char *preArgv[128]; /* pre-processor arguments */ int currRegBank = 0; -int RegBankUsed[4]={1, 0, 0, 0}; /*JCF: Reg Bank 0 used by default*/ +int RegBankUsed[4]={1, 0, 0, 0}; /*JCF: Reg Bank 0 used by default*/ struct optimize optimize; struct options options; -char *VersionString = SDCC_VERSION_STR; int preProcOnly = 0; int noAssemble = 0; +set *asmOptions = NULL; /* set of assembler options */ char *linkOptions[128]; -const char *asmOptions[128]; char *libFiles[128]; int nlibFiles = 0; char *libPaths[128]; @@ -88,10 +89,6 @@ int ds390_jammed = 0; char scratchFileName[PATH_MAX]; char buffer[PATH_MAX * 2]; -// In MSC VC6 default search path for exe's to path for this - -char DefaultExePath[128]; - #define OPTION_HELP "-help" #define LENGTH(_a) (sizeof(_a)/sizeof(*(_a))) @@ -117,7 +114,7 @@ char DefaultExePath[128]; #define OPTION_NO_LABEL_OPT "--nolabelopt" #define OPTION_NO_LOOP_INV "--noinvariant" #define OPTION_NO_LOOP_IND "--noinduction" -#define OPTION_LESS_PEDANTIC "--lesspedantic" +#define OPTION_LESS_PEDANTIC "--less-pedantic" #define OPTION_NO_GCSE "--nogcse" #define OPTION_SHORT_IS_8BITS "--short-is-8bits" #define OPTION_TINI_LIBID "--tini-libid" @@ -242,7 +239,7 @@ unsupportedOptTable[] = { /** List of all default constant macros. */ static const char *_baseValues[] = { - "cpp", "{bindir}{sep}sdcpp", + "cpp", "sdcpp", "cppextraopts", "", /* Path seperator character */ "sep", DIR_SEPARATOR_STRING, @@ -383,7 +380,7 @@ printVersionInfo () for (i = 0; i < NUM_PORTS; i++) fprintf (stderr, "%s%s", i == 0 ? "" : "/", _ports[i]->target); - fprintf (stderr, " %s" + fprintf (stderr, " " SDCC_VERSION_STR #ifdef SDCC_SUB_VERSION_STR "/" SDCC_SUB_VERSION_STR #endif @@ -401,8 +398,6 @@ printVersionInfo () #else " (UNIX) \n" #endif - - ,VersionString ); } @@ -475,6 +470,26 @@ parseWithComma (char **dest, char *src) } } +/*-----------------------------------------------------------------*/ +/* setParseWithComma - separates string with comma to a set */ +/*-----------------------------------------------------------------*/ +void +setParseWithComma (set **dest, char *src) +{ + char *p; + + /* skip the initial white spaces */ + while (isspace (*src)) + src++; + + if ((p = strtok(src, ",")) != NULL) { + do + { + addSet(dest, p); + } while ((p = strtok(NULL, ",")) != NULL); + } +} + /*-----------------------------------------------------------------*/ /* setDefaultOptions - sets the default options */ /*-----------------------------------------------------------------*/ @@ -484,9 +499,7 @@ setDefaultOptions () int i; for (i = 0; i < 128; i++) - preArgv[i] = asmOptions[i] = - linkOptions[i] = relFiles[i] = libFiles[i] = - libPaths[i] = NULL; + preArgv[i] = linkOptions[i] = relFiles[i] = libFiles[i] = libPaths[i] = NULL; /* first the options part */ options.stack_loc = 0; /* stack pointer initialised to 0 */ @@ -1088,7 +1101,7 @@ parseCmdLine (int argc, char **argv) /* assembler options */ else if (argv[i][2] == 'a') { - parseWithComma ((char **) asmOptions, getStringArg("-Wa", argv, &i, argc)); + setParseWithComma (&asmOptions, getStringArg("-Wa", argv, &i, argc)); } else { @@ -1115,6 +1128,7 @@ parseCmdLine (int argc, char **argv) addToList (preArgv, "-C"); break; } + case 'd': case 'D': case 'I': @@ -1244,18 +1258,15 @@ parseCmdLine (int argc, char **argv) if (!options.xstack_loc) options.xstack_loc = options.xdata_loc; - /* if debug option is set the open the cdbFile */ + /* if debug option is set then open the cdbFile */ if (options.debug && fullSrcFileName) { SNPRINTF (scratchFileName, sizeof(scratchFileName), "%s.adb", dstFileName); //JCF: Nov 30, 2002 - if ((cdbFile = fopen (scratchFileName, "w")) == NULL) - werror (E_FILE_OPEN_ERR, scratchFileName); + if(debugFile->openFile(scratchFileName)) + debugFile->writeModule(moduleName); else - { - /* add a module record */ - fprintf (cdbFile, "M:%s\n", moduleName); - } + werror (E_FILE_OPEN_ERR, scratchFileName); } return 0; } @@ -1612,8 +1623,8 @@ preProcess (char **envp) } else { - /* Have to set cppoutfilename to something, even if piping */ - setMainValue ("cppoutfilename", ""); + /* Piping: set cppoutfilename to NULL, to avoid empty quotes */ + setMainValue ("cppoutfilename", NULL); } if (options.verbose) @@ -1710,7 +1721,7 @@ _discoverPaths (const char *argv0) strncpyz (scratchFileName, argv0, sizeof(scratchFileName)); *strrchr (scratchFileName, DIR_SEPARATOR_CHAR) = '\0'; setMainValue ("bindir", scratchFileName); - ExePathList[0] = Safe_strdup (scratchFileName); + addSet(&binPathSet, Safe_strdup (scratchFileName)); } else if (getenv (SDCCDIR_NAME) != NULL) { @@ -1718,12 +1729,12 @@ _discoverPaths (const char *argv0) strncpyz (scratchFileName, getenv (SDCCDIR_NAME), sizeof(scratchFileName)); strncatz (scratchFileName, buffer, sizeof(scratchFileName)); setMainValue ("bindir", scratchFileName); - ExePathList[0] = Safe_strdup (scratchFileName); + addSet(&binPathSet, Safe_strdup (scratchFileName)); } else { setMainValue ("bindir", BINDIR); - ExePathList[0] = BINDIR; + addSet(&binPathSet, BINDIR); } do @@ -1955,8 +1966,8 @@ main (int argc, char **argv, char **envp) } closeDumpFiles(); - if (cdbFile) - fclose (cdbFile); + if (options.debug && debugFile) + debugFile->closeFile(); if (!options.cc_only && !fatalError &&