mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
[MSan][LLVM][MIPS] Shadow and Origin offsets for MIPS
Reviewers: kcc, samsonov, petarj, eugenis Differential Revision: http://reviews.llvm.org/D6146 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226565 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d624796bc6
commit
68d992759a
@ -209,7 +209,7 @@ struct PlatformMemoryMapParams {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// i386 Linux
|
// i386 Linux
|
||||||
static const MemoryMapParams LinuxMemoryMapParams32 = {
|
static const MemoryMapParams Linux_I386_MemoryMapParams = {
|
||||||
0x000080000000, // AndMask
|
0x000080000000, // AndMask
|
||||||
0, // XorMask (not used)
|
0, // XorMask (not used)
|
||||||
0, // ShadowBase (not used)
|
0, // ShadowBase (not used)
|
||||||
@ -217,15 +217,23 @@ static const MemoryMapParams LinuxMemoryMapParams32 = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// x86_64 Linux
|
// x86_64 Linux
|
||||||
static const MemoryMapParams LinuxMemoryMapParams64 = {
|
static const MemoryMapParams Linux_X86_64_MemoryMapParams = {
|
||||||
0x400000000000, // AndMask
|
0x400000000000, // AndMask
|
||||||
0, // XorMask (not used)
|
0, // XorMask (not used)
|
||||||
0, // ShadowBase (not used)
|
0, // ShadowBase (not used)
|
||||||
0x200000000000, // OriginBase
|
0x200000000000, // OriginBase
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// mips64 Linux
|
||||||
|
static const MemoryMapParams Linux_MIPS64_MemoryMapParams = {
|
||||||
|
0x004000000000, // AndMask
|
||||||
|
0, // XorMask (not used)
|
||||||
|
0, // ShadowBase (not used)
|
||||||
|
0x002000000000, // OriginBase
|
||||||
|
};
|
||||||
|
|
||||||
// i386 FreeBSD
|
// i386 FreeBSD
|
||||||
static const MemoryMapParams FreeBSDMemoryMapParams32 = {
|
static const MemoryMapParams FreeBSD_I386_MemoryMapParams = {
|
||||||
0x000180000000, // AndMask
|
0x000180000000, // AndMask
|
||||||
0x000040000000, // XorMask
|
0x000040000000, // XorMask
|
||||||
0x000020000000, // ShadowBase
|
0x000020000000, // ShadowBase
|
||||||
@ -233,21 +241,26 @@ static const MemoryMapParams FreeBSDMemoryMapParams32 = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// x86_64 FreeBSD
|
// x86_64 FreeBSD
|
||||||
static const MemoryMapParams FreeBSDMemoryMapParams64 = {
|
static const MemoryMapParams FreeBSD_X86_64_MemoryMapParams = {
|
||||||
0xc00000000000, // AndMask
|
0xc00000000000, // AndMask
|
||||||
0x200000000000, // XorMask
|
0x200000000000, // XorMask
|
||||||
0x100000000000, // ShadowBase
|
0x100000000000, // ShadowBase
|
||||||
0x380000000000, // OriginBase
|
0x380000000000, // OriginBase
|
||||||
};
|
};
|
||||||
|
|
||||||
static const PlatformMemoryMapParams LinuxMemoryMapParams = {
|
static const PlatformMemoryMapParams Linux_X86_MemoryMapParams = {
|
||||||
&LinuxMemoryMapParams32,
|
&Linux_I386_MemoryMapParams,
|
||||||
&LinuxMemoryMapParams64,
|
&Linux_X86_64_MemoryMapParams,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const PlatformMemoryMapParams FreeBSDMemoryMapParams = {
|
static const PlatformMemoryMapParams Linux_MIPS_MemoryMapParams = {
|
||||||
&FreeBSDMemoryMapParams32,
|
NULL,
|
||||||
&FreeBSDMemoryMapParams64,
|
&Linux_MIPS64_MemoryMapParams,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const PlatformMemoryMapParams FreeBSD_X86_MemoryMapParams = {
|
||||||
|
&FreeBSD_I386_MemoryMapParams,
|
||||||
|
&FreeBSD_X86_64_MemoryMapParams,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// \brief An instrumentation pass implementing detection of uninitialized
|
/// \brief An instrumentation pass implementing detection of uninitialized
|
||||||
@ -440,26 +453,40 @@ bool MemorySanitizer::doInitialization(Module &M) {
|
|||||||
DL = &DLP->getDataLayout();
|
DL = &DLP->getDataLayout();
|
||||||
|
|
||||||
Triple TargetTriple(M.getTargetTriple());
|
Triple TargetTriple(M.getTargetTriple());
|
||||||
const PlatformMemoryMapParams *PlatformMapParams;
|
switch (TargetTriple.getOS()) {
|
||||||
if (TargetTriple.getOS() == Triple::FreeBSD)
|
case Triple::FreeBSD:
|
||||||
PlatformMapParams = &FreeBSDMemoryMapParams;
|
switch (TargetTriple.getArch()) {
|
||||||
else
|
case Triple::x86_64:
|
||||||
PlatformMapParams = &LinuxMemoryMapParams;
|
MapParams = FreeBSD_X86_MemoryMapParams.bits64;
|
||||||
|
break;
|
||||||
C = &(M.getContext());
|
case Triple::x86:
|
||||||
unsigned PtrSize = DL->getPointerSizeInBits(/* AddressSpace */0);
|
MapParams = FreeBSD_X86_MemoryMapParams.bits32;
|
||||||
switch (PtrSize) {
|
break;
|
||||||
case 64:
|
default:
|
||||||
MapParams = PlatformMapParams->bits64;
|
report_fatal_error("unsupported architecture");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 32:
|
case Triple::Linux:
|
||||||
MapParams = PlatformMapParams->bits32;
|
switch (TargetTriple.getArch()) {
|
||||||
|
case Triple::x86_64:
|
||||||
|
MapParams = Linux_X86_MemoryMapParams.bits64;
|
||||||
|
break;
|
||||||
|
case Triple::x86:
|
||||||
|
MapParams = Linux_X86_MemoryMapParams.bits32;
|
||||||
|
break;
|
||||||
|
case Triple::mips64:
|
||||||
|
case Triple::mips64el:
|
||||||
|
MapParams = Linux_MIPS_MemoryMapParams.bits64;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
report_fatal_error("unsupported architecture");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
report_fatal_error("unsupported pointer size");
|
report_fatal_error("unsupported operating system");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
C = &(M.getContext());
|
||||||
IRBuilder<> IRB(*C);
|
IRBuilder<> IRB(*C);
|
||||||
IntptrTy = IRB.getIntPtrTy(DL);
|
IntptrTy = IRB.getIntPtrTy(DL);
|
||||||
OriginTy = IRB.getInt32Ty();
|
OriginTy = IRB.getInt32Ty();
|
||||||
|
Loading…
Reference in New Issue
Block a user