Commit Graph

1366 Commits

Author SHA1 Message Date
ISSOtm
44173dbe8b Improve error messages slightly 2019-11-06 08:48:24 +01:00
ISSOtm
7233f568a7 Report overlapping sections whenever possible 2019-11-06 08:40:13 +01:00
Eldred Habert
197f1e9b7b Merge pull request #444 from ISSOtm/fix_develop
Fix errors in `make develop`
2019-11-06 08:34:37 +01:00
Eldred Habert
7063f66b2d Merge pull request #450 from ISSOtm/labels_in_sections
Prevent creating labels outside of sections
2019-11-06 08:33:25 +01:00
Eldred Habert
6e59bcb60e Merge pull request #447 from ISSOtm/long_opts
Add long options
2019-11-06 02:34:26 +01:00
ISSOtm
0649e6d65f Add long options 2019-11-06 00:48:41 +01:00
ISSOtm
072c965ba5 Add musl's implementation of getopt_long_only
Both `getopt_long` and `getopt_long_only` are GNU-specific, so we'll be
copying musl's implementation for portability.
This was retrieved as of commit 90251cf73dfdd44e7a3f085d236e89a7dff1b00b.

musl is licensed as MIT, which is compatible (being identical...) to RGBDS'.
The file is being copied as-is, without a copyright notice or attribution,
but this is only to have a verbatim copy in the history. Those will be added
in the next commit.
2019-11-06 00:40:55 +01:00
ISSOtm
122f5fe12e Prevent creating labels outside of sections
This doesn't make sense, and causes RGBLINK to misbehave
2019-11-04 08:35:00 +01:00
ISSOtm
a40d599cd7 Fix extraneous comma in error message 2019-11-04 01:20:23 +01:00
ISSOtm
babf36e96e Don't forget to initialize additional banks when using an overlay 2019-11-04 01:16:08 +01:00
ISSOtm
d6a43f6a53 Fix RGBGFX man page
- Add color curve option to synopsis
- Fix ordering of `-d`'d description
2019-11-03 21:21:53 +01:00
Eldred Habert
ff8e38fcc6 Merge pull request #441 from ISSOtm/linker_error_stack
Make linker output error stacks instead of their top level
2019-11-03 16:41:09 +01:00
Eldred Habert
192f2de704 Merge pull request #440 from ISSOtm/nested_brackets
Allow nested bracketed symbols
2019-11-03 16:40:34 +01:00
Eldred Habert
c568b3a976 Merge pull request #439 from ISSOtm/tests_locale
Run tests under a specific locale
2019-11-03 16:30:38 +01:00
Eldred Habert
9c818ef3e1 Merge pull request #438 from ISSOtm/sub_doc_fix
Fix documentation for `sub`, `sbc` and `cp`
2019-11-03 16:18:09 +01:00
Eldred Habert
5aea30f40d Merge pull request #434 from ISSOtm/rgblink_rewrite
Rewrite RGBLINK entirely
2019-11-03 16:15:37 +01:00
ISSOtm
09c9395ff8 Fix NULL deref when fetching an unknown symbol in RPN expressions
was being overwritten with the result, so
was meaningless. Using a temporary instead is better.
2019-11-02 22:37:10 +01:00
ISSOtm
81047afb4b Rework "overflow" error message 2019-11-02 22:37:10 +01:00
ISSOtm
f1441cc962 Make linker script error messages more descriptive
Provide file names when appropriate, print memory locations in hex
2019-11-02 22:37:10 +01:00
ISSOtm
50804d661a Fix linkerscript not updating section categorization 2019-11-02 22:37:10 +01:00
ISSOtm
9b895e8a0a Fix bank-fixed sections going in any bank 2019-11-02 22:37:10 +01:00
ISSOtm
4600f70fef Fix address-fixed sections potentially incorrectly assigned
This happened if all space before their fixed location was taken
2019-11-02 22:37:10 +01:00
ISSOtm
9e33cc998f Implement INCLUDE keyword in linker scripts 2019-11-02 22:37:10 +01:00
ISSOtm
5496c2e76f Make linkerscript errors report file names 2019-11-02 22:37:10 +01:00
ISSOtm
bf75971a3a Only open files when necessary 2019-11-02 22:37:10 +01:00
ISSOtm
8a59994c0d Fix false positives in readstr
Reading the byte `EOF & 0xFF` would cause an incorrect termination
2019-11-02 22:37:10 +01:00
ISSOtm
f2e1b7d868 Add EOF checking in string reading
Fixes rednex/#422
2019-11-02 22:37:10 +01:00
ISSOtm
8c91b31ae6 Fix typo that led to segfault 2019-11-02 22:37:10 +01:00
ISSOtm
302b210470 Fix error in object file documentation 2019-11-02 22:37:10 +01:00
ISSOtm
5bd0076233 Write some doc comments 2019-11-02 22:37:10 +01:00
ISSOtm
0e24adcafd Rewrite RGBLINK entirely
The goal was to improve readability, but along the way a few things were
gained.
- Sorted sym and map files
- Infrastructure for supporting multiple .o versions
- Valgrind-proof, as far as my testing goes anyways
- Improved verbosity messages
- Added error checking
- Performance improvements, see end of commit message

