Commit Graph

249 Commits

Author SHA1 Message Date
Christophe Staïesse 25efb00769 fix a bug in the lexer involving double quote escaping and semicolons
The bug showed up when a semicolon was located anywhere after \".

These three test cases are syntaxically correct but didn't compile:

1)
SECTION "HOME", HOME
	db "\";"

2)
SECTION "HOME", HOME
	db "\""
	nop
	;

3)
SECTION "HOME", HOME
	db "\"" ;

The problem was located in yy_create_buffer(). Basicaly, this function loads an
entire source file, uniformizes EOL terminators and filters out comments without
touching literal strings.

However, bounds of literal strings were wrongly guessed because \" was
interpreted as two characters (and so the double quote was not escaped).

In test 1, the string terminates early and so ;" is filtered out as it was a
comment and so the assembler complains of an unterminated string.
In test 2 and 3, the string is in fact interpreted as two strings, the second
one terminates at EOF in these cases and so comments are not filtered out and
that makes the assembler complains.

A special case must be taken into account:

4)
SECTION "HOME", HOME
	db "\\" ;

So we need to ignore \\ as well.

Note that there is still a problem left: in yy_create_buffer() a string may
span multiple lines but not in the lexer. However in this case I think the lexer
would quit at the first newline so there should be nothing to worry about.
2014-10-10 16:50:11 +02:00
Anthony J. Bentley c6c7b99fad PATH_MAX is not exactly portable. Hack around it for now. v0.1.2 2014-10-10 03:48:52 -06:00
Anthony J. Bentley e28d8384fb Merge branch 'fix-makefile' of https://github.com/chastai/rgbds 2014-10-06 02:01:21 -06:00
Anthony J. Bentley 27a350eaab Merge branch 'fix-uniquearg-segfault' of https://github.com/chastai/rgbds 2014-10-06 01:55:19 -06:00
Anthony J. Bentley cd8d895c1b Style. 2014-10-06 01:54:03 -06:00
Christophe Staïesse 4577a01c68 Fix out of bounds array access on invalid macro arg references
A reference to an invalid macro argument (\ not followed by a digit
between 1 and 9) will cause an access outside of the bounds of the
currentmacroargs array in sym_FindMacroArg().

Macro arg references are processed in two places:

In CopyMacroArg(): called when scanning tokens between "", {} and
arguments of a macro call. The only problem here is that it accepts \0
as valid and so calls sym_FindMacroArg with a invalid value.

In PutMacroArg(): called by the lexer automata when it encounters a
token matching \\[0-9]? (in other cases than above). So not only it
accepts \0 but also \ alone.
  Memo: In setuplex(), a rule is defined with a regex composed of up to
    three ranges of chars and takes the form:
      [FirstRange]
      or [FirstRange][SecondRange]?
      or [FirstRange]([SecondRange][Range]*)?
    On scanning, when several rules match, the first longuest one is
    choosen.

Regression test:
1)
SECTION "HOME", HOME
	db "\0"

2)
SECTION "HOME", HOME
	db \A

3)
SECTION "HOME", HOME
	db \
2014-10-05 18:15:37 +02:00
Christophe Staïesse 6758387668 Add assertion to symFindMacroArg() to debug oob array access 2014-10-05 18:13:07 +02:00
Christophe Staïesse 424702b272 Fix bug: rgbasm segfault when \@ is used outside a macro
The problem occurs when \@ is accessed outside the definition of a
macro and is not between "" or {}, or when it is used in an argument of
a macro call, i.e. when the access is processed by PutUniqueArg().

PutUniqueArg(), puts back the string value of \@ to the lexer's buffer
(to substitute \@ by the unique label string).
When \@ is not defined, sym_FindMacroArg(-1) returns NULL, which
yyunputstr() doesn't expect and crashes.

Solution:
Generate an error when \@ is not defined.

Regression test:

SECTION "HOME", HOME
        ld a,\@

