[compiler-rt] r178000 - [libsanitizer] Unmapping the old cache partially invalidates the memory layout, so add
Alexander Potapenko
glider at google.com
Tue Mar 26 06:35:54 PDT 2013
Fixed in r178012.
On Tue, Mar 26, 2013 at 3:37 PM, Alexander Potapenko <glider at google.com> wrote:
> 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
--
Alexander Potapenko
Software Engineer
Google Moscow
More information about the llvm-commits
mailing list