Utilities for dealing with live register analysis in GTIRB functions
Project description
gtirb-live-register-analysis
Overview
The gtirb-live-register-analysis package provides a Python API for live register analysis of GTIRB functions. A simple interface is also provided for working with gtirb-rewriting patches.
Supported ABIs
ISA | File Format |
---|---|
X64 (x86-64) | ELF |
Getting Started
Generic Usage
from gtirb_live_register_analysis import LiveRegisterManager
reg_manager = LiveRegisterManager(module)
# Analyze function of interest
reg_manager.analyze(function)
# The sets of live and free registers can then be retrieved
live_regs = reg_manager.live_registers(function, block, instruction_idx)
free_regs = reg_manager.free_registers(function, block, instruction_idx)
Use with gtirb-rewriting patches
Wrap the decorator function around a patch function to assign free registers to be used as scratch registers. When there are not enough free registers, the library falls back to gtirb-rewriting, which generates code to spill/restore the excess registers to stack.
@reg_manager.allocate_registers(function, block, instruction_idx)
@patch_constraints(x86_syntax=X86Syntax.INTEL, scratch_registers=6)
def my_patch(self, ctx: InsertionContext):
reg1, reg2, reg3, reg4, reg5, reg6 = ctx.scratch_registers
return f"""
xor {reg1}, {reg1}
xor {reg2}, {reg2}
xor {reg3}, {reg3}
xor {reg4}, {reg4}
xor {reg5}, {reg5}
xor {reg6}, {reg6}
"""
rewriting_ctx.insert_at(block, offset, Patch.from_function(my_patch))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file gtirb-live-register-analysis-0.0.5.post1.tar.gz
.
File metadata
- Download URL: gtirb-live-register-analysis-0.0.5.post1.tar.gz
- Upload date:
- Size: 17.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 95832190f9ab0488f3e9927a9e2c08ecabe0f13e09b5cca003e0962ee1bd608b |
|
MD5 | 4283da0a985b6a30fcfada8e1d27154a |
|
BLAKE2b-256 | ade9b5938b0afca9598e3aef1f8a8f76dd621798eb1aa47362ddc82f6d06228d |
File details
Details for the file gtirb_live_register_analysis-0.0.5.post1-py3-none-any.whl
.
File metadata
- Download URL: gtirb_live_register_analysis-0.0.5.post1-py3-none-any.whl
- Upload date:
- Size: 18.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 851fd3fe82ff8db09d87e64bb7bc034f938d52d0a89b24c64c4c2c408e8a56a3 |
|
MD5 | ebc236b63aae4e620234b10f10b3f031 |
|
BLAKE2b-256 | 6b13402aff78733aeeef517d20894d609d4bffd277129c207344f85c2dba8fdb |