diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Support/Unix/Path.inc | 19 | 
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/Support/Unix/Path.inc b/llvm/lib/Support/Unix/Path.inc index 56fa01ab512..629a04b6c5b 100644 --- a/llvm/lib/Support/Unix/Path.inc +++ b/llvm/lib/Support/Unix/Path.inc @@ -551,6 +551,25 @@ std::error_code mapped_file_region::init(int FD, uint64_t Offset,    int flags = (Mode == readwrite) ? MAP_SHARED : MAP_PRIVATE;    int prot = (Mode == readonly) ? PROT_READ : (PROT_READ | PROT_WRITE); +#if defined(__APPLE__) +  //---------------------------------------------------------------------- +  // Newer versions of MacOSX have a flag that will allow us to read from +  // binaries whose code signature is invalid without crashing by using +  // the MAP_RESILIENT_CODESIGN flag. Also if a file from removable media +  // is mapped we can avoid crashing and return zeroes to any pages we try +  // to read if the media becomes unavailable by using the +  // MAP_RESILIENT_MEDIA flag.  These flags are only usable when mapping +  // with PROT_READ, so take care not to specify them otherwise. +  //---------------------------------------------------------------------- +  if (Mode == readonly) { +#if defined(MAP_RESILIENT_CODESIGN) +    flags |= MAP_RESILIENT_CODESIGN; +#endif +#if defined(MAP_RESILIENT_MEDIA) +    flags |= MAP_RESILIENT_MEDIA; +#endif +  } +#endif // #if defined (__APPLE__)    Mapping = ::mmap(nullptr, Size, prot, flags, FD, Offset);    if (Mapping == MAP_FAILED)  | 

