mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 20:29:53 +00:00
[msan] Change va_start/va_copy shadow memset alignment to 8.
This fixes va_start/va_copy of a va_list field which happens to not be laid out at a 16-byte boundary. Differential Revision: http://llvm-reviews.chandlerc.com/D276 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172128 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
893a234878
commit
03de2a621c
@ -1774,7 +1774,7 @@ struct VarArgAMD64Helper : public VarArgHelper {
|
||||
// Unpoison the whole __va_list_tag.
|
||||
// FIXME: magic ABI constants.
|
||||
IRB.CreateMemSet(ShadowPtr, Constant::getNullValue(IRB.getInt8Ty()),
|
||||
/* size */24, /* alignment */16, false);
|
||||
/* size */24, /* alignment */8, false);
|
||||
}
|
||||
|
||||
void visitVACopyInst(VACopyInst &I) {
|
||||
@ -1785,7 +1785,7 @@ struct VarArgAMD64Helper : public VarArgHelper {
|
||||
// Unpoison the whole __va_list_tag.
|
||||
// FIXME: magic ABI constants.
|
||||
IRB.CreateMemSet(ShadowPtr, Constant::getNullValue(IRB.getInt8Ty()),
|
||||
/* size */ 24, /* alignment */ 16, false);
|
||||
/* size */24, /* alignment */8, false);
|
||||
}
|
||||
|
||||
void finalizeInstrumentation() {
|
||||
|
@ -534,3 +534,16 @@ define <8 x i8*> @VectorOfPointers(<8 x i8*>* %p) nounwind uwtable {
|
||||
; CHECK: load <8 x i8*>*
|
||||
; CHECK: store <8 x i64> {{.*}} @__msan_retval_tls
|
||||
; CHECK: ret <8 x i8*>
|
||||
|
||||
; Test handling of va_copy.
|
||||
|
||||
declare void @llvm.va_copy(i8*, i8*) nounwind
|
||||
|
||||
define void @VACopy(i8* %p1, i8* %p2) nounwind uwtable {
|
||||
call void @llvm.va_copy(i8* %p1, i8* %p2) nounwind
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: @VACopy
|
||||
; CHECK: call void @llvm.memset.p0i8.i64({{.*}}, i8 0, i64 24, i32 8, i1 false)
|
||||
; CHECK: ret void
|
||||
|
Loading…
Reference in New Issue
Block a user