@@ -556,10 +556,10 @@ class MemorySanitizer {
556
556
friend struct MemorySanitizerVisitor ;
557
557
friend struct VarArgHelperBase ;
558
558
friend struct VarArgAMD64Helper ;
559
- friend struct VarArgMIPS64Helper ;
560
559
friend struct VarArgAArch64Helper ;
561
- friend struct VarArgPowerPC64Helper ;
560
+ friend struct VarArgPowerPCHelper ;
562
561
friend struct VarArgSystemZHelper ;
562
+ friend struct VarArgGenericHelper ;
563
563
564
564
void initializeModule (Module &M);
565
565
void initializeCallbacks (Module &M, const TargetLibraryInfo &TLI);
@@ -5342,31 +5342,29 @@ struct VarArgAMD64Helper : public VarArgHelperBase {
5342
5342
}
5343
5343
};
5344
5344
5345
- // / MIPS64 -specific implementation of VarArgHelper.
5345
+ // / MIPS -specific implementation of VarArgHelper.
5346
5346
// / NOTE: This is also used for LoongArch64.
5347
- struct VarArgMIPS64Helper : public VarArgHelperBase {
5347
+ struct VarArgGenericHelper : public VarArgHelperBase {
5348
5348
AllocaInst *VAArgTLSCopy = nullptr ;
5349
5349
Value *VAArgSize = nullptr ;
5350
5350
5351
- VarArgMIPS64Helper (Function &F, MemorySanitizer &MS,
5352
- MemorySanitizerVisitor &MSV)
5353
- : VarArgHelperBase(F, MS, MSV, /* VAListTagSize= */ 8 ) {}
5351
+ VarArgGenericHelper (Function &F, MemorySanitizer &MS,
5352
+ MemorySanitizerVisitor &MSV, const unsigned VAListTagSize )
5353
+ : VarArgHelperBase(F, MS, MSV, VAListTagSize) {}
5354
5354
5355
5355
void visitCallBase (CallBase &CB, IRBuilder<> &IRB) override {
5356
5356
unsigned VAArgOffset = 0 ;
5357
5357
const DataLayout &DL = F.getDataLayout ();
5358
5358
for (Value *A :
5359
5359
llvm::drop_begin (CB.args (), CB.getFunctionType ()->getNumParams ())) {
5360
- Triple TargetTriple (F.getParent ()->getTargetTriple ());
5361
- Value *Base;
5362
5360
uint64_t ArgSize = DL.getTypeAllocSize (A->getType ());
5363
- if (TargetTriple. getArch () == Triple::mips64 ) {
5361
+ if (DL. isBigEndian () ) {
5364
5362
// Adjusting the shadow for argument with size < 8 to match the
5365
5363
// placement of bits in big endian system
5366
5364
if (ArgSize < 8 )
5367
5365
VAArgOffset += (8 - ArgSize);
5368
5366
}
5369
- Base = getShadowPtrForVAArgument (IRB, VAArgOffset, ArgSize);
5367
+ Value * Base = getShadowPtrForVAArgument (IRB, VAArgOffset, ArgSize);
5370
5368
VAArgOffset += ArgSize;
5371
5369
VAArgOffset = alignTo (VAArgOffset, 8 );
5372
5370
if (!Base)
@@ -5665,14 +5663,14 @@ struct VarArgAArch64Helper : public VarArgHelperBase {
5665
5663
}
5666
5664
};
5667
5665
5668
- // / PowerPC64 -specific implementation of VarArgHelper.
5669
- struct VarArgPowerPC64Helper : public VarArgHelperBase {
5666
+ // / PowerPC -specific implementation of VarArgHelper.
5667
+ struct VarArgPowerPCHelper : public VarArgHelperBase {
5670
5668
AllocaInst *VAArgTLSCopy = nullptr ;
5671
5669
Value *VAArgSize = nullptr ;
5672
5670
5673
- VarArgPowerPC64Helper (Function &F, MemorySanitizer &MS,
5674
- MemorySanitizerVisitor &MSV)
5675
- : VarArgHelperBase(F, MS, MSV, /* VAListTagSize= */ 8 ) {}
5671
+ VarArgPowerPCHelper (Function &F, MemorySanitizer &MS,
5672
+ MemorySanitizerVisitor &MSV, unsigned VAListTagSize )
5673
+ : VarArgHelperBase(F, MS, MSV, VAListTagSize) {}
5676
5674
5677
5675
void visitCallBase (CallBase &CB, IRBuilder<> &IRB) override {
5678
5676
// For PowerPC, we need to deal with alignment of stack arguments -
@@ -6086,7 +6084,8 @@ struct VarArgSystemZHelper : public VarArgHelperBase {
6086
6084
6087
6085
// Loongarch64 is not a MIPS, but the current vargs calling convention matches
6088
6086
// the MIPS.
6089
- using VarArgLoongArch64Helper = VarArgMIPS64Helper;
6087
+ using VarArgMIPSHelper = VarArgGenericHelper;
6088
+ using VarArgLoongArch64Helper = VarArgGenericHelper;
6090
6089
6091
6090
// / A no-op implementation of VarArgHelper.
6092
6091
struct VarArgNoOpHelper : public VarArgHelper {
@@ -6119,13 +6118,14 @@ static VarArgHelper *CreateVarArgHelper(Function &Func, MemorySanitizer &Msan,
6119
6118
return new VarArgSystemZHelper (Func, Msan, Visitor);
6120
6119
6121
6120
if (TargetTriple.isPPC64 ())
6122
- return new VarArgPowerPC64Helper (Func, Msan, Visitor);
6121
+ return new VarArgPowerPCHelper (Func, Msan, Visitor, /* VAListTagSize= */ 8 );
6123
6122
6124
6123
if (TargetTriple.isMIPS64 ())
6125
- return new VarArgMIPS64Helper (Func, Msan, Visitor);
6124
+ return new VarArgMIPSHelper (Func, Msan, Visitor, /* VAListTagSize= */ 8 );
6126
6125
6127
6126
if (TargetTriple.isLoongArch64 ())
6128
- return new VarArgLoongArch64Helper (Func, Msan, Visitor);
6127
+ return new VarArgLoongArch64Helper (Func, Msan, Visitor,
6128
+ /* VAListTagSize=*/ 8 );
6129
6129
6130
6130
return new VarArgNoOpHelper (Func, Msan, Visitor);
6131
6131
}
0 commit comments