From: borutr Date: Wed, 13 Feb 2008 06:55:24 +0000 (+0000) Subject: * src/SDCCmain.c, src/SDCCglue.c: fixed --c1mode X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=dbb122d9717eadd84ad5a0e8cd35c30b2f231c76;p=fw%2Fsdcc * src/SDCCmain.c, src/SDCCglue.c: fixed --c1mode git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@5005 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index 890f06f1..51cbdc4a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-02-13 Borut Razem + + * src/SDCCmain.c, src/SDCCglue.c: fixed --c1mode + 2008-02-12 Maarten Brock * src/SDCCsymt.c (compareType): fixed bug 1309013 diff --git a/src/SDCCglue.c b/src/SDCCglue.c index 9aa05c9c..30ec7d65 100644 --- a/src/SDCCglue.c +++ b/src/SDCCglue.c @@ -1585,18 +1585,11 @@ glue (void) char moduleBuf[PATH_MAX]; int mcs51_like; - dbuf_init(&vBuf, 4096); - dbuf_init(&ovrBuf, 4096); + dbuf_init (&vBuf, 4096); + dbuf_init (&ovrBuf, 4096); - if(port->general.glue_up_main && - (TARGET_IS_MCS51 || TARGET_IS_DS390 || TARGET_IS_XA51 || TARGET_IS_DS400)) - { - mcs51_like=1; /*So it has bits, sfr, sbits, data, idata, etc...*/ - } - else - { - mcs51_like=0; - } + mcs51_like = (port->general.glue_up_main && + (TARGET_IS_MCS51 || TARGET_IS_DS390 || TARGET_IS_XA51 || TARGET_IS_DS400)); /* print the global struct definitions */ if (options.debug) @@ -1614,7 +1607,7 @@ glue (void) /* do the overlay segments */ emitOverlay (&ovrBuf); - outputDebugSymbols(); + outputDebugSymbols (); /* now put it all together into the assembler file */ /* create the assembler file name */ @@ -1633,21 +1626,20 @@ glue (void) if (!(asmFile = fopen (scratchFileName, "w"))) { werror (E_FILE_OPEN_ERR, scratchFileName); - exit (1); + exit (EXIT_FAILURE); } /* initial comments */ initialComments (asmFile); /* print module name */ - tfprintf (asmFile, "\t!module\n", - spacesToUnderscores (moduleBuf, moduleName, sizeof moduleBuf)); - if(mcs51_like) + tfprintf (asmFile, "\t!module\n", moduleName); + if (mcs51_like) { fprintf (asmFile, "\t.optsdcc -m%s", port->target); switch(options.model) - { + { case MODEL_SMALL: fprintf (asmFile, " --model-small"); break; case MODEL_COMPACT: fprintf (asmFile, " --model-compact"); break; case MODEL_MEDIUM: fprintf (asmFile, " --model-medium"); break; @@ -1655,7 +1647,7 @@ glue (void) case MODEL_FLAT24: fprintf (asmFile, " --model-flat24"); break; case MODEL_PAGE0: fprintf (asmFile, " --model-page0"); break; default: break; - } + } /*if(options.stackAuto) fprintf (asmFile, " --stack-auto");*/ if(options.useXstack) fprintf (asmFile, " --xstack"); /*if(options.intlong_rent) fprintf (asmFile, " --int-long-rent");*/ @@ -1664,7 +1656,7 @@ glue (void) if(options.parms_in_bank1) fprintf (asmFile, " --parms-in-bank1"); fprintf (asmFile, "\n"); } - else if(TARGET_Z80_LIKE || TARGET_IS_HC08) + else if (TARGET_Z80_LIKE || TARGET_IS_HC08) { fprintf (asmFile, "\t.optsdcc -m%s\n", port->target); } @@ -1682,7 +1674,7 @@ glue (void) if (port->assembler.externGlobal) printExterns (asmFile); - if(( mcs51_like ) + if (( mcs51_like ) ||( TARGET_IS_Z80 )) /*.p.t.20030924 need to output SFR table for Z80 as well */ { /* copy the sfr segment */ @@ -1692,7 +1684,7 @@ glue (void) dbuf_write_and_destroy (&sfr->oBuf, asmFile); } - if(mcs51_like) + if (mcs51_like) { /* copy the sbit segment */ fprintf (asmFile, "%s", iComments2); @@ -1701,21 +1693,21 @@ glue (void) dbuf_write_and_destroy (&sfrbit->oBuf, asmFile); /*JCF: Create the areas for the register banks*/ - if(RegBankUsed[0]||RegBankUsed[1]||RegBankUsed[2]||RegBankUsed[3]) + if (RegBankUsed[0] || RegBankUsed[1] || RegBankUsed[2] || RegBankUsed[3]) { fprintf (asmFile, "%s", iComments2); fprintf (asmFile, "; overlayable register banks\n"); fprintf (asmFile, "%s", iComments2); - if(RegBankUsed[0]) + if (RegBankUsed[0]) fprintf (asmFile, "\t.area REG_BANK_0\t(REL,OVR,DATA)\n\t.ds 8\n"); - if(RegBankUsed[1]||options.parms_in_bank1) + if (RegBankUsed[1] || options.parms_in_bank1) fprintf (asmFile, "\t.area REG_BANK_1\t(REL,OVR,DATA)\n\t.ds 8\n"); - if(RegBankUsed[2]) + if (RegBankUsed[2]) fprintf (asmFile, "\t.area REG_BANK_2\t(REL,OVR,DATA)\n\t.ds 8\n"); - if(RegBankUsed[3]) + if (RegBankUsed[3]) fprintf (asmFile, "\t.area REG_BANK_3\t(REL,OVR,DATA)\n\t.ds 8\n"); } - if(BitBankUsed) + if (BitBankUsed) { fprintf (asmFile, "%s", iComments2); fprintf (asmFile, "; overlayable bit register bank\n"); @@ -1750,7 +1742,7 @@ glue (void) } /* create the stack segment MOF */ - if (mainf && IFFUNC_HASBODY(mainf->type)) + if (mainf && IFFUNC_HASBODY (mainf->type)) { fprintf (asmFile, "%s", iComments2); fprintf (asmFile, "; Stack segment in internal ram \n"); @@ -1760,7 +1752,7 @@ glue (void) } /* create the idata segment */ - if ( (idata) && (mcs51_like) ) + if ((idata) && (mcs51_like)) { fprintf (asmFile, "%s", iComments2); fprintf (asmFile, "; indirectly addressable internal ram data\n"); @@ -1769,7 +1761,7 @@ glue (void) } /* create the absolute idata/data segment */ - if ( (i_abs) && (mcs51_like) ) + if ((i_abs) && (mcs51_like)) { fprintf (asmFile, "%s", iComments2); fprintf (asmFile, "; absolute internal ram data\n"); @@ -1797,7 +1789,7 @@ glue (void) } /* if external stack then reserve space for it */ - if (mainf && IFFUNC_HASBODY(mainf->type) && options.useXstack) + if (mainf && IFFUNC_HASBODY (mainf->type) && options.useXstack) { fprintf (asmFile, "%s", iComments2); fprintf (asmFile, "; external stack \n"); @@ -1838,7 +1830,7 @@ glue (void) } /* copy the interrupt vector table */ - if (mainf && IFFUNC_HASBODY(mainf->type)) + if (mainf && IFFUNC_HASBODY (mainf->type)) { fprintf (asmFile, "%s", iComments2); fprintf (asmFile, "; interrupt vector \n"); @@ -1862,11 +1854,11 @@ glue (void) tfprintf (asmFile, "\t!area\n", port->mem.post_static_name); tfprintf (asmFile, "\t!area\n", port->mem.static_name); - if (mainf && IFFUNC_HASBODY(mainf->type)) + if (mainf && IFFUNC_HASBODY (mainf->type)) { if (port->genInitStartup) { - port->genInitStartup(asmFile); + port->genInitStartup (asmFile); } else { @@ -1902,13 +1894,13 @@ glue (void) // if the port can copy the XINIT segment to XISEG if (port->genXINIT) { - port->genXINIT(asmFile); + port->genXINIT (asmFile); } } } dbuf_write_and_destroy (&statsg->oBuf, asmFile); - if (port->general.glue_up_main && mainf && IFFUNC_HASBODY(mainf->type)) + if (port->general.glue_up_main && mainf && IFFUNC_HASBODY (mainf->type)) { /* This code is generated in the post-static area. * This area is guaranteed to follow the static area @@ -1925,7 +1917,7 @@ glue (void) tfprintf (asmFile, "\t!areahome\n", HOME_NAME); dbuf_write_and_destroy (&home->oBuf, asmFile); - if (mainf && IFFUNC_HASBODY(mainf->type)) + if (mainf && IFFUNC_HASBODY (mainf->type)) { /* entry point @ start of HOME */ fprintf (asmFile, "__sdcc_program_startup:\n"); @@ -1952,7 +1944,7 @@ glue (void) if (port->genAssemblerEnd) { - port->genAssemblerEnd(asmFile); + port->genAssemblerEnd (asmFile); } fclose (asmFile); } diff --git a/src/SDCCmain.c b/src/SDCCmain.c index aa1e5e46..818f4fdf 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -1309,6 +1309,15 @@ parseCmdLine (int argc, char **argv) werror (E_NEED_OPT_O_IN_C1); exit (EXIT_FAILURE); } + else + { + char *p; + + moduleName = Safe_strdup(dstFileName); + for (p = moduleName; *p; ++p) + if (!isalnum ((unsigned char)*p)) + *p = '_'; + } } /* if no dstFileName given with -o, we've to find one: */ if (!dstFileName) @@ -2069,7 +2078,7 @@ preProcess (char **envp) /* Set bin paths */ static void -setBinPaths(const char *argv0) +setBinPaths (const char *argv0) { const char *p; char buf[PATH_MAX]; @@ -2085,22 +2094,22 @@ setBinPaths(const char *argv0) /* do it in reverse mode, so that addSetHead() can be used instead of slower addSet() */ - if ((p = getBinPath(argv0)) != NULL) - addSetHead(&binPathSet, (void *)p); + if ((p = getBinPath (argv0)) != NULL) + addSetHead (&binPathSet, (void *)p); - if ((p = getenv(SDCC_DIR_NAME)) != NULL) { - SNPRINTF(buf, sizeof buf, "%s" PREFIX2BIN_DIR, p); - addSetHead(&binPathSet, Safe_strdup(buf)); + if ((p = getenv (SDCC_DIR_NAME)) != NULL) { + SNPRINTF (buf, sizeof buf, "%s" PREFIX2BIN_DIR, p); + addSetHead (&binPathSet, Safe_strdup (buf)); } } /* Set system include path */ static void -setIncludePath(void) +setIncludePath (void) { char *p; - char *p2=NULL; - set *tempSet=NULL; + char *p2 = NULL; + set *tempSet = NULL; /* * Search logic: @@ -2118,28 +2127,28 @@ setIncludePath(void) if (options.nostdinc) return; - tempSet = appendStrSet(dataDirsSet, NULL, INCLUDE_DIR_SUFFIX); - includeDirsSet = appendStrSet(tempSet, NULL, DIR_SEPARATOR_STRING); - includeDirsSet = appendStrSet(includeDirsSet, NULL, port->target); - mergeSets(&includeDirsSet, tempSet); + tempSet = appendStrSet (dataDirsSet, NULL, INCLUDE_DIR_SUFFIX); + includeDirsSet = appendStrSet (tempSet, NULL, DIR_SEPARATOR_STRING); + includeDirsSet = appendStrSet (includeDirsSet, NULL, port->target); + mergeSets (&includeDirsSet, tempSet); - if ((p = getenv(SDCC_INCLUDE_NAME)) != NULL) - { - addSetHead(&includeDirsSet, p); - p2=Safe_alloc(strlen(p)+strlen(DIR_SEPARATOR_STRING)+strlen(port->target)+1); - if(p2!=NULL) + if ((p = getenv (SDCC_INCLUDE_NAME)) != NULL) { - strcpy(p2, p); - strcat(p2, DIR_SEPARATOR_STRING); - strcat(p2, port->target); - addSetHead(&includeDirsSet, p2); + addSetHead(&includeDirsSet, p); + p2=Safe_alloc(strlen(p)+strlen(DIR_SEPARATOR_STRING)+strlen(port->target)+1); + if (p2 != NULL) + { + strcpy (p2, p); + strcat (p2, DIR_SEPARATOR_STRING); + strcat (p2, port->target); + addSetHead (&includeDirsSet, p2); + } } - } } /* Set system lib path */ static void -setLibPath(void) +setLibPath (void) { char *p; @@ -2155,15 +2164,15 @@ setLibPath(void) if (options.nostdlib) return; - libDirsSet = appendStrSet(dataDirsSet, NULL, LIB_DIR_SUFFIX); + libDirsSet = appendStrSet (dataDirsSet, NULL, LIB_DIR_SUFFIX); - if ((p = getenv(SDCC_LIB_NAME)) != NULL) - addSetHead(&libDirsSet, p); + if ((p = getenv (SDCC_LIB_NAME)) != NULL) + addSetHead (&libDirsSet, p); } /* Set data path */ static void -setDataPaths(const char *argv0) +setDataPaths (const char *argv0) { const char *p; char buf[PATH_MAX]; @@ -2176,28 +2185,28 @@ setDataPaths(const char *argv0) * 3. - DATADIR (only on *nix) */ - if ((p = getenv(SDCC_DIR_NAME)) != NULL) { - SNPRINTF(buf, sizeof buf, "%s" PREFIX2DATA_DIR, p); - addSet(&dataDirsSet, Safe_strdup(buf)); + if ((p = getenv (SDCC_DIR_NAME)) != NULL) { + SNPRINTF (buf, sizeof buf, "%s" PREFIX2DATA_DIR, p); + addSet (&dataDirsSet, Safe_strdup (buf)); } - if ((p = getBinPath(argv0)) != NULL) { - SNPRINTF(buf, sizeof buf, "%s" BIN2DATA_DIR, p); - free((void *)p); - addSet(&dataDirsSet, Safe_strdup(buf)); + if ((p = getBinPath (argv0)) != NULL) { + SNPRINTF (buf, sizeof buf, "%s" BIN2DATA_DIR, p); + Safe_free ((void *)p); + addSet (&dataDirsSet, Safe_strdup(buf)); } #ifdef _WIN32 - if (peekSet(dataDirsSet) == NULL) { + if (peekSet (dataDirsSet) == NULL) { /* this should never happen... */ - wassertl(0, "Can't get binary path"); + wassertl (0, "Can't get binary path"); } #else - addSet(&dataDirsSet, Safe_strdup(DATADIR)); + addSet (&dataDirsSet, Safe_strdup (DATADIR)); #endif - setIncludePath(); - setLibPath(); + setIncludePath (); + setLibPath (); } static void @@ -2295,7 +2304,7 @@ main (int argc, char **argv, char **envp) /* install signal handler; it's only purpose is to call exit() to remove temp files */ - if (!getenv("SDCC_LEAVE_SIGNALS")) + if (!getenv ("SDCC_LEAVE_SIGNALS")) { signal (SIGABRT, sig_handler); signal (SIGTERM, sig_handler); @@ -2312,8 +2321,8 @@ main (int argc, char **argv, char **envp) _findPort (argc, argv); #ifdef JAMIN_DS390 - if (strcmp(port->target, "mcs51") == 0) { - printf("DS390 jammed in A\n"); + if (strcmp (port->target, "mcs51") == 0) { + printf ("DS390 jammed in A\n"); _setPort ("ds390"); ds390_jammed = 1; } @@ -2340,8 +2349,8 @@ main (int argc, char **argv, char **envp) initValues (); - setBinPaths(argv[0]); - setDataPaths(argv[0]); + setBinPaths (argv[0]); + setDataPaths (argv[0]); if (port->initPaths) port->initPaths(); @@ -2385,12 +2394,12 @@ main (int argc, char **argv, char **envp) yyparse (); - if (pclose(yyin)) - fatalError = 1; + if (!options.c1mode) + if (pclose(yyin)) + fatalError = 1; - if (fatalError) { + if (fatalError) exit (EXIT_FAILURE); - } if (port->general.do_glue != NULL) (*port->general.do_glue) (); @@ -2402,9 +2411,8 @@ main (int argc, char **argv, char **envp) glue (); } - if (fatalError) { + if (fatalError) exit (EXIT_FAILURE); - } if (!options.c1mode && !noAssemble) { @@ -2416,13 +2424,13 @@ main (int argc, char **argv, char **envp) closeDumpFiles(); if (options.debug && debugFile) - debugFile->closeFile(); + debugFile->closeFile (); if (!options.cc_only && !fatalError && !noAssemble && !options.c1mode && - (fullSrcFileName || peekSet(relFilesSet) != NULL)) + (fullSrcFileName || peekSet (relFilesSet) != NULL)) { if (options.verbose) printf ("sdcc: Calling linker...\n");