Skip to content

Releases: eliminmax/eambfc

v4.2.0

22 Apr 20:19

Choose a tag to compare

Version 4.2.0

  • No longer uses the previously-bundled, modified glibc elf.h
  • Fixed bug in tests that called execl due to weirdness around different
    legal definitions of NULL
  • cleaned up internal interfaces

v4.1.0

04 Apr 01:37

Choose a tag to compare

Version 4.1.0

  • If possible, the system elf.h is 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 tcc for testing, as it does not properly handle
    bitfields in structs

v4.0.0

30 Mar 17:08

Choose a tag to compare

Version 4.0.0

New and Changed Features:

  • Added riscv64 backend, targeting RV64GC with the lp64d ABI
  • rework error handling
    • The only externally-visible changes are that additional information
      is provided, and error IDs are now PascalCase rather than
      SCREAMING_SNAKE_CASE
  • Added (optional) support for GNU-style --long-opts
    • this is only compiled in if the BFC_LONGOPTS macro is defined to a
      truthy value at compile time, which it's not by default.
  • If not explicitly specified, backend now will match the system's
    architecture if possible
    • This requires eambfc to be compiled with a compiler that has the same
      predefined macros identifying the target system as gcc.
  • 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 NOP instructions in the arm64 backend
    • Because NOP instructions 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
      -k was passed and there was a missing ].
  • Fixed preprocessor directives generating invalid code if any
    architectures were disabled
  • Fixed false negative in check if the s390x IIHL instruction can be used
  • Fixed incorrect encoding of s390x IIHH instruction

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 noreturn attribute is also supported in non-GCC C11/C17/C23
      compilers
  • 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

14 Feb 00:03

Choose a tag to compare

Fix bug in version.h generation in release.sh

If release.sh is interrupted, it leaves version.h with the source tarball from text, resulting in "source tarball from source tarball
from git commit: 2168f36" for the official 3.3.0 source tarball

v3.3.0

13 Feb 22:32

Choose a tag to compare

Version 3.3.0

This version brings improvements to internal tooling, and a new -s flag to specify the output extension.

v3.2.2

06 Feb 18:46

Choose a tag to compare

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 arm64 backend now properly encodes register-to-register mov instructions
    • in the context of eambfc, what should have been mov dst, src was being encoded as (orr dst, x15, src), which has the same effect so long as the x15 register was set to zero, which it always was when testing, both with QEMU and on bare metal. It now encodes to mov dst, src, which is technically an extended mnemonic for orr dst, xzr, src.
  • The x86_64 backend 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 that eambfc does not produce position-independent code.
  • Encoding of immediate values larger than the 32-bit integer limit is fixed for the s390x backend

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

18 Jan 02:53

Choose a tag to compare

Version 3.2.1

v3.0.1

28 Oct 20:43

Choose a tag to compare

This release fixes a minor issue in release.sh.

Debian's checkbashisms tool wrongly detected release.sh as being a shell wrapper, and did not properly scan the whole file in the pre-release static analysis phase. Now it does.

v3.0.0

28 Oct 20:40

Choose a tag to compare

This version brings major internal refactors, and support for multiple backends. The x86_64 backend is always compiled in, and the arm64 backend is compiled in by default. No other backends exist yet.

v2.1.2

21 Jul 14:15

Choose a tag to compare

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.