On 08/22/2013 11:39 AM, Torvald Riegel wrote:
> + /* Store edi for future HTM fast path retries. We use a stack slot
> + lower than the jmpbuf so that the jmpbuf's rip field will overlap
> + with the proper return address on the stack. */
> + movl %edi, -64(%rsp)
You havn't allocated the stack frame here, and you're storing
outside the redzone. This is invalid.
Two possibilities:
(1) always allocate the stack frame on entry to
the function (adds two register additions to
the htm fast path -- in the noise i'd think)
(2) store the edi value in the non-htm path, with
the pr_HTMRetryableAbort bit or'd in. (adds an
extra store to the non-htm path; probably noise).
You'd want to mask out that bit when you reload it.
r~