what you give them. Help stamp out software-hoarding!
-------------------------------------------------------------------------*/
+#include <signal.h>
#include "common.h"
#include <ctype.h>
#include "newalloc.h"
#define OPTION_SHORT_IS_8BITS "--short-is-8bits"
#define OPTION_TINI_LIBID "--tini-libid"
#define OPTION_NO_XINIT_OPT "--no-xinit-opt"
+#define OPTION_XRAM_SIZE "--xram-size"
+#define OPTION_CODE_SIZE "--code-size"
static const OPTION
optionsTable[] = {
{ 0, "--dumptree", &options.dump_tree, "dump front-end AST before generating iCode" },
{ 0, OPTION_DUMP_ALL, NULL, "Dump the internal structure at all stages" },
{ 0, OPTION_XRAM_LOC, NULL, "<nnnn> External Ram start location" },
+ { 0, OPTION_XRAM_SIZE, NULL, "<nnnn> External Ram size" },
{ 0, OPTION_IRAM_SIZE, NULL, "<nnnn> Internal Ram size" },
{ 0, OPTION_XSTACK_LOC, NULL, "<nnnn> External Ram start location" },
{ 0, OPTION_CODE_LOC, NULL, "<nnnn> Code Segment Location" },
+ { 0, OPTION_CODE_SIZE, NULL, "<nnnn> Code Segment size" },
{ 0, OPTION_STACK_LOC, NULL, "<nnnn> Stack pointer initial value" },
{ 0, OPTION_DATA_LOC, NULL, "<nnnn> Direct data start location" },
{ 0, OPTION_IDATA_LOC, NULL, NULL },
NULL
};
-static const char *_preCmd = "{cpp} -nostdinc -Wall -lang-c++ -DSDCC=1 {cppextraopts} {fullsrcfilename} {cppoutfilename}";
+static const char *_preCmd = "{cpp} -nostdinc -Wall -std=c99 -DSDCC=1 {cppextraopts} {fullsrcfilename} {cppoutfilename}";
PORT *port;
continue;
}
+ if (strcmp (argv[i], OPTION_XRAM_SIZE) == 0)
+ {
+ options.xram_size = getIntArg(OPTION_IRAM_SIZE, argv, &i, argc);
+ options.xram_size_set = TRUE;
+ continue;
+ }
+
+ if (strcmp (argv[i], OPTION_CODE_SIZE) == 0)
+ {
+ options.code_size = getIntArg(OPTION_IRAM_SIZE, argv, &i, argc);
+ continue;
+ }
+
if (strcmp (argv[i], OPTION_DATA_LOC) == 0)
{
options.data_loc = getIntArg(OPTION_DATA_LOC, argv, &i, argc);
if (options.iram_size)
fprintf (lnkfile, "-a 0x%04x\n", options.iram_size);
+ /* if xram size specified */
+ if (options.xram_size_set)
+ fprintf (lnkfile, "-v 0x%04x\n", options.xram_size);
+
+ /* if code size specified */
+ if (options.code_size)
+ fprintf (lnkfile, "-w 0x%04x\n", options.code_size);
+
if (options.debug)
fprintf (lnkfile, "-z\n");
WRITE_SEG_LOC (BIT_NAME, 0);
/* JCF: stack start */
- if(options.stack_loc) {
- WRITE_SEG_LOC ("SSEG", options.stack_loc & 0xff);
+ if ( (options.stack_loc) && (options.stack_loc<0x100) ) {
+ WRITE_SEG_LOC ("SSEG", options.stack_loc);
}
/* add the extra linker options */
}
+static void
+sig_handler (int signal)
+{
+ char *sig_string;
+
+ switch (signal)
+ {
+ case SIGABRT:
+ sig_string = "SIGABRT";
+ break;
+ case SIGTERM:
+ sig_string = "SIGTERM";
+ break;
+ case SIGINT:
+ sig_string = "SIGINT";
+ break;
+ case SIGSEGV:
+ sig_string = "SIGSEGV";
+ break;
+ default:
+ sig_string = "Unknown?";
+ break;
+ }
+ fprintf (stderr, "Catched signal %d: %s\n", signal, sig_string);
+ exit (1);
+}
+
/*
* main routine
* initialises and calls the parser
/* install atexit handler */
atexit(rm_tmpfiles);
- /* Before parsing the command line options, do a
+ /* install signal handler;
+ it's only purpuse is to call exit() to remove temp files */
+ signal (SIGABRT, sig_handler);
+ signal (SIGTERM, sig_handler);
+ signal (SIGINT , sig_handler);
+ signal (SIGSEGV, sig_handler);
+
+ /* Before parsing the command line options, do a
* search for the port and processor and initialize
* them if they're found. (We can't gurantee that these
* will be the first options specified).