diff --git a/llvm/tools/llvm-exegesis/lib/X86/Target.cpp b/llvm/tools/llvm-exegesis/lib/X86/Target.cpp index 8a498e2713b42..04e753b3e12c6 100644 --- a/llvm/tools/llvm-exegesis/lib/X86/Target.cpp +++ b/llvm/tools/llvm-exegesis/lib/X86/Target.cpp @@ -1072,6 +1072,13 @@ ExegesisX86Target::generateExitSyscall(unsigned ExitCode) const { return ExitCallCode; } +// Before kernel 4.17, Linux did not support MAP_FIXED_NOREPLACE, so if it is +// not available, simplfy define it as MAP_FIXED which performs the same +// function but does not guarantee existing mappings won't get clobbered. +#ifndef MAP_FIXED_NOREPLACE +#define MAP_FIXED_NOREPLACE MAP_FIXED +#endif + std::vector ExegesisX86Target::generateMmap(intptr_t Address, size_t Length, intptr_t FileDescriptorAddress) const { diff --git a/llvm/unittests/tools/llvm-exegesis/X86/TargetTest.cpp b/llvm/unittests/tools/llvm-exegesis/X86/TargetTest.cpp index 05879f141c59e..baee336a9f00c 100644 --- a/llvm/unittests/tools/llvm-exegesis/X86/TargetTest.cpp +++ b/llvm/unittests/tools/llvm-exegesis/X86/TargetTest.cpp @@ -620,6 +620,13 @@ TEST_F(X86Core2TargetTest, GenerateExitSyscallTest) { OpcodeIs(X86::SYSCALL))); } +// Before kernel 4.17, Linux did not support MAP_FIXED_NOREPLACE, so if it is +// not available, simplfy define it as MAP_FIXED which performs the same +// function but does not guarantee existing mappings won't get clobbered. +#ifndef MAP_FIXED_NOREPLACE +#define MAP_FIXED_NOREPLACE MAP_FIXED +#endif + TEST_F(X86Core2TargetTest, GenerateMmapTest) { EXPECT_THAT(State.getExegesisTarget().generateMmap(0x1000, 4096, 0x2000), ElementsAre(IsMovImmediate(X86::MOV64ri, X86::RDI, 0x1000),