The DTrace script:
fbt::tcP_do_segment:entry{
tdatalen = (((struct ip *)args[0]->m_data)->ip_hl << 2) + (args[1]->th_off << 2);
}
resulted in a Translation (L1) fault on ARMv6 (BeagleBone Black). The translation fault caused by the script was not being correctly handled, the following issues where identified:
dtrace_trap - didn't handle FAULT_TRAN_1 or FAULT_TRAN_2 (only FAULT_ALIGN).
abort_handler - didn't call the dtrace_trap() function early enough to handle faults caused by DTrace
dtrace_trap - was called with the fault address register rather than the fault status
I have move the call to dtrace_trap to the earliest available point in abort_handler(), rather than create a separate function as in the amd64 handler to keep changes to a minimum.
Something similar should be done for < ARMv6. I need to further understand the errors that need to be handled in that case. I don't have a board to test the changes so will be cautious before making those changes,