The readability improvement was spurred while trying to make sense of the
old code while trying to implement features such as sorted sym and map
files.
I also did my best to remove hardcoded logic, such that modifications
should be doable; for example, "RAM loading" sections, which are linked
against a different location than the one they're stored at.

Some work remains to be done, see the "TODO:" and "FIXME:" comments.
Further, while regression tests pass, this new linker should be tested on
different codebases (ideally while instrumented with `make develop` and
under valgrind).
The few errors spotted in the man pages (alignment) need to be corrected.
Finally, documentation comments need to be written, I have written a lot of
them but not all.

This also provides a significant performance boost (benchmarked with a
51994-symbol project):

Current master RGBLINK:
2.02user 0.03system 0:02.06elapsed 99%CPU (0avgtext+0avgdata 84336maxresident)k
0inputs+11584outputs (0major+20729minor)pagefaults 0swaps

Rewritten RGBLINK:
0.19user 0.06system 0:00.63elapsed 40%CPU (0avgtext+0avgdata 32460maxresident)k
23784inputs+11576outputs (0major+7672minor)pagefaults 0swaps
2019-11-02 22:37:10 +01:00
ISSOtm
696feae32e Have RGBDS' err and warn output an error message
The stdlib functions specify the difference between `err` and `errx`
is that the former prints a message obtained with `strerror`.
However, RGBDS' implementation breaks that contract, and `warn`'s puts the
added semicolon in the wrong place.
2019-11-02 22:37:10 +01:00
ISSOtm
323738e7b8 Increase version number to 0.3.9 v0.3.9 2019-11-01 17:38:43 +01:00
ISSOtm
a1d132cd35 Regenerate wwwman 2019-11-01 17:35:46 +01:00
ISSOtm
f7c2665e14 Fix errors in make develop 2019-10-30 13:34:21 +01:00
ISSOtm
ae0b95ec6d Make linker output error stacks instead of their top level 2019-10-11 17:12:18 +02:00
ISSOtm
cdd8200936 Add test for nested brackets 2019-10-10 15:00:59 +02:00
ISSOtm
694075e840 Allow nested bracketed symbols
Fixes #320
2019-10-10 14:58:17 +02:00
ISSOtm
d76f994318 Run tests under a specific locale
Fixes #427
2019-10-10 13:23:36 +02:00
ISSOtm
11b7052f94 Fix flag documentation for sub, sbc and cp 2019-10-10 01:01:21 +02:00
Eldred Habert
e93d65d736 Merge pull request #425 from ISSOtm/eexpansion_error
Add info about string expansions in error reports
2019-10-03 10:20:49 +02:00
ISSOtm
0f4d543aeb Have make clean delete all .o files in source directory
This will work better if files are rearranged in the future.
This appears to be POSIX-compliant, so why wasn't it used earlier?
2019-09-25 03:17:36 +02:00
ISSOtm
dab5f59ed9 Fix location of all relevant SECTIONs in tests
If section placement is changed such that those are no longer guaranteed to be
placed at zero, tests would break when they shouldn't.
2019-09-23 01:28:48 +02:00
Eldred Habert
22a6a82642 Merge pull request #419 from dbrotz/fix-blackslash-tab-at-eof
Handle tabs after backslash at end of file
2019-09-23 00:05:21 +02:00
Eldred Habert
7b592eff8a Merge pull request #420 from dbrotz/disallow-null-char
Reject input that contains null characters
2019-09-22 02:43:06 +02:00
Eldred Habert
4be81d9ffd Merge pull request #416 from ISSOtm/makefile
Improve Makefile
2019-09-22 01:55:51 +02:00
ISSOtm
55fbecee49 Add info about string expansions in error reports
This is especially useful when an EQUS expands to another one, to help
track them.
This is done separately from the file stack as the EQUS stack is separate
(which is itself because EQUS are managed *way* differently).
2019-09-12 10:02:24 +02:00
dbrotz
f36a3d5b2a Fix macro and rept buffer overflows
Macro and rept buffers were not always being terminated with newlines
and/or were vulnerable to the final newline being escaped, allowing
buffer overflows to occur. Now, they are terminated with newlines using
the same mechanism as the file buffer.
2019-09-10 03:03:04 -07:00
dbrotz
c5e8e4ff83 Reject input that contains null characters
Null characters in the middle of strings interact badly with the RGBDS
codebase, which assumes null-terminated strings. There is no reason to
support null characters in input source code, so the simplest way to deal
with null characters is to reject them early.
2019-09-09 17:27:56 -07:00
Eldred Habert
ccc666c1e4 Merge pull request #417 from ISSOtm/zero_sections
Allow 0-byte SECTIONs to be fixed anywhere
2019-09-09 23:32:30 +02:00