Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix insnCodeGen::modifyData's 64-bit conversion
On RHEL6 with a prelinked `/lib64/libc-2.12.so`, all of tests involving fork instrumentation were getting SIGSEGV in the mutatee. This worked in 9.1, and it also works fine after `prelink -u` to undo libc. Using git-bisect found 2b86eb4 as the point of regression. It seems prelink ends up with libc sitting far away from the relocation buffer, more than a 32-bit displacement, so `insnCodeGen::modifyData` decides to rewrite that to a 64-bit immediate. To do this, it has to emit additional instructions first. But after the commit above, part of the rewritten instruction has already been written when we're trying to emit those extras, and things gets clobbered. This patch emits those preamble instructions first, before any part of the newly rewritten instruction is copied out.
- Loading branch information