xref: /freebsd-src/contrib/llvm-project/compiler-rt/lib/memprof/memprof_mibmap.h (revision 1fd87a682ad7442327078e1eeb63edc4258f9815)
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