Commit Graph
100 Commits
Author SHA1 Message Date
Eldred Habert 36ca18bc7b Merge pull request #466 from AntonioND/an/warning
Fix declaration of constexpr_BankSymbol()
2020-01-09 00:46:47 +01:00
Eldred Habert 676800476d Merge pull request #430 from ISSOtm/known_selfbank
Make `BANK(@)` and `BANK("section")` known to RGBASM
2020-01-08 18:56:28 +01:00
Eldred Habert 4dfa3157e5 Merge pull request #454 from ISSOtm/unlocked_windows
Fix mingw build
2020-01-08 13:14:13 +01:00
Eldred Habert f26cfa2d94 Merge pull request #455 from ISSOtm/man
Overhaul RGBDS man pages and help messages
2020-01-07 22:44:58 +01:00
ISSOtm d3328406a2 Improve jr out-of-reach error message 2020-01-02 14:06:40 +01:00
ISSOtm 3564b3f9ea Have jr offset wrap with 16 bits
Overflow with `int16_t` is defined to two's complement so it's OK
This could trigger when jumping from the top of ROM0 to HRAM
2020-01-02 14:03:54 +01:00
ISSOtm b81faeccfa Rename rgbfix long opt verbose to validate
The previous name was probably copy-pasted, it was completely wrong
2019-12-29 17:41:19 +01:00
ISSOtm 1c4cb2cd2d Add warning option to RGBASM man synopsis 2019-12-29 17:38:46 +01:00
ISSOtm 6959b76749 Rework help/usage messages
Trimmed down the option lists as per @bentley's request;
Reinstated the man pages' synopsis
2019-12-29 17:38:08 +01:00
ISSOtm 8a1e920e23 Fix incorrect line counting when running REPT blocks.
Fixes #461
2019-12-12 23:46:16 +01:00
ISSOtm 606519c515 Touch up ds documentation as per rednex#350 2019-12-12 23:22:51 +01:00
ISSOtm 34618e0294 Overhaul RGBDS man pages and help messages 2019-12-12 23:22:51 +01:00
ISSOtm 373762dedc Fix lack of newline when passing no files to RGBLINK 2019-12-10 18:35:40 +01:00
ISSOtm b30dfb166b Fix a line over 80 chars 2019-12-08 00:08:44 +01:00
ISSOtm 36db3257f3 Align fatalerror return code with every other one 2019-12-08 00:07:48 +01:00
ISSOtm cad23465a5 Remove flex from the list of dependencies in the README 2019-12-08 00:04:15 +01:00
ISSOtm d23401316e Improve pc-bank test 2019-12-07 23:44:00 +01:00
ISSOtm b49e025703 Allow BANK() in constexpr expressions 2019-12-07 23:43:02 +01:00
ISSOtm e4f4706508 Add tests for new "known self-bank" 2019-12-07 22:15:07 +01:00
ISSOtm 02fe73d1f3 Make BANK("Section") known at assembling time when possible
If the target section is in the current file and its bank is known,
this means this value is known prior to linking.
2019-12-07 22:15:07 +01:00
ISSOtm 74f43d4e09 Add a way to seek a SECTION by name without creating one 2019-12-07 22:15:07 +01:00
ISSOtm 54ed050ecf Make BANK(@) known at assembling time when possible
If the current section's bank is fixed, this means this value is
known prior to linking.
2019-12-07 22:12:57 +01:00
ISSOtm f262d3b34b Fix undefined behavior in readlong
See the new comment for what caused the UB, and how it was fixed
2019-12-07 21:19:13 +01:00
ISSOtm 32f7860a4e Fix possible 0-length array in RGBLINK 2019-12-07 15:23:52 +01:00
ISSOtm b62832e94d Move empty entries warning to -Wextra
Since the behavior actually kinda makes sense, it's better as extra.
2019-12-07 02:48:06 +01:00
ISSOtm e5820312d4 Document actual behavior of empty entries in db and co 2019-12-07 02:46:59 +01:00
ISSOtm f710f21ad8 Reorder warnings alphabetically 2019-12-06 12:06:21 +01:00
ISSOtm 90fefb468b Remove user warnings from -Wall
It does not make sense to include it there, as it's enabled by default.
2019-12-06 12:06:21 +01:00
ISSOtm 21f4cafef5 Make -Werror= with a meta warning an error
The previous behavior was to just enable the meta warning's warnings.
This is an error now because it doesn't make sense to do that, does it?
2019-12-06 12:06:21 +01:00
ISSOtm b1d4be66e4 Remove deprecated "section charmap" feature 2019-12-04 01:56:06 +01:00
ISSOtm ef43ae0eea Add a verbose print each time a file is included 2019-12-04 01:55:01 +01:00
ISSOtm 9976a139de Update test repos to latest commits
They work, and after an upcoming change the current ones are not
going to anymore!
2019-12-04 01:54:22 +01:00
ISSOtm 5718354500 Get rid of joinexpr()
This macro hid away the arguments to the underlying call, and served
no purpose beyond saving the programmer some typing. This is 2019,
people have IDEs (even Vim!) with autocompletion.
2019-12-04 00:21:57 +01:00
ISSOtm 2d7d9eef9f Fix some make checkcodebase errors
- Reorder checkpatch ignore flags alphabetically
- Fix checkpatch WARNINGs and CHECKs when they make sense
- Add more checkpatch ignores
2019-12-04 00:16:28 +01:00
ISSOtm a290e19f46 Make make checkcodebase ignore extern/
That folder contains external code, and modifying it to conform to our
code style would make applying upstream patches, amongst others,
problematic. Therefore, skip checking it.
Ideally, the folder should also be excluded from `make checkpatch`,
but I haven't figured out a way to do that yet.
2019-12-03 23:09:07 +01:00
ISSOtm 92a2be62fe Remove lex rules from Makefile
Since the RGBLINK rewrite, there have been no .l files in the whole codebase
(RGBASM has the C file directly, for better and for worse)
Since flex isn't used anymore, it's a good idea to remove it from the Makefile
so people don't think it's a dependency.
2019-12-03 23:02:38 +01:00
ISSOtm 5410dba4f4 Do prevent using org in linker scripts to go backwards 2019-11-27 01:37:00 +01:00
ISSOtm d93ad2e650 Rename all functions imported from musl
This is to avoid conflicting with libraries, which occurred in the mingw builds
2019-11-23 23:08:44 +01:00
ISSOtm 68410d35d3 Get rid of unlocked_stdio functions
Those did not provide a significant speedup, and are not provided by mingw
2019-11-23 23:00:44 +01:00
ISSOtm ceae4a44f3 Stop using f(un)?lockfile
Those are only useful for locking file IO across threads, but RGBLINK is
single-threaded anyways, so they don't matter. Plus, they aren't provided by
mingw, so that'll remove part of the problem
2019-11-23 22:21:11 +01:00
ISSOtm ea003487aa Use trap_ instead of abort() for consistency 2019-11-23 21:59:36 +01:00
Eldred Habert 401fd8b56b Merge pull request #452 from ISSOtm/warn
Add support for toggleable warnings
2019-11-18 20:58:21 +01:00
ISSOtm 191ee4ba1f Add support for toggleable warnings 2019-11-18 20:45:21 +01:00
ISSOtm 58556f91f7 Disable chcecking for global initialisers
This is specific to the kernel and does not apply to us
2019-11-18 12:45:38 +01:00
ISSOtm faa7893761 Fix develop error in getopt_long_only
The error was due to casting `const` away for permuting argv
elements, which is necessary for a libc for compatibility with older
systems, but not for us.