Will segfault.
On the fixed version, it will return an error as \@ is not available.
2014-10-05 13:32:18 +02:00
Christophe Staïesse 191f98a008 Fix incorrect dependencies in Makefile 2014-10-05 11:37:11 +02:00
Anthony J. Bentley 00de7674af Now that install dirs are created, this error is unlikely to occur. v0.1.1 2014-10-03 15:17:49 -06:00
Anthony J. Bentley 32fa032a62 Makefile: Create install directories if they don’t exist. 2014-10-03 15:14:40 -06:00
Anthony J. Bentley 73e44cb803 Fix dependencies for Yacc files. Improve Makefile POSIX compliance.
Parallel building issue pointed out by murphm8 and chastai.
2014-09-26 15:27:52 -06:00
Anthony J. Bentley 3e4350afa4 Don't cast calls to malloc(). 2014-09-26 00:39:29 -06:00
Anthony J. Bentley 0d07caba60 Remove inconsistent version numbering. 2014-09-25 20:56:15 -06:00
Anthony J. Bentley 3992ce2502 Separate errors that shouldn't have been combined in the first place. 2014-09-25 20:40:25 -06:00
Anthony J. Bentley 215d6f0c5b Revert 97d431d1f4ad404e282e3781bd195be3f053734d; it breaks things. 2014-09-24 03:40:50 -06:00
Anthony J. Bentley f3394f46b4 Fix MinGW target. 2014-09-24 03:17:33 -06:00
Anthony J. Bentley e3df758897 Update license. 2014-09-24 03:07:43 -06:00
Anthony J. Bentley d7319ecd00 Remove rgblib.
I have never used it and it's probably been broken for years.
2014-09-24 03:03:42 -06:00
Anthony J. Bentley d661b3a532 Now that we replace missing libc functions, switch back to err(). 2014-09-24 02:50:39 -06:00
Anthony J. Bentley c0be5ddbb2 Remove dead stores. 2014-09-24 01:19:05 -06:00
Anthony J. Bentley 97d431d1f4 rgbasm: Avoid unnecessary filename copying. 2014-09-24 00:52:00 -06:00
Anthony J. Bentley a849e1107e Improve POSIX compliance in the Makefile.
Set .POSIX and don't use the += operator.
2014-09-24 00:38:19 -06:00
Anthony J. Bentley a41bdff88f Wrap Makefile to 80 characters. 2014-09-24 00:28:14 -06:00
Anthony J. Bentley cb383e6b1a Unclutter Makefile: use $Q instead of ${Q}. 2014-09-24 00:26:46 -06:00
Anthony J. Bentley 45b6872e2a rgbasm: Fix TOCTOU and reduce buffering. 2014-09-24 00:23:40 -06:00
Anthony J. Bentley 056109652d rgbasm: Don't allocate an unnecessary buffer. 2014-09-23 22:22:39 -06:00
Anthony J. Bentley 284600ef1f rgblink: Don't allocate unnecessary buffer. Delete unused flag. 2014-09-23 22:17:43 -06:00
YamaArashi 2bf31870a7 Cleaned up lexer
- separated the lexer into multiple functions so it is more readable
- fixed issue with long label names in macro arguments
- added error checking code to prevent buffer overflows
v0.1.0
2014-08-22 21:44:18 -07:00
YamaArashi 6198cc185c Remove __LINE__ 2014-08-22 01:52:21 -07:00
YamaArashi e4571bc0fc Make _NARG work 2014-08-21 19:53:42 -07:00
Anthony J. Bentley 46269240c8 Merge branch 'update-legacy-instructions' of https://github.com/yenatch/rgbds 2014-08-21 11:29:34 -06:00
YamaArashi b1269ab53a Improve rgbasm performance 2014-08-21 02:57:43 -07:00
Anthony J. Bentley 3ecd169cd6 Revert previous commit. asmy.y is autogenerated from other .y files. 2014-02-21 03:20:44 -07:00
Anthony J. Bentley 2dab1474b8 asmy.y should not be in gitignore. 2014-02-21 00:56:34 -07:00
Anthony J. Bentley 08b1b97a45 Preserve the ability to set pad_value in rgbfix. 2014-02-09 02:58:00 -07:00
Anthony J. Bentley 17192ea6f0 Improve performance when padding: don't write a byte at a time. 2014-02-08 23:26:43 -07:00
Anthony J. Bentley 0f488b6759 Remove unused alloca() implementation. 2014-01-31 00:01:42 -07:00
yenatch 2ff286223b add instruction "ld hl, sp+nn"
The previous "ld hl, [sp+nn]" is incorrect, but remains for compatibility.
2014-01-14 11:51:18 -05:00
Anthony J. Bentley af5f889326 Merge https://github.com/yenatch/rgbds 2014-01-12 21:30:39 -07:00
Anthony J. Bentley 3e92f33319 Provide a friendlier error when manpage directories don’t exist. 2014-01-11 18:46:33 -07:00
yenatch 0ffa4ce9ef rgbasm: let rgblink try to import undefined symbols
Manual imports are inconvenient and don't provide any functionality.
2014-01-07 18:14:58 -05:00
yenatch fd4b5c8925 rgbasm: update manpage to include -v 2013-12-03 21:58:39 -05:00
yenatch bc99ee2210 rgbasm: -v option (verbose) 2013-12-03 00:25:12 -05:00
Anthony J. Bentley de269987f7 Add "jp hl" as a valid instruction.
"jp [hl]" has been around for decades even though it makes no sense.
This is better.
2013-09-05 20:51:58 -06:00
Anthony J. Bentley 7770827cce Redefine consistent names for section types, and document the changes. 2013-07-31 22:14:31 -06:00
Anthony J. Bentley 7ab9742299 Implement SRAM sections. 2013-07-31 20:15:40 -06:00
Anthony J. Bentley 6aecf65552 Fix incorrect manpage macro. 2013-07-23 19:04:02 -06:00
Anthony J. Bentley 2571dc459c Delete more files on clean. 2013-06-20 04:56:55 -06:00
Anthony J. Bentley da19380cc4 Add a new WRAMX section type, for banked (CGB) WRAM sections. 2013-06-19 21:19:51 -06:00