Skip to content

Releases: tudasc/TypeART

v2.2

14 Apr 12:53
19abf38

Choose a tag to compare

Support for LLVM versions up to 22 and introduction of global variables as type descriptors for runtime type registration. Parallel building with TypeART is now supported.

What's Changed

Full Changelog: v2.1...v2.2

TypeART v2.1

26 May 14:12
de3bc14

Choose a tag to compare

  • Explicitly model built-in wchar_t type.
  • API for querying source location of allocations has changed. Uses a struct holding the location information, instead of separate pointers.
  • Softcounter now track type & count of type queries.

What's Changed

Full Changelog: v2.0...v2.1

TypeART v2.0

19 Mar 19:53
8166cec

Choose a tag to compare

This release adds LLVM 18 & 19 support, featuring the new PassManager, simplified compiler wrappers using -fpass-plugin, and improved type parsing via llvm-dimeta v0.2. Runtime API updates improve ergonomics of type queries, also reducing overhead.

  1. LLVM 18 & 19 Support
  • Enabled the new PassManager (PM) for LLVM 14+.
  • Compiler wrapper use -fpass-plugin
  • LLVM18+ only works with llvm-dimeta type parsing
  1. Type parsing
  • Improved llvm-dimeta type mapping, including better support for inheritance, unions, complex types.
  • Added support for vtable, void*, and nullpointer built-in types.
  • Powered by llvm-dimeta v0.2
  1. Runtime API Changes
  • Introduced structs typeart_type_info_t and typeart_base_type_info_t for querying type information.
  • Improved typeart_get_type and typeart_get_containing_type to use these structs and reduce query overheads.
  • Removed unused/duplicate API functions.

Misc

  • Expanded configuration options via CLI and environment variables. (due to new PM usage)

Detailed list: What's Changed

Full Changelog: v1.9.1...v2.0

TypeART 1.9.1

12 Feb 14:32
2d65ea8

Choose a tag to compare

Bug fix

  • Generate hashed names for anon structs when using typegen dimeta by @ahueck in #160

Full Changelog: v1.9...v1.9.1

TypeART 1.9

03 Jan 10:24
717a560

Choose a tag to compare

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:

  1. LLVM IR Type System (--typeart-typegen=ir): Uses the LLVM IR directly for type extraction.
  2. 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 -).
  • Enhanced debugging by supporting the emission of heap, opt, and stack 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

12 Jul 12:51
3b3e9c3

Choose a tag to compare

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

04 May 14:13
6912548

Choose a tag to compare

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 line typeart-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 and typeart-mpicxx are thus generated for a specific MPI implementation (based on result of FindMPI)
  • 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 or TYPEART_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

03 Jan 20:56
a83c63b

Choose a tag to compare

Major changes

  • Supports LLVM 10 to 13.
  • Compiler wrapper for TypeART, e.g., env CC=typeart-clang or env MPICXX=typeart-mpic++
    • No need to directly invoke clang and opt w.r.t. TypeART anymore
    • Works with CMake
  • 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

  • CMake build system modernized, requires CMake >= 3.20.
  • find_package(LLVM) first uses provided LLVM_DIR and falls back to find_package(LLVM 10) for support of different versions
  • Fix #84, closes #87
  • Updated copyright year in headers
  • Updated README.md

TypeART 1.6

21 Jun 11:06
e563d3d

Choose a tag to compare

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 and run.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

04 Jan 16:22
71d7993

Choose a tag to compare

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:

  • Properly support optimization flags, see #43
  • Fix bug when optimization flag is passed, the script will apply heap instrumentation twice, see #44