From cd31e7868b3ee0f73486141498fb71959d235b25 Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Wed, 19 Jun 2019 08:59:05 +0000 Subject: [PATCH] [Sanitizers] Fix sanitizer_posix_libcdep.cc compilation on Solaris 11.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A recent build of Solaris 11.5 Beta (st_047) gained madvise(MADV_DONTDUMP) support for Linux compatibility. This broke the compiler-rt build: /vol/llvm/src/llvm/dist/projects/compiler-rt/lib/sanitizer_comm/sanitizer_posix_libcdep.cc: In function ‘bool __sanitizer::DontDumpShadowMemory(__sanitizer::uptr, __sanitizer::uptr)’: /vol/llvm/src/llvm/dist/projects/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc:81:18: error: invalid conversion from ‘void*’ to ‘caddr_t’ {aka ‘char*’} [-fpermissive] 81 | return madvise((void *)addr, length, MADV_DONTDUMP) == 0; | ^~~~~~~~~~~~ | | | void* In file included from /vol/llvm/src/llvm/dist/projects/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc:32: /usr/include/sys/mman.h:231:20: note: initializing argument 1 of ‘int madvise(caddr_t, std::size_t, int)’ 231 | extern int madvise(caddr_t, size_t, int); | ^~~~~~~ The obvious fix is to use the same solution that has already been used a couple of lines earlier: // In the default Solaris compilation environment, madvise() is declared // to take a caddr_t arg; casting it to void * results in an invalid // conversion error, so use char * instead. This allowed the compiler-rt build to finish and was tested successfully on i386-pc-solaris2.11 and x86_64-pc-linux-gnu. Differential Revision: https://reviews.llvm.org/D62892 llvm-svn: 363778 --- compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc index efe51ec2014eb..23a2f84ac887b 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc @@ -70,7 +70,7 @@ void ReleaseMemoryPagesToOS(uptr beg, uptr end) { bool NoHugePagesInRegion(uptr addr, uptr size) { #ifdef MADV_NOHUGEPAGE // May not be defined on old systems. - return madvise((void *)addr, size, MADV_NOHUGEPAGE) == 0; + return madvise((char *)addr, size, MADV_NOHUGEPAGE) == 0; #else return true; #endif // MADV_NOHUGEPAGE @@ -78,9 +78,9 @@ bool NoHugePagesInRegion(uptr addr, uptr size) { bool DontDumpShadowMemory(uptr addr, uptr length) { #if defined(MADV_DONTDUMP) - return madvise((void *)addr, length, MADV_DONTDUMP) == 0; + return madvise((char *)addr, length, MADV_DONTDUMP) == 0; #elif defined(MADV_NOCORE) - return madvise((void *)addr, length, MADV_NOCORE) == 0; + return madvise((char *)addr, length, MADV_NOCORE) == 0; #else return true; #endif // MADV_DONTDUMP