Releases: tudasc/TypeART
TypeART 1.9
This release introduces a new approach to serializing type information, leveraging the integration of the llvm-dimeta library. This enhances TypeART’s ability to extract and store type layouts using LLVM debug metadata as opposed to LLVM IR-only type information.
Other key updates include enhancements to the configuration system, extended wrapper functionality, and general maintenance.
Detailed Changes
Type Information with llvm-dimeta
Integrated the llvm-dimeta library to determine type information for stack, global, and heap allocations based on LLVM debug metadata.
Now, two methods for generating type layouts exist:
- LLVM IR Type System (--typeart-typegen=ir): Uses the LLVM IR directly for type extraction.
- LLVM Debug Metadata (--typeart-typegen=dimeta, default): Uses llvm-dimeta for type extraction from debug metadata.
Configuration
- Unified commandline and file-based configuration using a new
Configuration
base class. - YAML configuration files are now supported and can be combined with commandline options, prioritizing the latter.
- Centralized definition of commandline options for improved consistency.
Compiler Wrapper
- Wrapper passes -fPic and -g by default
- Added the ability to emit Clang compiler’s base IR via the wrapper, aiding debugging workflows.
- Wrapper now supports flexible output formats:
- Emit assembly (
-S
). - Emit LLVM bitcode (
-emit-llvm
). - Emit LLVM IR (
-emit-llvm -S
). - Direct output to console (
-o -
).
- Emit assembly (
- Enhanced debugging by supporting the emission of
heap
,opt
, andstack
IR phases via environment flags. - Updated Python scripts for IR comparisons across phases (
ir_viewer
) and between different wrappers (ir_compare
).
System.h: Source Location
- Improved source location detection by refining pointer offset calculations.
- Resolved recursion issues caused by library preloading during source location queries.
Build System and CI
- Updated external dependencies to their latest versions.
- Fixed CMake IDE test targets and improved Python interpreter detection in CI workflows.
Packaging and Miscellaneous
- Updated license headers and README for the release.
List of PR's
- Configuration support in #133
- Improve wrapper debug support in #134
- Test related updates in #135
- Re-configure when scripts change in #136
- Emit base IR with wrapper in #137
- Wrapper emit-llvm in #138
- Maintenance in #141
- Type extraction via Dimeta library in #143
- Prepare release v1.9 in #144
- Release 1.9 in #145
- Readme updates (#146) in #147
Full Changelog: v1.8.1...v1.9
TypeART 1.8.1
Bugfix release.
Fix git tag issue with (optional) phpmap dependency.
Misc: Remove CI-ext AD run with safeptr map, see #64.
Full Changelog: v1.8...v1.8.1
TypeART 1.8
This release primarily improves interoperability when other projects consume TypeART.
This includes naming (mostly prefixing) of CMake variables, to better support inclusion via FetchContent
or with add_subdirectory
, and extending the package config to provide TypeART script (binaries).
The API of typeart_get_subtype
was changed to avoid copying the TypeART struct info by copy. It is now passed as a const pointer.
The TypeART pass now supports stack lifetime markers, see lifetime.start.
Only when the lifetime of a stack variable starts, are it's address and type information valid. This is especially the case in the context of stack coloring, where stack space is re-used (with potentially different types but same memory address)
Detailed changes
Runtime
- Changed API of
typeart_get_subtype
: Pass struct info by pointer
LLVM pass
- Remove deprecated (stack/global) allocation filter. Filters are selectable with a fixed set:
none
(no filtering),std
(standard filter),cg
(call-graph based filter) uisng the command linetypeart-call-filter-impl
- Refactor command line options to use prefix
typeart-
- Stack allocations: Support LLVM stack lifetime start markers for instrumenting the stack, fixes #113
- Add support for LLVM 14
Scripts & compiler wrapper
- Try to detect and support Open MPI, Intel MPI and MPICH wrapping
typeart-mpicc
andtypeart-mpicxx
are thus generated for a specific MPI implementation (based on result ofFindMPI
)
- Support compile & link single invocation, i.e.,
typeart-clang source.cpp -o source.exe
now works, see #112
CMake
- Start options and cache variables with
TYPEART_
prefix - Use correct option name, fixes #114
Packaging
- Package config provides the wrapper scripts via
find_program
as cached variables, e.g.:TYPEART_MPICC_CMD
orTYPEART_MPICC_CMD_DEBUG
for the mpicc wrapper
Misc
- Update clang-format (configuration) to version 12
- Provide new btree-backed map as alternative to Abseils
- Set Abseil to long-term release version
- Add codespell config file
- Add lit test targets
check-typeart-...
for testing - Fix lit flag for when thread support is detected, i.e., use
Threads_FOUND
, see #120
Full Changelog: v1.7...v1.8
TypeART 1.7
Major changes
- Supports LLVM 10 to 13.
- Compiler wrapper for TypeART, e.g.,
env CC=typeart-clang
orenv MPICXX=typeart-mpic++
- No need to directly invoke
clang
andopt
w.r.t. TypeART anymore - Works with CMake
- No need to directly invoke
- Redone library naming (#81), installing, packacking (CMake)
- Allows consuming TypeART in other projects as a library
Detailed changes
Runtime
- Runtime does not exit when default
types.yaml
is missing. Supports checks fo built-in types (double
etc.).
Pass
- TypeART uses single LLVM pass (instead of analysis + transform)
- Filter allocas of pointer values by default (can be disabled)
- Globals have a reworked pre-filtering, closes #101
- Add
CallSite.h
from LLVM 10- Enabled for builds with LLVM 11 and higher for compatibility
Misc general
TypeART 1.6
Major changes
- OpenMP support and thread-safety for the runtime were added.
- Array cookies for
new[]
,delete[]
are explicitly handled.
Detailed changes
Passes
- Filter aware of OpenMP microtask outlining & API
- Filter aware of Clang sanitizer API calls (asan, ubsan, msan)
- Support for C++ array cookies added, see #71
Runtime
- Runtime is thread-safe, see #10
- Refactoring: Split up runtime type-checking and allocation tracking
Misc general
- Bug fixes, see #63 #65 #67
- Install target for scripts
apply.sh
andrun.sh
, see #70 - Should build with LLVM libcxx, closes #58 and #60
- Requires full stack to be build with libcxx to be usable (e.g., LLVM (opt) build with libcxx)
- Fixed demo Makefile and Open MPI 4 deprecation, see #76
- Extended CI tests, see #2
- Updated README.md
TypeART 1.5.1
Bugfix release.
Runtime softcounter:
- Count maxHeapAlloc correctly even if free/delete is never called, see #45
Runtime callback interface (hidden API):
- Fix bug where calling interface directly can cause a crash, see #40
- Fix mismatch between CallbackInterface.h and LLVM pass instrumentation type for stack deallcoation function, see #41
Scripts:
TypeART 1.5
Passes
- Support InvokeInst
- More memory allocation functions supported
- Selectable filter implementations
- new dataflow allocations filter
- new call-graph based filter option
Runtime
- Extended AccessCounter stats (counting of allocation operations)
- Use btree map of abseil as default
Misc General
- More tests (and more code coverage)
- Coverage options (lcov, gcovr, llvm-cov)
- Changed project structure (lib/ now contains runtime, passes etc)
- Updated CI setup (recent Ubuntu runner, test AD lulesh), compute coverage with Coveralls
TyCart 0.1
This release was used in the C3PO workshop paper "Compiler-assisted type-safe checkpointing"
TypeART 1.2
Comes with an updated README and implements minor bug fixes.
Initial TypeART Release
This version was used in the 2018 Correctness workshop paper, see our paper.