* as/link/mcs51/lkarea.c (lnkarea2): handle absolute areas, restructured
[fw/sdcc] / src / pic / main.c
index 263d5f81eda1f734b503b5732c9013273c2b2ed9..40a130b351bffe7386a6723d433737e9d67d0922 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 }
 };
 
@@ -93,60 +99,6 @@ _pic14_regparm (sym_link * l, bool reentrant)
        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
@@ -559,6 +511,9 @@ 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)
+               "XABS    (ABS,XDATA)",  // xabs_name - absolute xdata
+               "IABS    (ABS,DATA)",   // iabs_name - absolute data
                NULL,
                NULL,
                1        // code is read only
@@ -601,7 +556,7 @@ PORT pic_port =
        NULL,                           /* genInitStartup */
        _pic14_reset_regparm,
        _pic14_regparm,
-       _process_pragma,                                /* process a pragma */
+       NULL,                           /* process a pragma */
        NULL,
        _hasNativeMulFor,
        hasExtBitOp,                    /* hasExtBitOp */