Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(782)

Side by Side Diff: Source/platform/heap/ThreadState.h

Issue 141713008: Use new ASAN APIs for scanning ASAN fake stacks during garbage collection. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase and disable strict finalization checking. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/platform/heap/Heap.cpp ('k') | Source/platform/heap/ThreadState.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 PersistentNode* roots() const { return m_persistents.get(); } 471 PersistentNode* roots() const { return m_persistents.get(); }
472 472
473 // List of global persistent roots not owned by any particular thread. 473 // List of global persistent roots not owned by any particular thread.
474 // globalRootsMutex must be acquired before any modifications. 474 // globalRootsMutex must be acquired before any modifications.
475 static PersistentNode* globalRoots(); 475 static PersistentNode* globalRoots();
476 static Mutex& globalRootsMutex(); 476 static Mutex& globalRootsMutex();
477 477
478 // Visit local thread stack and trace all pointers conservatively. 478 // Visit local thread stack and trace all pointers conservatively.
479 void visitStack(Visitor*); 479 void visitStack(Visitor*);
480 480
481 // Visit the asan fake stack frame corresponding to a slot on the
482 // real machine stack if there is one.
483 void visitAsanFakeStackForPointer(Visitor*, Address);
484
481 // Visit all persistents allocated on this thread. 485 // Visit all persistents allocated on this thread.
482 void visitPersistents(Visitor*); 486 void visitPersistents(Visitor*);
483 487
484 // Checks a given address and if a pointer into the oilpan heap marks 488 // Checks a given address and if a pointer into the oilpan heap marks
485 // the object to which it points. 489 // the object to which it points.
486 bool checkAndMarkPointer(Visitor*, Address); 490 bool checkAndMarkPointer(Visitor*, Address);
487 491
488 void pushWeakObjectPointerCallback(void*, WeakPointerCallback); 492 void pushWeakObjectPointerCallback(void*, WeakPointerCallback);
489 bool popAndInvokeWeakPointerCallback(Visitor*); 493 bool popAndInvokeWeakPointerCallback(Visitor*);
490 494
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 bool m_inGC; 562 bool m_inGC;
559 BaseHeap* m_heaps[NumberOfHeaps]; 563 BaseHeap* m_heaps[NumberOfHeaps];
560 OwnPtr<HeapContainsCache> m_heapContainsCache; 564 OwnPtr<HeapContainsCache> m_heapContainsCache;
561 HeapStats m_stats; 565 HeapStats m_stats;
562 HeapStats m_statsAfterLastGC; 566 HeapStats m_statsAfterLastGC;
563 567
564 Vector<OwnPtr<CleanupTask> > m_cleanupTasks; 568 Vector<OwnPtr<CleanupTask> > m_cleanupTasks;
565 bool m_isCleaningUp; 569 bool m_isCleaningUp;
566 570
567 CallbackStack* m_weakCallbackStack; 571 CallbackStack* m_weakCallbackStack;
572
573 #if defined(ADDRESS_SANITIZER) && !OS(WIN)
574 void* m_asanFakeStack;
575 #endif
568 }; 576 };
569 577
570 template<ThreadAffinity affinity> class ThreadStateFor; 578 template<ThreadAffinity affinity> class ThreadStateFor;
571 579
572 template<> class ThreadStateFor<MainThreadOnly> { 580 template<> class ThreadStateFor<MainThreadOnly> {
573 public: 581 public:
574 static ThreadState* state() 582 static ThreadState* state()
575 { 583 {
576 // This specialization must only be used from the main thread. 584 // This specialization must only be used from the main thread.
577 ASSERT(ThreadState::isMainThread()); 585 ASSERT(ThreadState::isMainThread());
578 return ThreadState::mainThreadState(); 586 return ThreadState::mainThreadState();
579 } 587 }
580 }; 588 };
581 589
582 template<> class ThreadStateFor<AnyThread> { 590 template<> class ThreadStateFor<AnyThread> {
583 public: 591 public:
584 static ThreadState* state() { return ThreadState::current(); } 592 static ThreadState* state() { return ThreadState::current(); }
585 }; 593 };
586 594
587 } 595 }
588 596
589 #endif // ThreadState_h 597 #endif // ThreadState_h
OLDNEW
« no previous file with comments | « Source/platform/heap/Heap.cpp ('k') | Source/platform/heap/ThreadState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698