[compiler-rt] r178000 - [libsanitizer] Unmapping the old cache partially invalidates the memory layout, so add
Alexander Potapenko
glider at google.com
Tue Mar 26 04:37:48 PDT 2013
Thanks! Taking a look.
On Tue, Mar 26, 2013 at 3:36 PM, Alexey Samsonov <samsonov at google.com> wrote:
> Windows bot barks:
>
> ../sanitizer_common/sanitizer_stacktrace.cc(67) : error C2664:
> '__sanitizer::MemoryMappingLayout::MemoryMappingLayout(const
> __sanitizer::MemoryMappingLayout &)' : cannot convert parameter 1 from
> 'bool' to 'const __sanitizer::MemoryMappingLayout &'
> Reason: cannot convert from 'bool' to 'const
> __sanitizer::MemoryMappingLayout'
> No constructor could take the source type, or constructor overload
> resolution was ambiguous
>
>
>
> On Tue, Mar 26, 2013 at 2:34 PM, Alexander Potapenko <glider at google.com>
> wrote:
>>
>> Author: glider
>> Date: Tue Mar 26 05:34:37 2013
>> New Revision: 178000
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=178000&view=rev
>> Log:
>> [libsanitizer] Unmapping the old cache partially invalidates the memory
>> layout, so add
>> a flag to skip cache update for cases when that's unacceptable (e.g.
>> lsan).
>>
>> Patch by Sergey Matveev (earthdok at google.com)
>>
>>
>> Modified:
>> compiler-rt/trunk/lib/msan/msan.cc
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps.h
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
>> compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc
>>
>> Modified: compiler-rt/trunk/lib/msan/msan.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.cc?rev=178000&r1=177999&r2=178000&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/msan/msan.cc (original)
>> +++ compiler-rt/trunk/lib/msan/msan.cc Tue Mar 26 05:34:37 2013
>> @@ -70,7 +70,7 @@ namespace __msan {
>>
>> static bool IsRunningUnderDr() {
>> bool result = false;
>> - MemoryMappingLayout proc_maps;
>> + MemoryMappingLayout proc_maps(/*cache_enabled*/true);
>> const sptr kBufSize = 4095;
>> char *filename = (char*)MmapOrDie(kBufSize, __FUNCTION__);
>> while (proc_maps.Next(/* start */0, /* end */0, /* file_offset */0,
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=178000&r1=177999&r2=178000&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc Tue Mar 26
>> 05:34:37 2013
>> @@ -200,7 +200,7 @@ void GetThreadStackTopAndBottom(bool at_
>> CHECK_EQ(getrlimit(RLIMIT_STACK, &rl), 0);
>>
>> // Find the mapping that contains a stack variable.
>> - MemoryMappingLayout proc_maps;
>> + MemoryMappingLayout proc_maps(/*cache_enabled*/true);
>> uptr start, end, offset;
>> uptr prev_end = 0;
>> while (proc_maps.Next(&start, &end, &offset, 0, 0, /* protection
>> */0)) {
>> @@ -341,18 +341,22 @@ void PrepareForSandboxing() {
>> ProcSelfMapsBuff MemoryMappingLayout::cached_proc_self_maps_;
>> StaticSpinMutex MemoryMappingLayout::cache_lock_; // Linker initialized.
>>
>> -MemoryMappingLayout::MemoryMappingLayout() {
>> +MemoryMappingLayout::MemoryMappingLayout(bool cache_enabled) {
>> proc_self_maps_.len =
>> ReadFileToBuffer("/proc/self/maps", &proc_self_maps_.data,
>> &proc_self_maps_.mmaped_size, 1 << 26);
>> - if (proc_self_maps_.mmaped_size == 0) {
>> - LoadFromCache();
>> - CHECK_GT(proc_self_maps_.len, 0);
>> + if (cache_enabled) {
>> + if (proc_self_maps_.mmaped_size == 0) {
>> + LoadFromCache();
>> + CHECK_GT(proc_self_maps_.len, 0);
>> + }
>> + } else {
>> + CHECK_GT(proc_self_maps_.mmaped_size, 0);
>> }
>> - // internal_write(2, proc_self_maps_.data, proc_self_maps_.len);
>> Reset();
>> // FIXME: in the future we may want to cache the mappings on demand
>> only.
>> - CacheMemoryMappings();
>> + if (cache_enabled)
>> + CacheMemoryMappings();
>> }
>>
>> MemoryMappingLayout::~MemoryMappingLayout() {
>> @@ -643,7 +647,6 @@ int internal_sigaltstack(const struct si
>> return syscall(__NR_sigaltstack, ss, oss);
>> }
>>
>> -
>> // ThreadLister implementation.
>> ThreadLister::ThreadLister(int pid)
>> : pid_(pid),
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc?rev=178000&r1=177999&r2=178000&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc Tue Mar 26
>> 05:34:37 2013
>> @@ -165,7 +165,7 @@ void PrepareForSandboxing() {
>>
>> // ----------------- sanitizer_procmaps.h
>>
>> -MemoryMappingLayout::MemoryMappingLayout() {
>> +MemoryMappingLayout::MemoryMappingLayout(bool cache_enabled) {
>> Reset();
>> }
>>
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc?rev=178000&r1=177999&r2=178000&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc Tue Mar 26
>> 05:34:37 2013
>> @@ -151,11 +151,11 @@ static inline bool IntervalsAreSeparate(
>> // several worker threads on Mac, which aren't expected to map big chunks
>> of
>> // memory).
>> bool MemoryRangeIsAvailable(uptr range_start, uptr range_end) {
>> - MemoryMappingLayout procmaps;
>> + MemoryMappingLayout proc_maps(/*cache_enabled*/true);
>> uptr start, end;
>> - while (procmaps.Next(&start, &end,
>> - /*offset*/0, /*filename*/0, /*filename_size*/0,
>> - /*protection*/0)) {
>> + while (proc_maps.Next(&start, &end,
>> + /*offset*/0, /*filename*/0, /*filename_size*/0,
>> + /*protection*/0)) {
>> if (!IntervalsAreSeparate(start, end, range_start, range_end))
>> return false;
>> }
>> @@ -163,7 +163,7 @@ bool MemoryRangeIsAvailable(uptr range_s
>> }
>>
>> void DumpProcessMap() {
>> - MemoryMappingLayout proc_maps;
>> + MemoryMappingLayout proc_maps(/*cache_enabled*/true);
>> uptr start, end;
>> const sptr kBufSize = 4095;
>> char *filename = (char*)MmapOrDie(kBufSize, __FUNCTION__);
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps.h?rev=178000&r1=177999&r2=178000&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps.h (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps.h Tue Mar 26
>> 05:34:37 2013
>> @@ -41,7 +41,7 @@ struct ProcSelfMapsBuff {
>>
>> class MemoryMappingLayout {
>> public:
>> - MemoryMappingLayout();
>> + explicit MemoryMappingLayout(bool cache_enabled);
>> bool Next(uptr *start, uptr *end, uptr *offset,
>> char filename[], uptr filename_size, uptr *protection);
>> void Reset();
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc?rev=178000&r1=177999&r2=178000&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
>> (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc Tue Mar
>> 26 05:34:37 2013
>> @@ -64,7 +64,7 @@ static void PrintModuleAndOffset(const c
>> void StackTrace::PrintStack(const uptr *addr, uptr size,
>> bool symbolize, const char
>> *strip_file_prefix,
>> SymbolizeCallback symbolize_callback ) {
>> - MemoryMappingLayout proc_maps;
>> + MemoryMappingLayout proc_maps(/*cache_enabled*/true);
>> InternalScopedBuffer<char> buff(GetPageSizeCached() * 2);
>> InternalScopedBuffer<AddressInfo> addr_frames(64);
>> uptr frame_num = 0;
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc?rev=178000&r1=177999&r2=178000&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc Tue Mar 26
>> 05:34:37 2013
>> @@ -198,7 +198,7 @@ static void MapRodata() {
>> return;
>> }
>> // Map the file into shadow of .rodata sections.
>> - MemoryMappingLayout proc_maps;
>> + MemoryMappingLayout proc_maps(/*cache_enabled*/true);
>> uptr start, end, offset, prot;
>> char name[128];
>> while (proc_maps.Next(&start, &end, &offset, name, ARRAY_SIZE(name),
>> &prot)) {
>> @@ -257,7 +257,7 @@ static uptr g_data_end;
>> #ifndef TSAN_GO
>> static void CheckPIE() {
>> // Ensure that the binary is indeed compiled with -pie.
>> - MemoryMappingLayout proc_maps;
>> + MemoryMappingLayout proc_maps(true);
>> uptr start, end;
>> if (proc_maps.Next(&start, &end,
>> /*offset*/0, /*filename*/0, /*filename_size*/0,
>> @@ -274,7 +274,7 @@ static void CheckPIE() {
>> }
>>
>> static void InitDataSeg() {
>> - MemoryMappingLayout proc_maps;
>> + MemoryMappingLayout proc_maps(true);
>> uptr start, end, offset;
>> char name[128];
>> bool prev_is_data = false;
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
>
>
> --
> Alexey Samsonov, MSK
--
Alexander Potapenko
Software Engineer
Google Moscow
More information about the llvm-commits
mailing list