#include "SDCCmacro.h"
#include "MySystem.h"
#include "glue.h"
+#include <errno.h>
//#include "gen.h"
pic14_options_t pic14_options;
+#define ARG_STACKLOC "--stack-loc"
+#define ARG_STACKSIZ "--stack-size"
+
extern int debug_verbose; /* from pcode.c */
static OPTION _pic14_poptions[] = {
{ 0 , "--debug-xtra", &debug_verbose, "show more debug info in assembly output" },
{ 0 , "--no-pcode-opt", &pic14_options.disable_df, "disable (slightly faulty) optimization on pCode" },
+ { 0 , ARG_STACKLOC, NULL, "sets the lowest address of the argument passing stack" },
+ { 0 , ARG_STACKSIZ, NULL, "sets the size if the argument passing stack (default: 16, minimum: 4)" },
{ 0 , NULL, NULL, NULL }
};
return 1;
}
-static int
-_process_pragma(const char *sz)
-{
- static const char *WHITE = " \t";
- char *ptr = strtok((char *)sz, WHITE);
-
- if (startsWith (ptr, "memmap"))
- {
- char *start;
- char *end;
- char *type;
- char *alias;
-
- start = strtok((char *)NULL, WHITE);
- end = strtok((char *)NULL, WHITE);
- type = strtok((char *)NULL, WHITE);
- alias = strtok((char *)NULL, WHITE);
-
- if (start != (char *)NULL
- && end != (char *)NULL
- && type != (char *)NULL) {
- value *startVal = constVal(start);
- value *endVal = constVal(end);
- value *aliasVal;
- memRange r;
-
- if (alias == (char *)NULL) {
- aliasVal = constVal(0);
- } else {
- aliasVal = constVal(alias);
- }
-
- r.start_address = (int)floatFromVal(startVal);
- r.end_address = (int)floatFromVal(endVal);
- r.alias = (int)floatFromVal(aliasVal);
- r.bank = (r.start_address >> 7) & 3;
-
- if (strcmp(type, "RAM") == 0) {
- addMemRange(&r, 0);
- } else if (strcmp(type, "SFR") == 0) {
- addMemRange(&r, 1);
- } else {
- return 1;
- }
- }
-
- return 0;
- } else if (startsWith (ptr, "maxram")) {
- // not used any more - comes from device config file pic14devices.txt instead
- return 0;
- }
- return 1;
-}
-
extern char *udata_section_name;
static bool
*/
static const char *_linkCmd[] =
{
- "gplink", "$l", "-o \"$2\"", "\"$1\"", "$3", NULL
+ "gplink", "$l", "-w", "-r", "-o \"$2\"", "\"$1\"", "$3", NULL
};
static const char *_asmCmd[] =
*
*/
- sprintf(lfrm, "{linker} {incdirs} {sysincdirs} {lflags} -o {outfile} {user_ofile} {spec_ofiles} {ofiles} {libs}");
+ sprintf(lfrm, "{linker} {incdirs} {sysincdirs} {lflags} -w -r -o {outfile} {user_ofile} {spec_ofiles} {ofiles} {libs}");
shash_add(&linkValues, "linker", "gplink");
shash_add(&linkValues, "lflags", joinStrSet(linkOptionsSet));
- shash_add(&linkValues, "outfile", dstFileName);
+ shash_add(&linkValues, "outfile", fullDstFileName ? fullDstFileName : dstFileName);
if(fullSrcFileName) {
- sprintf(temp, "%s.o", dstFileName);
+ sprintf(temp, "%s.o", fullDstFileName ? fullDstFileName : dstFileName );
shash_add(&linkValues, "user_ofile", temp);
}
16f877)
*/
},
+ /* tags for generic pointers */
+ { 0x00, 0x00, 0x00, 0x80 }, /* far, near, xstack, code */
{
"XSEG (XDATA)",
"STACK (DATA)",
NULL, // xidata
NULL, // xinit
"CONST (CODE)", // const_name - const data (code or not)
+ "CABS (ABS,CODE)", // cabs_name - const absolute data (code or not)
+ "XABS (ABS,XDATA)", // xabs_name - absolute xdata
+ "IABS (ABS,DATA)", // iabs_name - absolute data
NULL,
NULL,
1 // code is read only
NULL, /* genInitStartup */
_pic14_reset_regparm,
_pic14_regparm,
- _process_pragma, /* process a pragma */
+ NULL, /* process a pragma */
NULL,
_hasNativeMulFor,
hasExtBitOp, /* hasExtBitOp */