+2003-01-14 Bernhard Held <bernhard@bernhardheld.de>
+
+ * as/mcs51/lkmem.c: rflag is for DS390
+ * src/SDCCglobl.h: removed out_name and options stackOnData, genericPtr
+ * src/SDCCmain.c (optionsTable, setDefaultOptions): removed --stack-after-data and --generic
+ (linkEdit): move mem- and map-files the same way as ihx-files
+ * src/z80/main.c (_setDefaultOptions): removed --generic
+ * src/SDCCmain.c (_processC1Arg, parseCmdLine, main): --c1mode works again
+ * src/SDCCglue.c (createInterruptVect, glue): --c1mode works again
+ * src/pic/glue.c (picglue): --c1mode works again
+ * src/pic16/glue.c (pic16glue): --c1mode works again
+ * src/asm.c (printCLine): fix #660034
+
2003-01-13 Bernhard Held <bernhard@bernhardheld.de>
* src/ds390/peeph.def: fix #123; add 14 rules by Fiorenzo D. Ramaglia <fd.ramaglia@tin.it>, 1 by Frieder
}
/*Report the position of the begining of the stack*/
- /* TODO find flag for DS390 */
fprintf(of, "\n%stack starts at: 0x%02lx (sp set to 0x%02lx)",
- 0 ? "16 bit mode initial s" : "S", Stack.Start, Stack.Start-1);
+ rflag ? "16 bit mode initial s" : "S", Stack.Start, Stack.Start-1);
/*Check that the stack pointer is landing in a safe place:*/
if( (dram[Stack.Start] & 0x8000) == 0x8000 )
int stackAuto; /* Stack Automatic */
int useXstack; /* use Xternal Stack */
int stack10bit; /* use 10 bit stack (flat24 model only) */
- int genericPtr; /* use generic pointers */
int dump_raw; /* dump after intermediate code generation */
int dump_gcse; /* dump after gcse */
int dump_loop; /* dump after loop optimizations */
int nopeep; /* no peep hole optimization */
int asmpeep; /* pass inline assembler thru peep hole */
int debug; /* generate extra debug info */
- int stackOnData; /* stack after data segment */
int c1mode; /* Act like c1 - no pre-proc, asm or link */
char *peep_file; /* additional rules for peep hole */
- char *out_name; /* Asm output name for c1 mode */
int nostdlib; /* Don't use standard lib files */
int nostdinc; /* Don't use standard include files */
int noRegParams; /* Disable passing some parameters in registers */
/* 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;
}
/* 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)
{
- /* -o option overrides default name? */
- if (noAssemble && fullDstFileName)
- {
- strcpy (scratchFileName, fullDstFileName);
- }
- else
- {
- strcpy (scratchFileName, dstFileName);
- 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")))
{ 0, OPTION_STACK_8BIT, NULL, "use the 8bit stack for the ds390 (not supported yet)" },
{ 0, "--stack-10bit", &options.stack10bit, "use the 10bit stack for ds390 (default)" },
{ 0, "--xstack", &options.useXstack, "Use external stack" },
- { 0, "--generic", &options.genericPtr, "All unqualified ptrs converted to '_generic'" },
{ 0, OPTION_NO_GCSE, NULL, "Disable the GCSE optimisation" },
{ 0, OPTION_NO_LOOP_INV, NULL, "Disable optimisation of invariants" },
{ 0, OPTION_NO_LOOP_IND, NULL, NULL },
{ 0, "--peep-asm", &options.asmpeep, NULL },
{ 0, "--debug", &options.debug, "Enable debugging symbol output" },
{ 'v', OPTION_VERSION, NULL, "Display sdcc's version" },
- { 0, "--stack-after-data", &options.stackOnData, "initialize the stackpointer with the last byte use in DSEG" },
{ 'E', "--preprocessonly", &preProcOnly, "Preprocess only, do not compile" },
{ 0, "--c1mode", &options.c1mode, "Act in c1 mode. The input is preprocessed code, the output is assembly code." },
{ 0, "--help", NULL, "Display this help" },
static const UNSUPPORTEDOPT
unsupportedOptTable[] = {
- { 'a', NULL, "use --stack-auto instead." },
- { 'g', NULL, "use --generic instead" },
{ 'X', NULL, "use --xstack-loc instead" },
{ 'x', NULL, "use --xstack instead" },
{ 'i', NULL, "use --idata-loc instead" },
options.data_loc = 0; /* JCF: By default let the linker locate data */
options.xdata_loc = 0;
options.idata_loc = 0x80;
- options.genericPtr = 1; /* default on */
options.nopeep = 0;
options.model = port->general.default_model;
options.nostdlib = 0;
}
/* the only source file */
- if (!(srcFile = fopen ((fullSrcFileName = s), "r")))
+ fullSrcFileName = s;
+ if (!(srcFile = fopen (fullSrcFileName, "r")))
{
werror (E_FILE_OPEN_ERR, s);
exit (1);
}
-static void
-_processC1Arg (char *s)
-{
- if (fullSrcFileName)
- {
- if (options.out_name)
- {
- werror (W_TOO_MANY_SRC, s);
- return;
- }
- options.out_name = Safe_strdup (s);
- }
- else
- {
- processFile (s);
- }
-}
-
static void
_setModel (int model, const char *sz)
{
if (argv[i][2] == ' ' || argv[i][2] == '\0')
{
i++;
- if (i >= argc)
+ if (i >= argc)
{
/* No argument. */
werror(E_ARGUMENT_MISSING, argv[i-1]);
break;
}
- else
+ else
{
rest = argv[i];
}
if (!port->parseOption (&argc, argv, &i))
{
/* no option must be a filename */
- if (options.c1mode)
- _processC1Arg (argv[i]);
- else
- processFile (argv[i]);
+ processFile (argv[i]);
}
}
/* -o option overrides default name? */
if (fullDstFileName)
{
+ char *p, *q;
/* the linked file gets the name of the first modul */
if (fullSrcFileName)
- {
+ {
strcpy (scratchFileName, dstFileName);
+ p = strlen (scratchFileName) + scratchFileName;
}
else
{
strcpy (scratchFileName, relFiles[0]);
- /* strip ".rel" extension */
- *strrchr (scratchFileName, '.') = '\0';
+ /* strip "rel" extension */
+ p = strrchr (scratchFileName, '.') + 1;
}
- strcat (scratchFileName, options.out_fmt ? ".S19" : ".ihx");
+ strcpy (p, options.out_fmt ? "S19" : "ihx");
+ rename (scratchFileName, fullDstFileName);
+
+ q = strrchr (fullDstFileName, '.');
+ if (q)
+ {
+ /* point after the '.' of the extension */
+ q++;
+ }
+ else
+ {
+ /* no extension: append new extensions */
+ q = strlen (fullDstFileName) + fullDstFileName;
+ }
+ strcpy (p, "map");
+ strcpy (q, "map");
+ rename (scratchFileName, fullDstFileName);
+ strcpy (p, "mem");
+ strcpy (q, "mem");
rename (scratchFileName, fullDstFileName);
}
}
}
setMainValue ("cppextraopts", join(preArgv));
-
+
if (preProcOnly)
{
if (fullDstFileName)
/* if no input then printUsage & exit */
if ((!options.c1mode && !fullSrcFileName && !nrelFiles) ||
- (options.c1mode && !fullSrcFileName && !options.out_name))
+ (options.c1mode && !fullSrcFileName))
{
printUsage ();
exit (0);
static FILE *inFile=NULL;
static char inLineString[1024];
static int inLineNo=0;
+static char lastSrcFile[PATH_MAX];
int rewinds=0;
char *printCLine (char *srcFile, int lineno) {
char *ilsP=inLineString;
+
+ if (inFile) {
+ if (strcmp (lastSrcFile, srcFile) != 0) {
+ fclose (inFile);
+ inFile = NULL;
+ }
+ }
if (!inFile) {
inFile=fopen(srcFile, "r");
if (!inFile) {
perror ("printCLine");
exit (1);
}
+ strcpy (lastSrcFile, srcFile);
}
if (lineno<inLineNo) {
fseek (inFile, 0, SEEK_SET);
/* now put it all together into the assembler file */
/* create the assembler file name */
- if (!options.c1mode) {
- if (noAssemble && fullDstFileName)
- {
- sprintf (buffer, fullDstFileName);
- }
- else
- {
- sprintf (buffer, dstFileName);
- strcat (buffer, ".asm");
- }
- }
- else {
- strcpy(buffer, options.out_name);
- }
+ if ((noAssemble || options.c1mode) && fullDstFileName)
+ {
+ sprintf (buffer, fullDstFileName);
+ }
+ else
+ {
+ sprintf (buffer, dstFileName);
+ strcat (buffer, ".asm");
+ }
if (!(asmFile = fopen (buffer, "w"))) {
werror (E_FILE_OPEN_ERR, buffer);
/* now put it all together into the assembler file */
/* create the assembler file name */
- if (!options.c1mode) {
- if (noAssemble && fullDstFileName)
- {
- sprintf (buffer, fullDstFileName);
- }
- else
- {
- sprintf (buffer, dstFileName);
- strcat (buffer, ".asm");
- }
- }
- else {
- strcpy(buffer, options.out_name);
- }
+ if ((noAssemble || options.c1mode) && fullDstFileName)
+ {
+ sprintf (buffer, fullDstFileName);
+ }
+ else
+ {
+ sprintf (buffer, dstFileName);
+ strcat (buffer, ".asm");
+ }
if (!(asmFile = fopen (buffer, "w"))) {
werror (E_FILE_OPEN_ERR, buffer);
static void
_setDefaultOptions (void)
{
- options.genericPtr = 1; /* default on */
options.nopeep = 0;
options.stackAuto = 1;
options.mainreturn = 1;