]> git.sur5r.net Git - cc65/commitdiff
Allow to define symbols in the linker config
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 10 Mar 2001 14:10:38 +0000 (14:10 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 10 Mar 2001 14:10:38 +0000 (14:10 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@620 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ld65/config.c
src/ld65/scanner.h
src/ld65/segments.c

index 902db00a8f05f5b6ac585e7f6a4dfdc6aaba58ff..f0673ff02ce67dbb738970a8a2beee8b32f41c65 100644 (file)
@@ -619,20 +619,20 @@ static void ParseSegments (void)
 {
     static const IdentTok Attributes [] = {
                {   "LOAD",     CFGTOK_LOAD     },
-       {   "RUN",      CFGTOK_RUN      },
+       {   "RUN",      CFGTOK_RUN      },
         {   "TYPE",     CFGTOK_TYPE     },
         {   "ALIGN",    CFGTOK_ALIGN    },
         {   "DEFINE",   CFGTOK_DEFINE   },
-       {   "OFFSET",   CFGTOK_OFFSET   },
-       {   "START",    CFGTOK_START    },
+       {   "OFFSET",   CFGTOK_OFFSET   },
+       {   "START",    CFGTOK_START    },
     };
     static const IdentTok Types [] = {
-               {   "RO",       CFGTOK_RO       },
-               {   "RW",       CFGTOK_RW       },
-               {   "BSS",      CFGTOK_BSS      },
-       {   "ZP",       CFGTOK_ZP       },
-       {   "WP",       CFGTOK_WPROT    },
-       {   "WPROT",    CFGTOK_WPROT    },
+               {   "RO",       CFGTOK_RO       },
+               {   "RW",       CFGTOK_RW       },
+               {   "BSS",      CFGTOK_BSS      },
+       {   "ZP",       CFGTOK_ZP       },
+       {   "WP",       CFGTOK_WPROT    },
+       {   "WPROT",    CFGTOK_WPROT    },
     };
 
     unsigned Count;
@@ -1138,6 +1138,36 @@ static void ParseFeatures (void)
 
 
 
+static void ParseSymbols (void)
+/* Parse a symbols section */
+{
+    while (CfgTok == CFGTOK_IDENT) {
+
+       long Val;
+
+       /* Remember the name */
+       char Name [sizeof (CfgSVal)];
+       strcpy (Name, CfgSVal);
+       CfgNextTok ();
+
+       /* Allow an optional assignment */
+       CfgOptionalAssign ();
+
+       /* Make sure the next token is an integer, read and skip it */
+       CfgAssureInt ();
+       Val = CfgIVal;
+       CfgNextTok ();
+
+       /* Generate an export with the given value */
+       CreateConstExport (Name, Val);
+
+       /* Skip the semicolon */
+       CfgConsumeSemi ();
+    }
+}
+
+
+
 static void ParseConfig (void)
 /* Parse the config file */
 {
@@ -1147,6 +1177,7 @@ static void ParseConfig (void)
         {   "SEGMENTS", CFGTOK_SEGMENTS },
        {   "FORMATS",  CFGTOK_FORMATS  },
        {   "FEATURES", CFGTOK_FEATURES },
+       {   "SYMBOLS",  CFGTOK_SYMBOLS  },
     };
     cfgtok_t BlockTok;
 
@@ -1183,6 +1214,10 @@ static void ParseConfig (void)
                ParseFeatures ();
                break;
 
+           case CFGTOK_SYMBOLS:
+               ParseSymbols ();
+               break;
+
            default:
                FAIL ("Unexpected block token");
 
index 399efa4147194e704fd4dadf0347fccb76d5c883..e5eb5c7221ce88a4aec90674a4c35c7573bffad4 100644 (file)
@@ -65,6 +65,7 @@ typedef enum {
     CFGTOK_SEGMENTS,
     CFGTOK_FORMATS,
     CFGTOK_FEATURES,
+    CFGTOK_SYMBOLS,
 
     CFGTOK_START,
     CFGTOK_SIZE,
index 3e49facb755f05643b3d0725be8e9badf8347c17..684521dcdb467ed6fee402fdd605b3273bc8e45f 100644 (file)
@@ -230,7 +230,7 @@ Section* ReadSection (FILE* F, ObjData* O)
     Type = Read8 (F);
 
     /* Print some data */
-    Print (stdout, 1, "Module `%s': Found segment `%s', size = %lu, align = %u, type = %u\n",
+    Print (stdout, 2, "Module `%s': Found segment `%s', size = %lu, align = %u, type = %u\n",
           GetObjFileName (O), Name, Size, Align, Type);
 
     /* Get the segment for this section */