[llvm-commits] [compiler-rt] r169593 - /compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h
Alexey Samsonov
samsonov at google.com
Fri Dec 7 09:28:28 PST 2012
On Fri, Dec 7, 2012 at 1:40 AM, Kostya Serebryany <kcc at google.com> wrote:
> Author: kcc
> Date: Fri Dec 7 03:40:17 2012
> New Revision: 169593
>
> URL: http://llvm.org/viewvc/llvm-project?rev=169593&view=rev
> Log:
> [sanitizer] fix the build on ancient gcc which has stricter rules about
> what can be put on TLS. Long term, we absolutely must build the run-times
> with the fresh target clang
>
If we only use clang, how would we know that gcc-build is broken (if we're
still interested in it)?
>
> Modified:
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h?rev=169593&r1=169592&r2=169593&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h Fri Dec
> 7 03:40:17 2012
> @@ -97,25 +97,29 @@
> AllocatorListNode *next;
> };
>
> -struct AllocatorFreeList: IntrusiveList<AllocatorListNode> {
> - // Move at most max_count chunks to other_free_list.
> - void BulkAllocate(uptr max_count, AllocatorFreeList *other_free_list) {
> - CHECK(!empty());
> - CHECK(other_free_list->empty());
> - if (size() <= max_count) {
> - other_free_list->append_front(this);
> - CHECK(empty());
> - } else {
> - for (uptr i = 0; i < max_count; i++) {
> - AllocatorListNode *node = front();
> - pop_front();
> - other_free_list->push_front(node);
> - }
> - CHECK(!empty());
> +typedef IntrusiveList<AllocatorListNode> AllocatorFreeList;
> +
> +// Move at most max_count chunks from allocate_from to allocate_to.
> +// This function is better be a method of AllocatorFreeList, but we can't
> +// inherit it from IntrusiveList as the ancient gcc complains about
> non-PODness.
> +static inline void BulkMove(uptr max_count,
> + AllocatorFreeList *allocate_from,
> + AllocatorFreeList *allocate_to) {
> + CHECK(!allocate_from->empty());
> + CHECK(allocate_to->empty());
> + if (allocate_from->size() <= max_count) {
> + allocate_to->append_front(allocate_from);
> + CHECK(allocate_from->empty());
> + } else {
> + for (uptr i = 0; i < max_count; i++) {
> + AllocatorListNode *node = allocate_from->front();
> + allocate_from->pop_front();
> + allocate_to->push_front(node);
> }
> - CHECK(!other_free_list->empty());
> + CHECK(!allocate_from->empty());
> }
> -};
> + CHECK(!allocate_to->empty());
> +}
>
> // SizeClassAllocator64 -- allocator for 64-bit address space.
> //
> @@ -164,8 +168,7 @@
> if (region->free_list.empty()) {
> PopulateFreeList(class_id, region);
> }
> - region->free_list.BulkAllocate(
> - SizeClassMap::MaxCached(class_id), free_list);
> + BulkMove(SizeClassMap::MaxCached(class_id), ®ion->free_list,
> free_list);
> }
>
> // Swallow the entire free_list for the given class_id.
> @@ -371,7 +374,7 @@
> SpinMutexLock l(&sci->mutex);
> EnsureSizeClassHasAvailableChunks(sci, class_id);
> CHECK(!sci->free_list.empty());
> - sci->free_list.BulkAllocate(SizeClassMap::MaxCached(class_id),
> free_list);
> + BulkMove(SizeClassMap::MaxCached(class_id), &sci->free_list,
> free_list);
> }
>
> // Swallow the entire free_list for the given class_id.
> @@ -424,6 +427,7 @@
>
> typedef SizeClassMap SizeClassMapT;
> static const uptr kNumClasses = SizeClassMap::kNumClasses; // 2^k <=
> 128
> +
> private:
> static const uptr kRegionSizeLog = SANITIZER_WORDSIZE == 64 ? 24 : 20;
> static const uptr kRegionSize = 1 << kRegionSizeLog;
> @@ -433,7 +437,7 @@
> struct SizeClassInfo {
> SpinMutex mutex;
> AllocatorFreeList free_list;
> - char padding[kCacheLineSize - sizeof(uptr) - sizeof
> (AllocatorFreeList)];
> + char padding[kCacheLineSize - sizeof(uptr) -
> sizeof(AllocatorFreeList)];
> };
> COMPILER_CHECK(sizeof(SizeClassInfo) == kCacheLineSize);
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
Alexey Samsonov, MSK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121207/5fd54c59/attachment.html>
More information about the llvm-commits
mailing list