The ia64 REG_IP() for the ia64 takes a couple register values to synthesize a value for the instruction pointer in runtime/regs.h: #define REG_IP(regs) ((regs)->cr_iip +ia64_psr(regs)->ri) However, the translator generates code like the following that uses REG_IP as an lvalue for begin and end probes: #ifdef STP_NEED_UNWIND_DATA memset (& c->regs_buffer, 0, sizeof (c->regs_buffer)); REG_IP((& c->regs_buffer)) = (unsigned long)__builtin_return_address (0); REG_SP((& c->regs_buffer)) = (unsigned long)& c; c->regs = & c->regs_buffer; #endif This causes the following tests to fail on ia64: systemtap.examples/interrupt/scf systemtap.examples/io/io_submit buildok/context_test.stp The ri (restart instruction) points to which instruction in a bundle to restart execution at. The ri field is part of the program status register (psr).
I will revert this code, which is being mooted for bug #6961 anyway.
see commit 22f8b40
Tested on the ia64 machine and the change fixed the issue.