- Fix auxdata table
elfSectionPropertiestosectionPropertiesin the java api to match the cpp and python api - Switched to use tox for testing the python API.
- Fixed a compatibility problem in the Python API that prevented using recent releases of protobuf. The Python API on PyPI now requires protobuf 4.21.1 or newer.
- Building the Python API now requires protobuf compiler version 3.19 or later for the generated definitions to be compatible with recent protobuf packages. The API can still be built with older protobuf compilers, but the result will not be compatible with recent protobuf packages.
- Added support in the C++ API for deserializing set AuxData into unordered_sets.
- Fixed issue causing compile errors when building with Boost 1.86+.
- Building the C++ API now requires Boost 1.68 or later.
- Fixed an obscure build error caused by a missing protobuf compiler. CMake now explicitly checks for the protobuf compiler before generating build files.
- Move the following utility functions into the
gtirbnamespace:alignAddr,alignmentAdjustment,BumpPtrAllocator,isPowerOf2_64,SpecificBumpPtrAllocator,cast,cast_or_null,dyn_cast,dyn_cast_or_null,isa. For backwards compatibility, these functions remain available, but deprecated, in the global namespace unlessGTIRB_WRAP_UTILS_IN_NAMESPACEis defined.
- Stop generating debian metapackages and packages with the version attached
to the package name. Updates in the apt-repository now support multiple
package versions and upgrading
gtirbwithapt-get upgrade. - Fix performance issue when checking references of ProxyBlocks in Python API.
- Add elfSoname AuxData definition
- ByteInterval's blocks' sort order is now thoroughly defined: offset, size, kind, decode mode, and UUID. Adjusting these properties during iteration may cause blocks to be skipped or visited twice.
- Added ByteInterval methods to the Python API to look up blocks by offset on.
- The Java API has been substantially reworked. Including:
- Most of the core API classes now have a more polished interface.
- The API for handling AuxData has been completely redesigned.
- New testing infrastructure based on JUnit5 has been added.
- More extensive test cases have been added.
- Add elfStackExec and elfStackSize AuxData definitions
- Add
IR.modules_namedhelper method to Python API. - Add
IR.findModules(String name)helper method to Java API.
- Add elfDynamicInit and elfDynamicFini AuxData definitions
Note that this release, due to changes to the protobuf definitions of symbolic expression attributes, is backwards-incompatible with previous GTIRB files.
- Replace symbolic expression attributes with composable labels.
- Added support for bool values in AuxData.
- Added elfSymbolVersions provisional AuxData definition.
- The GTIRB file format has changed to include a prefix containing a "magic" identifier and the GTIRB protobuf version number to allow easier id of GTIRB files. The change is not backwards compatible. Newer versions of GTIRB will not be able to load older GTIRB files.
- Converted the decode mode from an arbitrary integer into a ProtoBuf enum. This obviously breaks compatibility with older GTIRB files.
- Ubuntu 18 and gcc7 are no longer supported.
- Added support for floating-point numbers in AuxData.
- Disabled testing the Python API using
setup.py test. The tests can still be run using ctest or Python's unittest module. - Improved the performance of the Python API's ByteBlock.references property.
- Fixed a pair of bugs in C++ support for variants in AuxData
- Added type annotations to python API and made them available in package.
- Removed install-python target.
- Added various symbolic expression attributes.
- Updated Java API
- Removed SymStackConst support
- Added variant (union) support for AuxData
- Removed address and size from modules
- Modified Module::findSections(string) to return a range instead of iterator
- Added IR::findSection(string) to C++ API
- Added offset helpers to Python API
- Better support for
std::bytewhen working withByteInterval - Fixed a bug which manifested when serializing a big-endian IR
- Updated "address" iteration order to compare size if addresses are the same and UUIDs if addresses and sizes are the same so that it can be used to store objects in ordered containers.
- Fixed some bugs where modifying an object's address or size would cause findNodeOn to return incorrect results.
- Improved performance of findNodeOn and findNodeAt queries.
- Added module-level endianess flag, for use in archtectures with multiple possible endians for its code blocks.
- Introduce iteration helpers cfgPredecessors and cfgSuccessors.
- Introduce attributes for symbolic expressions to the core IR.
- Reduce asymptotic complexity of iterating over blocks in a large number of byte intervals.
- Fixed bug where searching for blocks by address could return incorrect matches.
- Fixed bug where
ByteInterval::addBlockwould refuse to move an existing block to a new offset if it was already present.
- Make Python Offset objects immutable and make Offsets equivalent when they refer to the same displacement from the same element.
- Fix bug where Symbol iteration could get out of order when symbols refer to blocks in byte intervals that are relocated.
- Fix bug that didn't add CodeBlocks to the CFG if the CodeBlocks were added to a ByteInterval before it was added to the IR.
- The C++ API build no longer generates a
libgtirb.so.1symlink. This has the effect of requiring clients to link against the full version number (e.g.,libgtirb.so.1.8.2) to ensure ABI compatibility while we continue to make rapid improvements to the library.
- In the Python API:
- Removed
Node.from_uuidand addedget_by_uuidtoIRs. This changes UUID lookup from a global cache to a per-IR cache; this means you can now have two IRs exist that share UUIDs but have different contents, for example. - Added convienience properties to all node types to find the parent nodes they belong to.
- Removed
- Implement std::hash for Addr objects.
- Explicitly disable copy and move constructors for the Node class hierarchy in C++. This avoids a class of errors where nodes cannot be found by Node::getByUUID.
- Build/install libgtirb.so.1 symlink on linux.
- Remove the python-egg cmake target, add the python-wheel cmake target
- Don't use __declspec(dllimport) on Windows.
- Add ISA enums for PPC64, ARM64, MIPS32, and MIPS64.
- Access functions for converting to/from protobuf are no longer public in the C++ API.
- The proto library is no longer dllexported.
- GTIRB_EXPORT_API no longer uses dllimport on the client side.
- No longer installs Python files by default. Added a new 'install-python' target to install Python files.
- Added a new field to symbols,
at_end, which allows symbols to point to the end of their referents as well as the beginning.
- Moved protobuf definitions into gtirb.proto package (gtirb::proto namespace in C++).
- Installing the Python API now respects CMAKE_INSTALL_PREFIX and DESTDIR with their usual semantics.
- AuxData and AuxDataContainer in the C++ API have been reworked to provide cleaner type safety.
- AuxData is now retrieved directly from an AuxDataContainer using a schema class that specifies both the name of the AuxData object as well as its type.
- Schemata for AuxData types must be registered at process startup before GTIRB objects are constructed or unserialized.
- Fixed a bug where changing the address of a block caused lookups of symbol by address to fail in some cases.
- Added a new API for accessing GTIRB, written in Java. This API is not yet
released, and as such, has missing features, is not yet documented, and may
change at any time. For more information, look at the contents of the
javadirectory.
This is a major backwards-incompatible release. The protobuf
specification has changed significantly resulting in protobuf version
1 which is now tracked in version.txt in the base of this
repository. (The original protobuf version was version 0.) The
changes in this release are primarily intended to enable binary
rewriting use cases on GTIRB. Other changes to the protobuf
specification are for more general cleanup, simplification, and
clarification. In addition, a new Common Lisp GTIRB API is now
included along with the C++ and Python APIs. A list of specific
changes follows. Complete documentation of all new objects and
structures is provided in the GTIRB manual.
- A
versionfield is now present on GTIRB IR instances. The value of this field is now1. The old value of0is the protobuf default for a missing field. - The control flow graph (CFG) is now a child of the IR instead of living under a specific module. This means that a multi-module IR now has a single pan-module CFG.
- The
Blockobject has been renamed toCodeBlockand theDataObjecttoDataBlock. - A new object has been added to the GTIRB
Sections namedByteIntervals. This replaces theByteMapin the previous GTIRB version. AByteIntervalhas:- An optional fixed address indicating its location in memory.
Without an address the location of the
ByteIntervalis not specified allowing it to float to enable easier binary rewriting. - A
sizespecifying the extend of theByteIntervalin memory. If this size is larger than the contents of theByteIntervalthen the extension of theByteIntervalin memory beyond the end of the contents is un-allocated. - A byte vector named
contentsholding the contents of theByteInterval. - A map from offsets to symbolic expressions.
- A list of blocks holding
CodeBlocks andDataBlocks.
- An optional fixed address indicating its location in memory.
Without an address the location of the
- The
addressfield has been removed fromBlocks. - The
addressandsizefields have been removed fromSections. - An offset from the start of their
ByteIntervalhave been added to blocks. - The following fields have been removed from
Modules:image_byte_mapsymbolic_operandsblocksanddata.
- An entry point stored as a
CodeBlockhas been added toModules. - A list of
ByteIntervalshas been added toSections. - The
ISAIDenumeration on module is renamed toISA. - Instead of an
AuxDataContainerobject we now hold amap<string, AuxData>on modules and IRs. - The following GTIRB enumerations are modified:
ISA,FileFormat,SymbolKind, andSectionFlag. The goals of these modifications is to simplify the enumerations and ensure that all included options are both necessary and orthogonal. - Sections now include have
SectionFlags to store common properties such asreadable,writeable, orexecutable.
- You can now enable and disable the building of certain APIs when calling CMake,
via the following flags:
GTIRB_CXX_APIto control the building of the C++ API, on by defaultGTIRB_PY_APIto control the building of the Python API, on by default ifpython3is installed on your system
- The following changes have been made to the Python API:
Serialization.decodecan now take abytesobject in addition to aBytesIOobject.- If an unknwon type is encountered while decoding
AuxData, it will be placed indataas abytes-like object instead of throwing aDecodeError. Unknown data decoded this way can be then encoded again. It is still an error to encode unknown types of auxdata not in the manner described above.
- ImageByteMap::setData() has been extended to support arbitrary iterator types.
- We now build documentation for the Python API using
Sphinx. To generate all
documentation locally, call
make docafter callingcmake; this will generate both C++ and Python API documentation. To only make one or the other, callmake doxyormake sphinx, respectively.- Making the Sphinx documentation will require the following Python packages:
pip3 install sphinx sphinx-autodoc-typehints
- Making the Sphinx documentation will require the following Python packages:
- Added a new Python API, meant to be a high-level wrapper over the
Protobuf-generated one. To make use of it, add the
pythonfolder from your build directory to yourPYTHONPATH. The package is namedgtirb. - CMake now won't automatically download and install its dependencies,
so that the user has control over which versions are in use.
The version requirements for Boost and Protobuf are listed in
README.md. - Updated the sanctioned AuxData definitions.
- Fix for build issue when using Boost 1.71.0.
- Initial public release.