1349cc55cSDimitry Andric #ifndef MEMPROF_MIBMAP_H_ 2349cc55cSDimitry Andric #define MEMPROF_MIBMAP_H_ 3349cc55cSDimitry Andric 4*1fd87a68SDimitry Andric #include <stdint.h> 5*1fd87a68SDimitry Andric 6*1fd87a68SDimitry Andric #include "profile/MemProfData.inc" 7349cc55cSDimitry Andric #include "sanitizer_common/sanitizer_addrhashmap.h" 8349cc55cSDimitry Andric #include "sanitizer_common/sanitizer_mutex.h" 9349cc55cSDimitry Andric 10349cc55cSDimitry Andric namespace __memprof { 11349cc55cSDimitry Andric 12349cc55cSDimitry Andric struct LockedMemInfoBlock { 13349cc55cSDimitry Andric __sanitizer::StaticSpinMutex mutex; 14*1fd87a68SDimitry Andric ::llvm::memprof::MemInfoBlock mib; 15349cc55cSDimitry Andric }; 16349cc55cSDimitry Andric 17349cc55cSDimitry Andric // The MIB map stores a mapping from stack ids to MemInfoBlocks. 18349cc55cSDimitry Andric typedef __sanitizer::AddrHashMap<LockedMemInfoBlock *, 200003> MIBMapTy; 19349cc55cSDimitry Andric 20349cc55cSDimitry Andric // Insert a new MemInfoBlock or merge with an existing block identified by the 21349cc55cSDimitry Andric // stack id. 22*1fd87a68SDimitry Andric void InsertOrMerge(const uptr Id, const ::llvm::memprof::MemInfoBlock &Block, 23*1fd87a68SDimitry Andric MIBMapTy &Map); 24349cc55cSDimitry Andric 25349cc55cSDimitry Andric } // namespace __memprof 26349cc55cSDimitry Andric 27349cc55cSDimitry Andric #endif // MEMPROF_MIBMAP_H_ 28