Skip to content

Commit 1ef2ac5

Browse files
committed
Refactor to use getWarningFnName
1 parent cdf5671 commit 1ef2ac5

File tree

1 file changed

+23
-18
lines changed

1 file changed

+23
-18
lines changed

llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,22 @@ MemorySanitizer::getOrInsertMsanMetadataFunction(Module &M, StringRef Name,
817817
std::forward<ArgsTy>(Args)...);
818818
}
819819

820+
StringRef getWarningFnName(bool TrackOrigins, bool Recover, bool EmbedFaultingInst) {
821+
StringRef warningFnName [2][2][2]
822+
= {
823+
{
824+
{"__msan_warning_noreturn", "__msan_warning_noreturn_instname"},
825+
{"__msan_warning", "__msan_warning_instname"}
826+
},
827+
{
828+
{"__msan_warning_with_origin_noreturn", "__msan_warning_with_origin_noreturn_instname"},
829+
{"__msan_warning_with_origin", "__msan_warning_with_origin_instname"},
830+
}
831+
};
832+
833+
return warningFnName[TrackOrigins][Recover][EmbedFaultingInst];
834+
}
835+
820836
/// Create KMSAN API callbacks.
821837
void MemorySanitizer::createKernelApi(Module &M, const TargetLibraryInfo &TLI) {
822838
IRBuilder<> IRB(*C);
@@ -831,11 +847,9 @@ void MemorySanitizer::createKernelApi(Module &M, const TargetLibraryInfo &TLI) {
831847
VAArgOverflowSizeTLS = nullptr;
832848

833849
SmallVector<Type *, 4> ArgsTy = {IRB.getInt32Ty()};
834-
StringRef FnName = "__msan_warning";
835-
if (ClEmbedFaultingInst != MSanEmbedFaultingInstructionMode::None) {
850+
StringRef FnName = getWarningFnName(/*TrackOrigins=*/ false, /*Recover=*/ true, ClEmbedFaultingInst != MSanEmbedFaultingInstructionMode::None);
851+
if (ClEmbedFaultingInst != MSanEmbedFaultingInstructionMode::None)
836852
ArgsTy.push_back(IRB.getPtrTy());
837-
FnName = "__msan_warning_instname";
838-
}
839853
WarningFn = M.getOrInsertFunction(
840854
FnName, FunctionType::get(IRB.getVoidTy(), ArgsTy, false),
841855
TLI.getAttrList(C, {0}, /*Signed=*/false));
@@ -893,27 +907,18 @@ void MemorySanitizer::createUserspaceApi(Module &M,
893907
// Create the callback.
894908
// FIXME: this function should have "Cold" calling conv,
895909
// which is not yet implemented.
910+
StringRef WarningFnName = getWarningFnName(TrackOrigins, Recover, ClEmbedFaultingInst != MSanEmbedFaultingInstructionMode::None);
911+
SmallVector<Type *, 4> ArgsTy = {};
896912
if (TrackOrigins) {
897-
SmallVector<Type *, 4> ArgsTy = {IRB.getInt32Ty()};
898-
StringRef WarningFnName = Recover ? "__msan_warning_with_origin"
899-
: "__msan_warning_with_origin_noreturn";
900-
if (ClEmbedFaultingInst != MSanEmbedFaultingInstructionMode::None) {
913+
ArgsTy.push_back (IRB.getInt32Ty());
914+
if (ClEmbedFaultingInst != MSanEmbedFaultingInstructionMode::None)
901915
ArgsTy.push_back(IRB.getPtrTy());
902-
WarningFnName = Recover ? "__msan_warning_with_origin_instname"
903-
: "__msan_warning_with_origin_noreturn_instname";
904-
}
905916
WarningFn = M.getOrInsertFunction(
906917
WarningFnName, FunctionType::get(IRB.getVoidTy(), ArgsTy, false),
907918
TLI.getAttrList(C, {0}, /*Signed=*/false));
908919
} else {
909-
SmallVector<Type *, 4> ArgsTy = {};
910-
StringRef WarningFnName =
911-
Recover ? "__msan_warning" : "__msan_warning_noreturn";
912-
if (ClEmbedFaultingInst != MSanEmbedFaultingInstructionMode::None) {
920+
if (ClEmbedFaultingInst != MSanEmbedFaultingInstructionMode::None)
913921
ArgsTy.push_back(IRB.getPtrTy());
914-
WarningFnName = Recover ? "__msan_warning_instname"
915-
: "__msan_warning_noreturn_instname";
916-
}
917922
WarningFn = M.getOrInsertFunction(
918923
WarningFnName, FunctionType::get(IRB.getVoidTy(), ArgsTy, false));
919924
}

0 commit comments

Comments
 (0)