}
/*-----------------------------------------------------------------*/
-/* 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 */
/*-----------------------------------------------------------------*/
}
iloop = ilist->init.deep;
- lcnt = 1;
- for (last_type = type; last_type; last_type = last_type->next)
+ lcnt = DCL_ELEM (type);
+ for (last_type = type->next; last_type && DCL_ELEM (last_type); last_type = last_type->next)
lcnt *= DCL_ELEM (last_type);
for (;;)
/* emitMaps - emits the code for the data portion the code */
/*-----------------------------------------------------------------*/
void
-emitMaps ()
+emitMaps (void)
{
inInitMode++;
/* no special considerations for the following
/* glue - the final glue that hold the whole thing together */
/*-----------------------------------------------------------------*/
void
-glue ()
+glue (void)
{
FILE *vFile;
FILE *asmFile;
fprintf (asmFile, "; special function bits \n");
fprintf (asmFile, "%s", iComments2);
copyFile (asmFile, sfrbit->oFile);
+
+ /*JCF: Create the areas for the register banks*/
+ if( 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
+ /* initialise the stack pointer. JCF: aslink takes care of the location */
fprintf (asmFile, "\tmov\tsp,#__start__stack\n"); /* MOF */
fprintf (asmFile, "\tlcall\t__sdcc_external_startup\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.