mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
When rewriting the original call instruction, make sure to rewrite it to
call the right address. llvm-svn: 18213
This commit is contained in:
parent
8cd0215f14
commit
961fae4d82
@ -81,12 +81,13 @@ static void CompilationCallback() {
|
||||
// does not need to go through the stub anymore.
|
||||
unsigned CameFromOrigInst = CameFromOrig[-1];
|
||||
if ((CameFromOrigInst >> 26) == 18) { // Direct call.
|
||||
intptr_t Offset = ((intptr_t)Target-(intptr_t)CameFromOrig) >> 2;
|
||||
intptr_t Offset = ((intptr_t)Target-(intptr_t)CameFromOrig+4) >> 2;
|
||||
if (Offset >= -(1 << 23) && Offset < (1 << 23)) { // In range?
|
||||
// FIXME: hasn't been tested at all.
|
||||
// Clear the original target out:
|
||||
// Clear the original target out.
|
||||
CameFromOrigInst &= (63 << 26) | 3;
|
||||
CameFromOrigInst |= Offset << 2;
|
||||
// Fill in the new target.
|
||||
CameFromOrigInst |= (Offset & ((1 << 24)-1)) << 2;
|
||||
// Replace the call.
|
||||
CameFromOrig[-1] = CameFromOrigInst;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user