* as/mcs51/lkarea.c (lnkarea, lnkarea2): improved BSEG size calculation,
[fw/sdcc] / src / SDCC.lex
index c7bb9181c0d6ff9a0a45fe88a0dd6ff30d4c013f..d1214ac0826cac4331a8e707b9c204e30396c6f1 100644 (file)
@@ -469,7 +469,9 @@ enum pragma_id {
      P_STD_C89,
      P_STD_C99,
      P_STD_SDCC89,
-     P_STD_SDCC99
+     P_STD_SDCC99,
+     P_CODESEG,
+     P_CONSTSEG
 };
 
 
@@ -685,6 +687,28 @@ static void doPragma(int op, char *cp)
     options.std_c99 = 1;
     options.std_sdcc = 1;
     break;
+
+  case P_CODESEG:
+    {
+      char str[9];
+      char *segname = Safe_malloc(15);
+      sscanf(cp, " %8s", str);
+      str[8] = '\0';
+      sprintf(segname, "%-8.8s(CODE)", str);
+      options.code_seg = segname;
+    }
+    break;
+
+  case P_CONSTSEG:
+    {
+      char str[9];
+      char *segname = Safe_malloc(15);
+      sscanf(cp, " %8s", str);
+      str[8] = '\0';
+      sprintf(segname, "%-8.8s(CODE)", str);
+      options.const_seg = segname;
+    }
+    break;
   }
 }
 
@@ -719,10 +743,12 @@ static int process_pragma(char *s)
     { "opt_code_speed", P_OPTCODESPEED, 0 },
     { "opt_code_size",  P_OPTCODESIZE,  0 },
     { "opt_code_balanced",  P_OPTCODEBALANCED,  0 },
-    { "std_c89",       P_STD_C89, 0 },
-    { "std_c99",       P_STD_C99, 0 },
-    { "std_sdcc89",    P_STD_SDCC89, 0 },
-    { "std_sdcc99",    P_STD_SDCC99, 0 },
+    { "std_c89",        P_STD_C89,      0 },
+    { "std_c99",        P_STD_C99,      0 },
+    { "std_sdcc89",     P_STD_SDCC89,   0 },
+    { "std_sdcc99",     P_STD_SDCC99,   0 },
+    { "codeseg",        P_CODESEG,      0 },
+    { "constseg",       P_CONSTSEG,     0 },
 
     /*
      * The following lines are deprecated pragmas,