Releases: eliminmax/eambfc
Releases · eliminmax/eambfc
v4.2.0
v4.1.0
Version 4.1.0
- If possible, the system
elf.his used in place of the bundled one - Code column reported in errors now reporded by UTF-8 codepoint,
rather than byte - Arithmetic instructions for x86_64 backend no longer truncate
registers to 32 bits - Removed use of
tccfor testing, as it does not properly handle
bitfields in structs
v4.0.0
Version 4.0.0
New and Changed Features:
- Added
riscv64backend, targeting RV64GC with the lp64d ABI - rework error handling
- The only externally-visible changes are that additional information
is provided, and error IDs are nowPascalCaserather than
SCREAMING_SNAKE_CASE
- The only externally-visible changes are that additional information
- Added (optional) support for GNU-style
--long-opts- this is only compiled in if the
BFC_LONGOPTSmacro is defined to a
truthy value at compile time, which it's not by default.
- this is only compiled in if the
- If not explicitly specified, backend now will match the system's
architecture if possible- This requires
eambfcto be compiled with a compiler that has the same
predefined macros identifying the target system asgcc.
- This requires
- Before compiling the corresponding
]instruction, the space reserved
for the[instruction will start with a trap/illegal instruction,
before using no-op instructions to pad to the needed size, rather than
just using no-ops from the start.
Bugfixes:
- JSON now properly validates UTF-8, replacing bytes that cannot be read
as UTF-8 with Unicode's REPLACEMENT CHARACTER (�). - Fixed bug in encoding of
NOPinstructions in the arm64 backend- Because
NOPinstructions are only used within the placeholder for[
instructions before the offset of the corresponding]is known,
this would be overwritten before the binary was actually output, unless
-kwas passed and there was a missing].
- Because
- Fixed preprocessor directives generating invalid code if any
architectures were disabled - Fixed false negative in check if the s390x
IIHLinstruction can be used - Fixed incorrect encoding of s390x
IIHHinstruction
Internal changes:
- internal API and documentation improved and reworked
- operations common to multiple backends are now in utils.h
- removed resource_mgr
- use GCC compiler attributes for better static analysis and optimization
- attributes are handled in a way that ensures that it will still compile
without issue if using non-GCC compilers - the
noreturnattribute is also supported in non-GCC C11/C17/C23
compilers
- attributes are handled in a way that ensures that it will still compile
- added support for unit testing with CUnit, the LLVM C interface's
disassembler, and libjson-c, and ported a number of Rust unit tests over. - more robust testing in general
- pre-release testing now runs tests concurrently using GNU parallel
- non-portable testing hass been moved from the Makefile into a justfile
- the command-line tests are now run using a POSIX C program which is
cleaner than the combination of Makefile and test.sh, which was limited
by the fairly restricted set of features POSIX requires make to support,
and was too complex to fit within a shell script - Now explicitly documents support for newer versions of C as being
in-scope
v3.3.1
v3.3.0
v3.2.2
This version mostly consists of fixes to issues that were present in both the C and Rust versions of eambfc, which where caught with improvements to testing in the Rust version.
Fixes
- the
arm64backend now properly encodes register-to-registermovinstructions- in the context of
eambfc, what should have beenmov dst, srcwas being encoded as (orr dst, x15, src), which has the same effect so long as thex15register was set to zero, which it always was when testing, both with QEMU and on bare metal. It now encodes tomov dst, src, which is technically an extended mnemonic fororr dst, xzr, src.
- in the context of
- The
x86_64backend now properly uses the full 64 bits of the address register when zeroing out a tape cell - this would only be a problem if the memory address was higher than the 32-bit integer limit, which is unlikely, given thateambfcdoes not produce position-independent code. - Encoding of immediate values larger than the 32-bit integer limit is fixed for the
s390xbackend
The internal structure is now slightly cleaner, to make it easier to address such bugs in the future, should they be found
v3.2.1
v3.0.1
v3.0.0
v2.1.2
Version 2.1.0 mainly enabled an arbitrary number of nested loops, and included a broken re-implementaton of the -t flag added in the Rust rewrite version. 2.1.1 fixed one of the issues with the -t flag, and this version fixes the remaining problem, and adds testing for that flag to the test suite.