* src/pic/device.c (create_pic,ram_map): add memRange entries to PIC
[fw/sdcc] / src / pic / main.c
index efca60eaa99c71149c5cc9e9e7794cf663253cf4..37a2b40a82bd9f0b80f70d6c15ccb3041cc64765 100644 (file)
@@ -12,6 +12,7 @@
 #include "SDCCmacro.h"
 #include "MySystem.h"
 #include "glue.h"
+#include <errno.h>
 //#include "gen.h"
 
 
@@ -51,10 +52,15 @@ static char *_pic14_keywords[] =
 
 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 }
 };
 
@@ -419,7 +425,7 @@ MUST be terminated with a NULL.
 */
 static const char *_linkCmd[] =
 {
-       "gplink", "$l", "-o \"$2\"", "\"$1\"", "$3", NULL
+       "gplink", "$l", "-w", "-r", "-o \"$2\"", "\"$1\"", "$3", NULL
 };
 
 static const char *_asmCmd[] =
@@ -453,7 +459,7 @@ static void _pic14_do_link (void)
    *
    */
 
-  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");
 
@@ -468,10 +474,10 @@ static void _pic14_do_link (void)
   
   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);
   }
 
@@ -540,6 +546,8 @@ PORT pic_port =
                   16f877)
                 */
        },
+       /* tags for generic pointers */
+       { 0x00, 0x00, 0x00, 0x80 },             /* far, near, xstack, code */
        {
                "XSEG    (XDATA)",
                "STACK   (DATA)",
@@ -557,6 +565,7 @@ PORT pic_port =
                NULL, // xidata
                NULL, // xinit
                "CONST   (CODE)",               // const_name - const data (code or not)
+               "CABS    (ABS,CODE)",   // cabs_name - const absolute data (code or not)
                NULL,
                NULL,
                1        // code is read only