Skip to content

Commit 2713998

Browse files
authored
[MSan] Change overflow_size_tls type to IntPtrTy (#117689)
As discussed in #109284 (comment): Changed `__msan_va_arg_overflow_size_tls` type from `Int64Ty` to `IntPtrTy`.
1 parent 2721d50 commit 2713998

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++) {
@@ -6496,7 +6496,7 @@ struct VarArgPowerPCHelper : public VarArgHelperBase {
64966496
assert(!VAArgSize && !VAArgTLSCopy &&
64976497
"finalizeInstrumentation called twice");
64986498
IRBuilder<> IRB(MSV.FnPrologueEnd);
6499-
VAArgSize = IRB.CreateLoad(IRB.getInt64Ty(), MS.VAArgOverflowSizeTLS);
6499+
VAArgSize = IRB.CreateLoad(MS.IntptrTy, MS.VAArgOverflowSizeTLS);
65006500
Value *CopySize = VAArgSize;
65016501

65026502
if (!VAStartInstrumentationList.empty()) {
@@ -6510,7 +6510,7 @@ struct VarArgPowerPCHelper : public VarArgHelperBase {
65106510

65116511
Value *SrcSize = IRB.CreateBinaryIntrinsic(
65126512
Intrinsic::umin, CopySize,
6513-
ConstantInt::get(IRB.getInt64Ty(), kParamTLSSize));
6513+
ConstantInt::get(MS.IntptrTy, kParamTLSSize));
65146514
IRB.CreateMemCpy(VAArgTLSCopy, kShadowTLSAlignment, MS.VAArgTLS,
65156515
kShadowTLSAlignment, SrcSize);
65166516
}
@@ -6893,7 +6893,7 @@ struct VarArgI386Helper : public VarArgHelperBase {
68936893
assert(!VAArgSize && !VAArgTLSCopy &&
68946894
"finalizeInstrumentation called twice");
68956895
IRBuilder<> IRB(MSV.FnPrologueEnd);
6896-
VAArgSize = IRB.CreateLoad(IRB.getInt64Ty(), MS.VAArgOverflowSizeTLS);
6896+
VAArgSize = IRB.CreateLoad(MS.IntptrTy, MS.VAArgOverflowSizeTLS);
68976897
Value *CopySize = VAArgSize;
68986898

68996899
if (!VAStartInstrumentationList.empty()) {
@@ -6906,7 +6906,7 @@ struct VarArgI386Helper : public VarArgHelperBase {
69066906

69076907
Value *SrcSize = IRB.CreateBinaryIntrinsic(
69086908
Intrinsic::umin, CopySize,
6909-
ConstantInt::get(IRB.getInt64Ty(), kParamTLSSize));
6909+
ConstantInt::get(MS.IntptrTy, kParamTLSSize));
69106910
IRB.CreateMemCpy(VAArgTLSCopy, kShadowTLSAlignment, MS.VAArgTLS,
69116911
kShadowTLSAlignment, SrcSize);
69126912
}
@@ -6978,7 +6978,7 @@ struct VarArgGenericHelper : public VarArgHelperBase {
69786978
assert(!VAArgSize && !VAArgTLSCopy &&
69796979
"finalizeInstrumentation called twice");
69806980
IRBuilder<> IRB(MSV.FnPrologueEnd);
6981-
VAArgSize = IRB.CreateLoad(IRB.getInt64Ty(), MS.VAArgOverflowSizeTLS);
6981+
VAArgSize = IRB.CreateLoad(MS.IntptrTy, MS.VAArgOverflowSizeTLS);
69826982
Value *CopySize = VAArgSize;
69836983

69846984
if (!VAStartInstrumentationList.empty()) {
@@ -6991,7 +6991,7 @@ struct VarArgGenericHelper : public VarArgHelperBase {
69916991

69926992
Value *SrcSize = IRB.CreateBinaryIntrinsic(
69936993
Intrinsic::umin, CopySize,
6994-
ConstantInt::get(IRB.getInt64Ty(), kParamTLSSize));
6994+
ConstantInt::get(MS.IntptrTy, kParamTLSSize));
69956995
IRB.CreateMemCpy(VAArgTLSCopy, kShadowTLSAlignment, MS.VAArgTLS,
69966996
kShadowTLSAlignment, SrcSize);
69976997
}

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)