}
/*-----------------------------------------------------------------*/
-/* rmTmpFiles - closes all tmp files created by the compiler */
+/* rmTmpFiles - unlinks all tmp files created by the compiler */
/* because of BRAIN DEAD MS/DOS & CYGNUS Libraries */
/*-----------------------------------------------------------------*/
DEFSETFUNC (rmTmpFiles)
return 0;
}
+/*-----------------------------------------------------------------*/
+/* rm_tmpfiles - close and remove temporary files and delete sets */
+/*-----------------------------------------------------------------*/
+void
+rm_tmpfiles (void)
+{
+ /* close temporary files */
+ applyToSet (tmpfileSet, closeTmpFiles);
+ /* remove temporary files */
+ applyToSet (tmpfileNameSet, rmTmpFiles);
+ /* delete temorary file sets */
+ deleteSet (&tmpfileSet);
+ deleteSet (&tmpfileNameSet);
+}
+
/*-----------------------------------------------------------------*/
/* copyFile - copies source file to destination file */
/*-----------------------------------------------------------------*/
resolveIvalSym (sym->ival);
printIval (sym, sym->type, sym->ival, out);
noAlloc--;
+ // if sym->ival is a string, WE don't need it anymore
+ if (IS_AST_SYM_VALUE(list2expr(sym->ival)) &&
+ list2val(sym->ival)->sym->isstrlit) {
+ freeStringSymbol(list2val(sym->ival)->sym);
+ }
}
else {
/* allocate space */
/* emitMaps - emits the code for the data portion the code */
/*-----------------------------------------------------------------*/
void
-emitMaps ()
+emitMaps (void)
{
inInitMode++;
/* no special considerations for the following
/* only if the main function exists */
if (!(mainf = findSymWithLevel (SymbolTab, mainf)))
{
- if (!options.cc_only && !noAssemble)
+ if (!options.cc_only && !noAssemble && !options.c1mode)
werror (E_NO_MAIN);
return;
}
/* glue - the final glue that hold the whole thing together */
/*-----------------------------------------------------------------*/
void
-glue ()
+glue (void)
{
FILE *vFile;
FILE *asmFile;
/* now put it all together into the assembler file */
/* create the assembler file name */
- if (!options.c1mode)
+ /* -o option overrides default name? */
+ if ((noAssemble || options.c1mode) && fullDstFileName)
{
- sprintf (scratchFileName, srcFileName);
- strcat (scratchFileName, port->assembler.file_ext);
+ strcpy (scratchFileName, fullDstFileName);
}
else
{
- strcpy (scratchFileName, options.out_name);
+ strcpy (scratchFileName, dstFileName);
+ strcat (scratchFileName, port->assembler.file_ext);
}
if (!(asmFile = fopen (scratchFileName, "w")))
fprintf (asmFile, "; special function bits \n");
fprintf (asmFile, "%s", iComments2);
copyFile (asmFile, sfrbit->oFile);
+
+ /*JCF: Create the areas for the register banks*/
+ if(port->general.glue_up_main &&
+ (TARGET_IS_MCS51 || TARGET_IS_DS390 || TARGET_IS_XA51))
+ {
+ 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])
+ fprintf (asmFile, "\t.area REG_BANK_0\t(REL,OVR,DATA)\n\t.ds 8\n");
+ 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])
+ fprintf (asmFile, "\t.area REG_BANK_2\t(REL,OVR,DATA)\n\t.ds 8\n");
+ if(RegBankUsed[3])
+ fprintf (asmFile, "\t.area REG_BANK_3\t(REL,OVR,DATA)\n\t.ds 8\n");
+ }
+ }
/* copy the data segment */
fprintf (asmFile, "%s", iComments2);
(unsigned int) options.xdata_loc & 0xff);
}
- /* initialise the stack pointer */
- /* if the user specified a value then use it */
- if (options.stack_loc)
- fprintf (asmFile, "\tmov\tsp,#%d\n", options.stack_loc & 0xff);
- else
- /* no: we have to compute it */
- if (!options.stackOnData && maxRegBank <= 3)
- fprintf (asmFile, "\tmov\tsp,#%d\n", ((maxRegBank + 1) * 8) - 1);
- else
- fprintf (asmFile, "\tmov\tsp,#__start__stack\n"); /* MOF */
+ /* initialise the stack pointer. JCF: aslink takes care of the location */
+ fprintf (asmFile, "\tmov\tsp,#__start__stack - 1\n"); /* MOF */
fprintf (asmFile, "\tlcall\t__sdcc_external_startup\n");
fprintf (asmFile, "\tmov\ta,dpl\n");
port->genAssemblerEnd(asmFile);
}
fclose (asmFile);
- applyToSet (tmpfileSet, closeTmpFiles);
- applyToSet (tmpfileNameSet, rmTmpFiles);
-}
-#if defined (__MINGW32__) || defined (__CYGWIN__) || defined (_MSC_VER)
-void
-rm_tmpfiles (void)
-{
- applyToSet (tmpfileSet, closeTmpFiles);
- applyToSet (tmpfileNameSet, rmTmpFiles);
+ rm_tmpfiles ();
}
-#endif
/** Creates a temporary file name a'la tmpnam which avoids the bugs
in cygwin wrt c:\tmp.