Checkpatch will complain about the style not being followed, but this is not
our code, so it can be ignored.
2019-11-09 00:48:00 +01:00
Eldred Habert 648df0dc7d Merge pull request #449 from ISSOtm/better_error_msg
Report overlapping sections whenever possible
2019-11-06 09:00:11 +01:00
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 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
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
Eldred Habert 17b9838c8f Merge pull request #418 from dbrotz/fix-symbol-macro-arg-0
Print useful error message when '\0' is used in a symbol name
2019-09-09 19:37:44 +02:00
ISSOtm 38a372f25f Allow 0-byte SECTIONs to be fixed anywhere
They do not take any room, so they can only be used to define symbols at
a given location. I ran into trouble with such a SECTION failing to be
placed where specified, which doesn't make sense.
This way, it also makes sense to have such a SECTION in the middle of
another one, but that should be fine, since there's no actual overlap.
2019-09-09 00:00:36 +02:00
ISSOtm 2e6f5ac679 Fix unary NOT being broken
nVal wasn't being set, this made the operator a no-op on constant expressions
2019-09-08 21:42:17 +02:00
ISSOtm 7a45fc68d9 Fix incorrect evaluation of && and ||
f29d768 forgot to switch these two `expr->nVal` to `src1->nVal`
This won't break anything, since this wasn't published yet.
I checked, and didn't see any other missed changes.

Reported by pret, I confirmed that `1 && 1` evaluated to 0.
2019-09-08 21:12:31 +02:00
ISSOtm 1288737c0d Clean up suffix rules
Generate .c files from .l files instead of directly a .o
Improve yacc and lex header generation dependency
2019-09-07 13:19:32 +00:00
ISSOtm 5902306271 Have make clean delete all generated .o files
Especially important if the file structure changes, to avoid
leaving stale object files in non-fresh repos.
2019-09-07 12:53:30 +00:00