]> Shamusworld >> Repos - rmac/blobdiff - token.c
Fix for section alignment values in ELF objects.
[rmac] / token.c
diff --git a/token.c b/token.c
index 1722f63ee5bf8c4d8785fb7d551fda4528796f53..6246a7418f0b98e1e9848c1a2a2289b868926d68 100644 (file)
--- a/token.c
+++ b/token.c
@@ -949,7 +949,7 @@ int TokenizeLine(void)
        int state = 0;                          // State for keyword detector
        int j = 0;                                      // Var for keyword detector
        uint8_t c;                                      // Random char
-       VALUE v;                                        // Random value
+       uint32_t v;                                     // Random value
        uint8_t * nullspot = NULL;      // Spot to clobber for SYMBOL termination
        int stuffnull;                          // 1:terminate SYMBOL '\0' at *nullspot
        uint8_t c1;
@@ -1133,7 +1133,7 @@ DEBUG { printf("TokenizeLine: Calling fpop() from SRC_IFILE...\n"); }
                                if (((chrtab[*ln] & DOT) == 0) || (dotxtab[*ln] == 0))
                                        return error("[bwsl] must follow '.' in symbol");
 
-                               v = (VALUE)dotxtab[*ln++];
+                               v = (uint32_t)dotxtab[*ln++];
 
                                if (chrtab[*ln] & CTSYM)
                                        return error("misuse of '.'; not allowed in symbols");
@@ -1292,6 +1292,11 @@ dostring:
                                                case '\\':
                                                        c = '\\';
                                                        break;
+                                               case '!':
+                                                       // If we're evaluating a macro
+                                                       // this is valid and expands to
+                                                       // "dot-size"
+                                                       break;
                                                default:
                                                        warn("bad backslash code in string");
                                                        ln--;
@@ -1557,20 +1562,32 @@ dostring:
                                {
                                        v &= 0x000000FF;
                                        ln += 2;
+                                       *tk++ = CONST;
+                                       *tk++ = v;
+                                       *tk++ = DOTB;
                                }
                                else if ((*(ln + 1) == 'w') || (*(ln + 1) == 'W'))
                                {
                                        v &= 0x0000FFFF;
                                        ln += 2;
+                                       *tk++ = CONST;
+                                       *tk++ = v;
+                                       *tk++ = DOTW;
                                }
                                else if ((*(ln + 1) == 'l') || (*(ln + 1) == 'L'))
                                {
                                        ln += 2;
+                                       *tk++ = CONST;
+                                       *tk++ = v;
+                                       *tk++ = DOTL;
                                }
                        }
+                       else
+                       {
+                               *tk++ = CONST;
+                               *tk++ = v;
+                       }
 
-                       *tk++ = CONST;
-                       *tk++ = v;
 //printf("CONST: %i\n", v);
                        continue;
                }