*(ULong*)(&p[2]) = Ptr_to_ULong(place_to_jump_to);
p[12] = 0xE3;
}
- VexInvalRange vir = {0, 0};
+ VexInvalRange vir = { (HWord)place_to_chain, 13 };
return vir;
}
p[10] = 0x41;
p[11] = 0xFF;
p[12] = 0xD3;
- VexInvalRange vir = {0, 0};
+ VexInvalRange vir = { (HWord)place_to_unchain, 13 };
return vir;
}
p[7] = imm64 & 0xFF; imm64 >>= 8;
p[8] = imm64 & 0xFF; imm64 >>= 8;
p[9] = imm64 & 0xFF; imm64 >>= 8;
- VexInvalRange vir = {0, 0};
+ VexInvalRange vir = { (HWord)place_to_patch, 13 };
return vir;
}
}
/* CODE points to the code sequence as generated by s390_tchain_load64.
- Change the loaded value to VALUE. Return pointer to the byte following
+ Change the loaded value to IMM64. Return pointer to the byte following
the patched code sequence. */
static UChar *
s390_tchain_patch_load64(UChar *code, ULong imm64)
s390_tchain_verify_load64(code_to_patch, S390_REGNO_TCHAIN_SCRATCH, 0);
- s390_tchain_patch_load64(code_to_patch, Ptr_to_ULong(location_of_counter));
+ UChar *p = s390_tchain_patch_load64(code_to_patch,
+ Ptr_to_ULong(location_of_counter));
- VexInvalRange vir = {0, 0};
+ UInt len = p - (UChar *)code_to_patch;
+ VexInvalRange vir = { (HWord)code_to_patch, len };
return vir;
}
/* There is not need to emit a BCR here, as it is already there. */
}
- VexInvalRange vir = {0, 0};
+ UInt len = p - (UChar *)place_to_chain;
+ VexInvalRange vir = { (HWord)place_to_chain, len };
return vir;
}
if (uses_short_form)
s390_emit_BCR(p, S390_CC_ALWAYS, S390_REGNO_TCHAIN_SCRATCH);
- VexInvalRange vir = {0, 0};
+ UInt len = p - (UChar *)place_to_unchain;
+ VexInvalRange vir = { (HWord)place_to_unchain, len };
return vir;
}
/* sanity check on the delta -- top 32 are all 0 or all 1 */
delta >>= 32;
vassert(delta == 0LL || delta == -1LL);
- VexInvalRange vir = {0, 0};
+ VexInvalRange vir = { (HWord)place_to_chain, 7 };
return vir;
}
*(UInt*)(&p[1]) = (UInt)Ptr_to_ULong(disp_cp_chain_me);
p[5] = 0xFF;
p[6] = 0xD2;
- VexInvalRange vir = {0, 0};
+ VexInvalRange vir = { (HWord)place_to_unchain, 7 };
return vir;
}
p[10] = imm32 & 0xFF; imm32 >>= 8;
p[11] = imm32 & 0xFF; imm32 >>= 8;
p[12] = imm32 & 0xFF; imm32 >>= 8;
- VexInvalRange vir = {0, 0};
+ VexInvalRange vir = { (HWord)place_to_patch, 14 };
return vir;
}
/*--- Patch existing translations ---*/
/*-------------------------------------------------------*/
-/* Indicates a host address range for which callers to the functions
- below must request I-D cache syncing after the call. ::len == 0 is
- ambiguous -- it could mean either zero bytes or the entire address
- space, so we mean the former. */
+/* A host address range that was modified by the functions below.
+ Callers must request I-cache syncing after the call as appropriate. */
typedef
struct {
HWord start;
- HWord len;
+ HWord len; /* always > 0 */
}
VexInvalRange;