Skip to content

Releases: tudasc/TypeART

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

TypeART 1.5

29 Dec 14:21
aeb9ca5

Choose a tag to compare

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