diff --git a/libbacktrace/BacktraceMap.cpp b/libbacktrace/BacktraceMap.cpp index ba866328c..19551dc57 100644 --- a/libbacktrace/BacktraceMap.cpp +++ b/libbacktrace/BacktraceMap.cpp @@ -15,6 +15,7 @@ */ #include +#include #include #include #include @@ -46,8 +47,8 @@ void BacktraceMap::FillIn(uintptr_t addr, backtrace_map_t* map) { } bool BacktraceMap::ParseLine(const char* line, backtrace_map_t* map) { - unsigned long int start; - unsigned long int end; + uint64_t start; + uint64_t end; char permissions[5]; int name_pos; @@ -56,14 +57,14 @@ bool BacktraceMap::ParseLine(const char* line, backtrace_map_t* map) { // __TEXT 0009f000-000a1000 [ 8K 8K] r-x/rwx SM=COW /Volumes/android/dalvik-dev/out/host/darwin-x86/bin/libcorkscrew_test\n // 012345678901234567890123456789012345678901234567890123456789 // 0 1 2 3 4 5 - if (sscanf(line, "%*21c %lx-%lx [%*13c] %3c/%*3c SM=%*3c %n", + if (sscanf(line, "%*21c %" SCNx64 "-%" SCNx64 " [%*13c] %3c/%*3c SM=%*3c %n", &start, &end, permissions, &name_pos) != 3) { #else // Linux /proc//maps lines: // 6f000000-6f01e000 rwxp 00000000 00:0c 16389419 /system/lib/libcomposer.so\n // 012345678901234567890123456789012345678901234567890123456789 // 0 1 2 3 4 5 - if (sscanf(line, "%lx-%lx %4s %*x %*x:%*x %*d %n", + if (sscanf(line, "%" SCNx64 "-%" SCNx64 " %4s %*x %*x:%*x %*d %n", &start, &end, permissions, &name_pos) != 3) { #endif return false; diff --git a/libbacktrace/GetPss.cpp b/libbacktrace/GetPss.cpp index 09a721dee..b4dc48d56 100644 --- a/libbacktrace/GetPss.cpp +++ b/libbacktrace/GetPss.cpp @@ -33,7 +33,7 @@ #define PAGEMAP_SWAP_OFFSET(x) (_BITS(x, 5, 50)) #define PAGEMAP_SWAP_TYPE(x) (_BITS(x, 0, 5)) -static bool ReadData(int fd, unsigned long place, uint64_t *data) { +static bool ReadData(int fd, off_t place, uint64_t *data) { if (lseek(fd, place * sizeof(uint64_t), SEEK_SET) < 0) { return false; } @@ -71,12 +71,13 @@ size_t GetPssBytes() { total_pss = 0; break; } - for (size_t page = start/pagesize; page < end/pagesize; page++) { + for (off_t page = static_cast(start/pagesize); + page < static_cast(end/pagesize); page++) { uint64_t data; if (ReadData(pagemap_fd, page, &data)) { if (PAGEMAP_PRESENT(data) && !PAGEMAP_SWAPPED(data)) { uint64_t count; - if (ReadData(pagecount_fd, PAGEMAP_PFN(data), &count)) { + if (ReadData(pagecount_fd, static_cast(PAGEMAP_PFN(data)), &count)) { total_pss += (count >= 1) ? pagesize / count : 0; } }