Changelog
This file lists bigger/noteworthy changes, only...
Version 1.4 (2022/12/06)
dyncall:- new, portable aggregate-by-value argument interface
- aggregate-by-value (struct, union) support for x64 (win and sysv; thanks Raphael Luba!)
- new aggregate description interface DCaggr replacing stale DCstruct (latter had shortcomings, was mostly unused as it lacked stable implementations, didn't handle unions, ...)
- new calling convention modes for thiscalls (platform agnostic DC_CALL_C_DEFAULT_THIS, as well as DC_CALL_C_X64_{WIN64,SYSV}_THIS (needed to handle C++ ABI rules for returning aggregates by value)
- new signature character for platform agnostic thiscalls ('*' / DC_SIGCHAR_CC_THISCALL)
- dcCallF(), dcVCallF(), dcArgF() and dcVArgF() don't implicitly call dcReset() anymore, which was unflexible (breaking change)
- added macros to feature test implementation for aggregate-by-value and syscall support
- windows/x64/masm directives added to specify how stack unwinds (help for debuggers, exception handling, etc.; thanks Raphael Luba!)
- fixed detection of native thiscall callconv for builds not using MSVC but using (or adhering to) the MSVC runtime (e.g. ReactOS' MinGW based RosBE)
- BSD syscall segfault fix
- new, portable aggregate-by-value callback argument interface
- aggregate-by-value (struct, union) support for x64 (win and sysv; thanks Raphael Luba!)
- x64/windows masm directives for frame unwinding information (as dbg help; thanks Raphael Luba!)
- sparc64 callback crash fix
- build fix for ReactOS with RosBE/cmake/mingw-make environment
- more robust detection of platform endianness (on some platforms inclusion of endian.h led to wrong assumptions)
- call_suite: simplified and extended to test also unsigned types, and _Bool
- callback_suite: refactored to be much more like call_suite test
- call_suite_aggrs: new test suite for calls with aggregate arguments and return types (structs, unions and arrays as aggregate members)
- callback_suite_aggrs: new test suite, like call_suite_aggrs but for callbacks
- plain: added some aggregate-as-vararg-by-value tests
- plain_c++: added non-trivial C++ aggregate tests
- callback_plain_c++: new test, focusing on methods and non-trivial C++ aggregates
- simplifications and major refactoring to share more code (especially signature and case generator) across test suites
- dynload_plain: simplified build and robustness fixes on some platforms
- ./configure output for sun make builds: set correct C++ compiler flag var
- ./configure for SunOS now uses isainfo(1) to deduce native instruction set
- added explicit arm64 target, and clang tool options to Windows' configure.bat
- configure.{bat,rc} now writing Makefile.config, for consistency/compatibility (e.g. configure.bat can now be used to set up env flags for a non-nmake toolchain)
- simplified/decluttered Windows and Plan9 configure scripts (removal of unused/stale options, ...)
- callconv section additions about aggregate-by-value passing for all platforms
- new Linux-Std-Base-specific PPC32/SysV section, as aggregate retval handling differs from default SysV for such systems
- man page changes/additions to document new aggregate interfaces
- added many more usage examples to man pages
- replaced API description in manual with references to the manpages, to avoid duplication and keeping things in sync
- general clarifications and cleanup, adding missing definitions to man pages, ...
Version 1.3 (2021/12/17)
- introduced version macro (see dyncall/dyncall_version.h)
- fixed broken return values w/ arm32/thumb mode (only affected some platforms)
- build fix when using clang's integrated assembler on arm32 hard-float platforms
- build fix when using clang's integrated assembler on arm32 hard-float platforms
- Haiku/x86 build fix
- dynload fix for PE files that do not contain a symbol export directory (thanks Ashok!)
- windows/nmake based builds: output library name changes to follow conventions of the native platform and be in line with cmake based builds
- fixed status codes of some tests to actually depend on results (for consistency and automation)
Version 1.2 (2021/01/23)
dyncall:- windows arm64 support (thanks Bernhard!)
- extended signature with more chars for calling convention switching (only for modes that coexist on a platform with other conventions)
- made "formatted" call interface use calling convention signature chars
- added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
- removed some unnecessary headers (only contained internal used forward declarations)
- build fix when using clang's integrated assembler on non-Darwin PPC32 platforms
- windows arm64 support (thanks Bernhard!)
- build fix when using clang's integrated assembler on non-Darwin PPC32 platforms
- fix to build with musl libc
- support for loading macos >= 11.0.1 (Big Sur) dylibs provided by system's "built-in dynamic linker cache of all system-provided libraries" (those dylibs are no longer present on the fs)
- fix to work on recent Haiku versions (r1 beta versions)
- manual now specifying calling convention signature chars
- dynload(3) note about macos >= 11.0.1 cached dylib support (see above)
- marked Haiku/x64 as supported and tested
- pydc: Python 3 support, Python 2 unicode support, added get_path function, changing 'Z' conversions to only immutable types and 'p' to mutable types (and handles), support passing None for 'Z' and 'p', bytearray support, support to specify calling convention
- shdc: can reference own executable now and support for more calling conventions
- shdc: syscall support
- extended callf testcode to test callconv mode switch signature chars (including syscalls)
- robustness fixes (thanks Bernhard!)
- dynload_plain test fix on macos >= 11.0.1 (Big Sur)
- made inode testing of dynload_plain optional, depending on platform support or if macos dylib not on fs but provided through system's cache
- cmake support of armasm64 on windows (thanks Bernhard!)
Version 1.1 (2020/01/11)
dyncall:- support for soft-float MIPS o32 & n64 (big- and little-endian, each)
- x64 System V syscall support
- support for soft-float MIPS o32 & n64 (big- and little-endian, each)
- added UTF-8 support for pathnames on windows
- reliability/stability fix for dlGetLibraryPath() on glibc based platforms (avoiding internal use of glibc's bad impl of dlinfo() which doesn't do any error checking at all)
- Darwin/macos fix for dlGetLibraryPath() to correctly fail on bogus handles (did return paths to random libraries under some circumstances, instead of returning an error)
- support for dlGetLibraryPath() on glibc platforms with glibc vesions <= 2.3.3
- dlGetLibraryPath() now accepts NULL as argument to return path to executable
- dlLoadLibrary() on windows: no more auto-suffixing of the .dll file ext anymore, to be more in line with other platforms (not affecting OS specific library search behaviour)
- more detail in support matrix for bi-endian platforms
- improvements/corrections to calling convention appendix
- PPC64 calling convention description
- MIPS64/N32 calling convention description
- man page additions for clarity
- dynload_plain test extended to test UTF-8 library paths
- better output for plain test
- better output and *nix fix for plain_c++ test
- default ./configure: FreeBSD/mips*hf needed -mhard-float compiler flag set explicitly
- better MacOS Mojave support in ./configure (Mojave dropped i386 builds)
Version 1.0 (2018/04/23)
dyncall:- PPC64 single-precision float fixes for more than 13 float args (thanks Masanori Mitsugi!)
- fixed potential buffer overrun on ARM64
- error code handling (dcGetError) changes, flag is now cleared (work still underway)
- MIPS n64 ellipsis call fixes
- ARM32 armhf ellipsis call fixes
- fixed ARM32-THUMB stack alignment issues (found on Cortex-m0, thanks Darren Whobrey!)
- better C++ compiler support (for pointer conversions)
- PPC64 single-precision float fixes for more than 13 float args (thanks Masanori Mitsugi!)
- MIPS o32 (big- and little-endian), EABI (32 bit, little-endian) and n64 (big-endian) support
- SPARC32 (v7/v8) support
- SPARC64 (v9) support
- PPC32 fixes for (old) Darwin/OS X systems
- POSIX compliance: fallback for wx alloc on systems that don't have mmap()'s MAP_ANON
- allocated space used for thunk now always W^X (req. for e.g. OpenBSD >= 6.0)
- major reliability/stability fixes for Mach-O dlSyms* functions to (thanks Stéphane Mons for help):
- better handle loading dylibs by symlink, relative path, random casing, etc.
- fixes to symbol name lookups that used wrong offsets before
- 64-bit platform fixes (was broken on x64 and never supported on others)
- allowing Mach-O dlSyms* lib to be used standalone (consistent with ELF and PE impls now)
- simplifications of implemention on Darwin, sharing parts with *nix implementation
- potentially breaking change on macos/Darwin platforms: all functions now consistently accept or return symbol names as they would appear in C code, instead of the raw ones in object files
- added new function dlGetLibraryPath, allowing lookups of path to library via handle
- assembly code now built by explicitily asking for non-execstack, for safer/easier integration into other projects/builds, where needed; needed b/c of questionable default behaviours of some toolchains (thanks Thorsten Behrens for report and analysis)
- working html doc generation from TEX sources
- SPARC32 (v7/v8) calling convention description
- SPARC64 (v9) calling convention description
- better documentation, removed relative path dependencies, general cleanup
- python: updated to latest signature format (was still on 0.1)
- java: rewritten (old version was never complete, anyways)
- added new dynload_plain test covering basic use of all dynload functions
- cmake: made to work on systems without C++ compiler (thanks Franklin Mathieu)
Version 0.9 (2015/12/31)
dyncall:- ARM64 support (AAPCS64 on Linux & Apple's derived version on iOS)
- armhf calling convention support for ARM32
- PPC64 support, including syscalls (thanks Masanori Mitsugi!)
- introduced dcArgF and dcVArgF for flexible/convenient argument binding (works like dcCallF/dcVCallF but without the function call)
- using -fPIC by default for FreeBSD
- PPC32 linux syscall support
- fixed return value errors for ARM32 on some platforms (e.g. freebsd/arm32, nintendo ds); arm & thumb mode
- ARM64 support (AAPCS64 on Linux, Apple's derived version on iOS)
- armhf calling convention support for ARM32
- PPC64 support (thanks Masanori Mitsugi!)
- PPC32 System V support (Linux)
- fix for PPC32 Darwin/OS X
- more intuitive specification of callback return type
- added ARM64 support info and calling convention documentation
- added ARM32 armhf section
- added PPC64 support info
- cleanup, brought all up to date, etc.
- callf test covers new argf interface
- several fixes to some test suites
- more flexible testsuite build and 'pack' target for convenience
- fixes/additions for OS X universal builds
- added iOS universal build support for armv7/arm64
- helper script for generic .elf -> EBOOT.PBP creation for PSP
- Sun make fixes for C++ code in test suite
- erldc: Erlang binding (thanks Erik!)
- moved to hg
- moved bindings to own repository
Version 0.8 (2014/03/24)
buildsys:- big simplification make-based build system, no more distinct GNU and BSD makefiles anymore
- new, much simpler ./configure for new make-based build-system
- support for in-source and out-of-source builds for make-based build systems
- made configure.bat guess x64 as target arch for x64 windows hosts
- based more sources on portasm generation
- fix for ARMv7 Thumb-2 code (tested on iPhone 4 CDMA / iOS 6.0.1)
- bugfixes for -O2 builds for SPARC-v9 and SPARC-v7
- new optimized call kernel for SPARC-v9 without conditionals
- bigger refactoring and optimization of MIPS o32
- x64 optimizations
- added callback support for plan9
- big cleanup, removal of duplicate files after introduction of portasm
- include path fixes for public facing APIs (removed relative paths)
- cleanup of manual and corrections
- added info about newly supported and/or tested platforms (e.g. FreeBSD on ARM)
- restructured folder layout for documentation
- added API doc for dyncallback and dynload
- added manpages for dyncallback and dynload
- added arm/thumb interwork test suite
- godc: added bindings for Go
- rbdc: fixed and extended ruby bindings
- shdc: renamed shell binding to shdc and added feature to list shared-objects' symbols
Version 0.7 (2012/01/02)
architecture:- added subproject: portasm - portable (GNU AS,+Apple and MASM) assembly framework
- added subproject: autovar - predefined macro framework (was dyncall_macros.h)
- added support for Solaris and SunPro compiler for i386, x86_64, sparc and sparc64
- improved auto-detection via preprocessor defines
- uses portasm (GNU,Apple,Microsoft) common sources for x86,x64,ppc32,arm32_arm
- added support for sparc (32-bit) (tested on linux/debian,openbsd,solaris)
- added support for sparc (64-bit) (tested on linux/debian,openbsd,solaris)
- bug fixes for x64/win64 calling convention
- added support for mingw32-w64 on x64
- improved cdecl x86 calling convention: stack always 16 byte aligned
- updated API and initial support for structs (for x86/AMD64)
- initial support for syscalls on x86, added x86 int80h linux/bsd
- added Minix port (stable)
- optimized vector buffer for small type pushing
- minor fix for amd64/sysv: alignment to 32-byte
- bug fix for ppc32/sysv: ellipsis calls work now
- updated API, introduced DC_CALL_C_ELLIPSIS_VARARGS
- changed interface: dcMode does not reset internally anymore
- uses portasm for x86,x64
- added Solaris/x86/sunpro port (stable)
- added Minix port (unstable)
- callback support for Darwin/ppc32
- updates source, uses relative includes
- fixes for missing includes (dyncall_alloc.h)
- fixes for self-resolving symbols on windows
- removed Dbghelf.lib dependency
- bug fixes for cygwin/x86
- fixes for beos/haiku
- no dependencies to libdyncall sources.
- added zero-config (BSD,GNU,SUN) make files (Makefile.embedded)
- added in/out-of-source configure2 w/ (BSD,GNU) make files (Makefile.generic)
- added bootstrap lua script (download/build)
- Nmakefile: more tests included (resolve_self)
- improved cross-compilation for iOS (upgrade to 4.3 sdk)
- darwin 8.0 support
- added 'install' support for Makefile.embedded
- added support for msvc/x64 tool-chain
- default settings for build-dir changed to '.'
- cleanup: removed top-level Make{Prolog,Epilog,Rules} files and updated all sub-projects and tests
- added support for DESTDIR staging installation
- added support for manual page installation
- updated find module scripts (see cmake/Modules)
- added support for using dyncall as sub-project (via *Config.cmake files) see details in README.CMake
- fixes for msvc and ml
- fixes for CPack
- fixes for universal builds on Mac OS X
- supports SunPro with *.S files.
- added experimental 'dynMake' portable make-based build-system (not stable, yet)
- added dyncallback documentation
- updated dyncall documentation
- minor updates
- added flexible test suite for calls (call_suite) based on Lua and C
- added syscall test
- updates to resolve-self test (adding additional link flags to export symbols)
- renamed *.cpp -> *.cc files (OpenBSD/Sun make has no implicit rules for cpp)
Version 0.6 (2010/09/25)
buildsys:- new build systems: CMake and Plan9's mk
- buildsys/gmake tool chain update: pcc and iphone sdk
- x64 bugfix: added "-fPIC" even for static libs
- enum symbols update: Mach-O and Win64 (thanks Olivier)
- numerous convenience changes to dynload interface (thanks Olivier)
- added support for resolving application images itself
- new platform support: arm/iphone (armv6), x86/Plan9
- new MIPS calling conventions: o32, n64 (both endian models)
- cleanup: unexported functions in MASM files, b/c export not needed (thanks Olivier)
- interface update: added error reporting facility 'dcGetError'
- bugfix for ppc32/sysv: ellipsis calls were broken
- interface update: added new abstract mode for ellipsis calls (DC_CALL_C_ELLIPSIS)
- comprehensive update
- plain: split "plain" test up in C and C++ part
- callbacksuite: added multiple configuration support for callback_suite
Version 0.5 (2010/02/01)
- renamed arm9 stuff to arm32
- added non-EABI ABI for arm32 (before, EABI was the default implementation)
- added dyncallback support for x64/windows (thanks Olivier), x64/darwin, arm32/arm, arm32/thumb
- synced documentation again with current state of the source (lots of small changes)
- updated ruby binding to current state of signature string (still some features missing, though)
- added a couple of new options to configure scripts (e.g. prefix-bd, new targets, etc.)
- darwin universal binary support
- added new tests callback_plain and calback_suite
- added Haiku/BeOS support
Version 0.4 (2009/07/06)
- added 'doc' makefile target for coherency and ease of use
- fixed nmake buildfiles and configure.bat (were out of date and wrong)
- test suite clean up (GNUmake, BSDmake):
- target "config" modified, phony without dependencies to other builds
- bugfix: GNU fastcall calling convention for float and double arguments was wrong (no skip of register)
- update: x86win32* suite tests are built on cygwin now, added total result output
- signature char (breaking) changes:
- C Strings: 'S' -> 'Z'
- long: 'l' -> 'j'
- long long: 'L' -> 'l'
- added unsigned integer type signature characters: upper case encoding
- added: callbacks component (support only for some platforms ATM)
- added: test cases for alloc_wx, thunk
- updated Documentation
Version 0.3 (2009/01/17)
- added Linux PPC32 support
- added ARM THUMB mode support
- cosmetic changes, documentation updated
- bugfix: on cygwin exported C symbols in GNU as are prefixed with '_' now.
- removed scons build support
Version 0.2 (2008/05/18)
- added scons build support
- configure variables all prefix CONFIG_* now
- configure variable INSTALL_DIR changed to INSTALL_PREFIX
- configure (shell version) option "--prefix" changed to "--prefix=<path>"
Version 0.1 (2008/01/23)
- initial release