Skip to content

Commit 3414774

Browse files
author
Kamil Kashapov
committed
[MSan] Change overflow_size_tls type to IntPtrTy
1 parent 0a21ef9 commit 3414774

File tree

3 files changed

+41
-41
lines changed

3 files changed

+41
-41
lines changed

compiler-rt/lib/msan/msan.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ alignas(16) SANITIZER_INTERFACE_ATTRIBUTE THREADLOCAL u32
6363
__msan_va_arg_origin_tls[kMsanParamTlsSize / sizeof(u32)];
6464

6565
SANITIZER_INTERFACE_ATTRIBUTE
66-
THREADLOCAL u64 __msan_va_arg_overflow_size_tls;
66+
THREADLOCAL uptr __msan_va_arg_overflow_size_tls;
6767

6868
SANITIZER_INTERFACE_ATTRIBUTE
6969
THREADLOCAL u32 __msan_origin_tls;

llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -907,8 +907,8 @@ void MemorySanitizer::createUserspaceApi(Module &M,
907907
getOrInsertGlobal(M, "__msan_va_arg_origin_tls",
908908
ArrayType::get(OriginTy, kParamTLSSize / 4));
909909

910-
VAArgOverflowSizeTLS =
911-
getOrInsertGlobal(M, "__msan_va_arg_overflow_size_tls", IRB.getInt64Ty());
910+
VAArgOverflowSizeTLS = getOrInsertGlobal(M, "__msan_va_arg_overflow_size_tls",
911+
IRB.getIntPtrTy(M.getDataLayout()));
912912

913913
for (size_t AccessSizeIndex = 0; AccessSizeIndex < kNumberOfAccessSizes;
914914
AccessSizeIndex++) {
@@ -6375,7 +6375,7 @@ struct VarArgPowerPCHelper : public VarArgHelperBase {
63756375
assert(!VAArgSize && !VAArgTLSCopy &&
63766376
"finalizeInstrumentation called twice");
63776377
IRBuilder<> IRB(MSV.FnPrologueEnd);
6378-
VAArgSize = IRB.CreateLoad(IRB.getInt64Ty(), MS.VAArgOverflowSizeTLS);
6378+
VAArgSize = IRB.CreateLoad(MS.IntptrTy, MS.VAArgOverflowSizeTLS);
63796379
Value *CopySize = VAArgSize;
63806380

63816381
if (!VAStartInstrumentationList.empty()) {
@@ -6389,7 +6389,7 @@ struct VarArgPowerPCHelper : public VarArgHelperBase {
63896389

63906390
Value *SrcSize = IRB.CreateBinaryIntrinsic(
63916391
Intrinsic::umin, CopySize,
6392-
ConstantInt::get(IRB.getInt64Ty(), kParamTLSSize));
6392+
ConstantInt::get(MS.IntptrTy, kParamTLSSize));
63936393
IRB.CreateMemCpy(VAArgTLSCopy, kShadowTLSAlignment, MS.VAArgTLS,
63946394
kShadowTLSAlignment, SrcSize);
63956395
}
@@ -6772,7 +6772,7 @@ struct VarArgI386Helper : public VarArgHelperBase {
67726772
assert(!VAArgSize && !VAArgTLSCopy &&
67736773
"finalizeInstrumentation called twice");
67746774
IRBuilder<> IRB(MSV.FnPrologueEnd);
6775-
VAArgSize = IRB.CreateLoad(IRB.getInt64Ty(), MS.VAArgOverflowSizeTLS);
6775+
VAArgSize = IRB.CreateLoad(MS.IntptrTy, MS.VAArgOverflowSizeTLS);
67766776
Value *CopySize = VAArgSize;
67776777

67786778
if (!VAStartInstrumentationList.empty()) {
@@ -6785,7 +6785,7 @@ struct VarArgI386Helper : public VarArgHelperBase {
67856785

67866786
Value *SrcSize = IRB.CreateBinaryIntrinsic(
67876787
Intrinsic::umin, CopySize,
6788-
ConstantInt::get(IRB.getInt64Ty(), kParamTLSSize));
6788+
ConstantInt::get(MS.IntptrTy, kParamTLSSize));
67896789
IRB.CreateMemCpy(VAArgTLSCopy, kShadowTLSAlignment, MS.VAArgTLS,
67906790
kShadowTLSAlignment, SrcSize);
67916791
}
@@ -6857,7 +6857,7 @@ struct VarArgGenericHelper : public VarArgHelperBase {
68576857
assert(!VAArgSize && !VAArgTLSCopy &&
68586858
"finalizeInstrumentation called twice");
68596859
IRBuilder<> IRB(MSV.FnPrologueEnd);
6860-
VAArgSize = IRB.CreateLoad(IRB.getInt64Ty(), MS.VAArgOverflowSizeTLS);
6860+
VAArgSize = IRB.CreateLoad(MS.IntptrTy, MS.VAArgOverflowSizeTLS);
68616861
Value *CopySize = VAArgSize;
68626862

68636863
if (!VAStartInstrumentationList.empty()) {
@@ -6870,7 +6870,7 @@ struct VarArgGenericHelper : public VarArgHelperBase {
68706870

68716871
Value *SrcSize = IRB.CreateBinaryIntrinsic(
68726872
Intrinsic::umin, CopySize,
6873-
ConstantInt::get(IRB.getInt64Ty(), kParamTLSSize));
6873+
ConstantInt::get(MS.IntptrTy, kParamTLSSize));
68746874
IRB.CreateMemCpy(VAArgTLSCopy, kShadowTLSAlignment, MS.VAArgTLS,
68756875
kShadowTLSAlignment, SrcSize);
68766876
}

llvm/test/Instrumentation/MemorySanitizer/i386/vararg.ll

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,29 @@ target triple = "i386-unknown-linux-gnu"
99
define void @VaStart(ptr %s, ...) {
1010
; CHECK-LABEL: define void @VaStart(
1111
; CHECK-SAME: ptr [[S:%.*]], ...) {
12-
; CHECK-NEXT: [[TMP6:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 4
13-
; CHECK-NEXT: [[TMP4:%.*]] = alloca i8, i64 [[TMP6]], align 8
14-
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP4]], i8 0, i64 [[TMP6]], i1 false)
15-
; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP6]], i64 800)
16-
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP4]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)
12+
; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr @__msan_va_arg_overflow_size_tls, align 4
13+
; CHECK-NEXT: [[TMP5:%.*]] = alloca i8, i32 [[TMP4]], align 8
14+
; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr align 8 [[TMP5]], i8 0, i32 [[TMP4]], i1 false)
15+
; CHECK-NEXT: [[TMP3:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP4]], i32 800)
16+
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 8 [[TMP5]], ptr align 8 @__msan_va_arg_tls, i32 [[TMP3]], i1 false)
1717
; CHECK-NEXT: call void @llvm.donothing()
1818
; CHECK-NEXT: [[VL:%.*]] = alloca ptr, align 4
1919
; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[VL]] to i32
2020
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 2147483647
2121
; CHECK-NEXT: [[TMP2:%.*]] = inttoptr i32 [[TMP1]] to ptr
2222
; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr align 4 [[TMP2]], i8 0, i32 4, i1 false)
23-
; CHECK-NEXT: [[TMP9:%.*]] = ptrtoint ptr [[VL]] to i32
24-
; CHECK-NEXT: [[TMP10:%.*]] = and i32 [[TMP9]], 2147483647
25-
; CHECK-NEXT: [[TMP11:%.*]] = inttoptr i32 [[TMP10]] to ptr
26-
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP11]], i8 0, i64 4, i1 false)
23+
; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[VL]] to i32
24+
; CHECK-NEXT: [[TMP8:%.*]] = and i32 [[TMP7]], 2147483647
25+
; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i32 [[TMP8]] to ptr
26+
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 4, i1 false)
2727
; CHECK-NEXT: call void @llvm.va_start.p0(ptr [[VL]])
28-
; CHECK-NEXT: [[TMP12:%.*]] = ptrtoint ptr [[VL]] to i32
29-
; CHECK-NEXT: [[TMP13:%.*]] = inttoptr i32 [[TMP12]] to ptr
30-
; CHECK-NEXT: [[TMP14:%.*]] = load ptr, ptr [[TMP13]], align 4
31-
; CHECK-NEXT: [[TMP15:%.*]] = ptrtoint ptr [[TMP14]] to i32
32-
; CHECK-NEXT: [[TMP16:%.*]] = and i32 [[TMP15]], 2147483647
33-
; CHECK-NEXT: [[TMP17:%.*]] = inttoptr i32 [[TMP16]] to ptr
34-
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TMP17]], ptr align 4 [[TMP4]], i64 [[TMP6]], i1 false)
28+
; CHECK-NEXT: [[TMP10:%.*]] = ptrtoint ptr [[VL]] to i32
29+
; CHECK-NEXT: [[TMP11:%.*]] = inttoptr i32 [[TMP10]] to ptr
30+
; CHECK-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TMP11]], align 4
31+
; CHECK-NEXT: [[TMP13:%.*]] = ptrtoint ptr [[TMP12]] to i32
32+
; CHECK-NEXT: [[TMP14:%.*]] = and i32 [[TMP13]], 2147483647
33+
; CHECK-NEXT: [[TMP15:%.*]] = inttoptr i32 [[TMP14]] to ptr
34+
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[TMP15]], ptr align 4 [[TMP5]], i32 [[TMP4]], i1 false)
3535
; CHECK-NEXT: ret void
3636
;
3737
; KERNEL-LABEL: define void @VaStart(
@@ -44,26 +44,26 @@ define void @VaStart(ptr %s, ...) {
4444
; KERNEL-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4
4545
; KERNEL-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5
4646
; KERNEL-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6
47-
; KERNEL-NEXT: [[TMP2:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 4
48-
; KERNEL-NEXT: [[TMP3:%.*]] = alloca i8, i64 [[TMP2]], align 8
49-
; KERNEL-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 0, i64 [[TMP2]], i1 false)
50-
; KERNEL-NEXT: [[TMP4:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP2]], i64 800)
51-
; KERNEL-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP3]], ptr align 8 [[VA_ARG_SHADOW]], i64 [[TMP4]], i1 false)
47+
; KERNEL-NEXT: [[TMP2:%.*]] = load i32, ptr [[VA_ARG_OVERFLOW_SIZE]], align 4
48+
; KERNEL-NEXT: [[TMP3:%.*]] = alloca i8, i32 [[TMP2]], align 8
49+
; KERNEL-NEXT: call void @llvm.memset.p0.i32(ptr align 8 [[TMP3]], i8 0, i32 [[TMP2]], i1 false)
50+
; KERNEL-NEXT: [[TMP4:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP2]], i32 800)
51+
; KERNEL-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 8 [[TMP3]], ptr align 8 [[VA_ARG_SHADOW]], i32 [[TMP4]], i1 false)
5252
; KERNEL-NEXT: call void @llvm.donothing()
5353
; KERNEL-NEXT: [[VL:%.*]] = alloca ptr, align 4
5454
; KERNEL-NEXT: call void @__msan_unpoison_alloca(ptr [[VL]], i32 4)
55-
; KERNEL-NEXT: [[TMP7:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_1(ptr [[VL]])
56-
; KERNEL-NEXT: [[TMP8:%.*]] = extractvalue { ptr, ptr } [[TMP7]], 0
57-
; KERNEL-NEXT: [[TMP9:%.*]] = extractvalue { ptr, ptr } [[TMP7]], 1
58-
; KERNEL-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP8]], i8 0, i64 4, i1 false)
55+
; KERNEL-NEXT: [[TMP5:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_1(ptr [[VL]])
56+
; KERNEL-NEXT: [[TMP6:%.*]] = extractvalue { ptr, ptr } [[TMP5]], 0
57+
; KERNEL-NEXT: [[TMP7:%.*]] = extractvalue { ptr, ptr } [[TMP5]], 1
58+
; KERNEL-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 0, i64 4, i1 false)
5959
; KERNEL-NEXT: call void @llvm.va_start.p0(ptr [[VL]])
60-
; KERNEL-NEXT: [[TMP10:%.*]] = ptrtoint ptr [[VL]] to i32
61-
; KERNEL-NEXT: [[TMP11:%.*]] = inttoptr i32 [[TMP10]] to ptr
62-
; KERNEL-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TMP11]], align 4
63-
; KERNEL-NEXT: [[TMP13:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_1(ptr [[TMP12]])
64-
; KERNEL-NEXT: [[TMP14:%.*]] = extractvalue { ptr, ptr } [[TMP13]], 0
65-
; KERNEL-NEXT: [[TMP15:%.*]] = extractvalue { ptr, ptr } [[TMP13]], 1
66-
; KERNEL-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TMP14]], ptr align 4 [[TMP3]], i64 [[TMP2]], i1 false)
60+
; KERNEL-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[VL]] to i32
61+
; KERNEL-NEXT: [[TMP9:%.*]] = inttoptr i32 [[TMP8]] to ptr
62+
; KERNEL-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 4
63+
; KERNEL-NEXT: [[TMP11:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_1(ptr [[TMP10]])
64+
; KERNEL-NEXT: [[TMP12:%.*]] = extractvalue { ptr, ptr } [[TMP11]], 0
65+
; KERNEL-NEXT: [[TMP13:%.*]] = extractvalue { ptr, ptr } [[TMP11]], 1
66+
; KERNEL-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[TMP12]], ptr align 4 [[TMP3]], i32 [[TMP2]], i1 false)
6767
; KERNEL-NEXT: ret void
6868
;
6969
%vl = alloca ptr, align 4

0 commit comments

Comments
 (0)