sanitizer_common: make parsing of smaps testable (NFC)

Move parsing of /proc/self/smaps into a separate function
so that it can be tested.

Depends on D112788.

Reviewed By: melver

Differential Revision: https://reviews.llvm.org/D112789
This commit is contained in:
Dmitry Vyukov 2021-10-29 10:23:41 +02:00
parent a871c34e8d
commit d4602f759a
2 changed files with 8 additions and 1 deletions

View File

@ -198,6 +198,8 @@ typedef void (*fill_profile_f)(uptr start, uptr rss, bool file,
// |cb| is a tool-specific callback that fills the |stats| array containing
// |stats_size| elements.
void GetMemoryProfile(fill_profile_f cb, uptr *stats, uptr stats_size);
void ParseUnixMemoryProfile(fill_profile_f cb, uptr *stats, uptr stats_size,
const char *smaps, uptr smaps_len);
// Simple low-level (mmap-based) allocator for internal use. Doesn't have
// constructor, so all instances of LowLevelAllocator should be

View File

@ -151,6 +151,12 @@ void GetMemoryProfile(fill_profile_f cb, uptr *stats, uptr stats_size) {
uptr smaps_len = 0;
if (!ReadFileToBuffer("/proc/self/smaps", &smaps, &smaps_cap, &smaps_len))
return;
ParseUnixMemoryProfile(cb, stats, stats_size, smaps, smaps_len);
UnmapOrDie(smaps, smaps_cap);
}
void ParseUnixMemoryProfile(fill_profile_f cb, uptr *stats, uptr stats_size,
const char *smaps, uptr smaps_len) {
uptr start = 0;
bool file = false;
const char *pos = smaps;
@ -166,7 +172,6 @@ void GetMemoryProfile(fill_profile_f cb, uptr *stats, uptr stats_size) {
}
while (*pos++ != '\n') {}
}
UnmapOrDie(smaps, smaps_cap);
}
} // namespace __sanitizer