forked from OSchip/llvm-project
[scudo] Use stdint types for internal types (redo)
This is a redo of D108089 that broke some 32-bit builds. `scudo::uptr` was defined as an `unsigned long` on 32-b platform, while a `uintptr_t` is usually defined as an `unsigned int`. This worked, this was not consistent, particularly with regard to format string specifiers. As suggested by Vitaly, since we are including `stdint.h`, define the internal scudo integer types to those. Differential Revision: https://reviews.llvm.org/D108152
This commit is contained in:
parent
2c6448cdc2
commit
b2aaafb837
|
@ -920,7 +920,7 @@ public:
|
|||
if (!Depot->find(Hash, &RingPos, &Size))
|
||||
return;
|
||||
for (unsigned I = 0; I != Size && I != MaxTraceSize; ++I)
|
||||
Trace[I] = (*Depot)[RingPos + I];
|
||||
Trace[I] = static_cast<uintptr_t>((*Depot)[RingPos + I]);
|
||||
}
|
||||
|
||||
static void getErrorInfo(struct scudo_error_info *ErrorInfo,
|
||||
|
|
|
@ -78,16 +78,16 @@
|
|||
|
||||
namespace scudo {
|
||||
|
||||
typedef unsigned long uptr;
|
||||
typedef unsigned char u8;
|
||||
typedef unsigned short u16;
|
||||
typedef unsigned int u32;
|
||||
typedef unsigned long long u64;
|
||||
typedef signed long sptr;
|
||||
typedef signed char s8;
|
||||
typedef signed short s16;
|
||||
typedef signed int s32;
|
||||
typedef signed long long s64;
|
||||
typedef uintptr_t uptr;
|
||||
typedef uint8_t u8;
|
||||
typedef uint16_t u16;
|
||||
typedef uint32_t u32;
|
||||
typedef uint64_t u64;
|
||||
typedef intptr_t sptr;
|
||||
typedef int8_t s8;
|
||||
typedef int16_t s16;
|
||||
typedef int32_t s32;
|
||||
typedef int64_t s64;
|
||||
|
||||
// The following two functions have platform specific implementations.
|
||||
void outputRaw(const char *Buffer);
|
||||
|
|
|
@ -485,7 +485,7 @@ void *MapAllocator<Config>::allocate(Options Options, uptr Size, uptr Alignment,
|
|||
FillContentsMode FillContents) {
|
||||
if (Options.get(OptionBit::AddLargeAllocationSlack))
|
||||
Size += 1UL << SCUDO_MIN_ALIGNMENT_LOG;
|
||||
Alignment = Max(Alignment, 1UL << SCUDO_MIN_ALIGNMENT_LOG);
|
||||
Alignment = Max(Alignment, uptr(1U) << SCUDO_MIN_ALIGNMENT_LOG);
|
||||
const uptr PageSize = getPageSizeCached();
|
||||
uptr RoundedSize =
|
||||
roundUpTo(roundUpTo(Size, Alignment) + LargeBlock::getHeaderSize() +
|
||||
|
|
|
@ -46,8 +46,10 @@ inline bool checkPosixMemalignAlignment(uptr Alignment) {
|
|||
// builtin supported by recent clang & GCC if it exists, otherwise fallback to a
|
||||
// costly division.
|
||||
inline bool checkForCallocOverflow(uptr Size, uptr N, uptr *Product) {
|
||||
#if __has_builtin(__builtin_umull_overflow)
|
||||
#if __has_builtin(__builtin_umull_overflow) && (SCUDO_WORDSIZE == 64U)
|
||||
return __builtin_umull_overflow(Size, N, Product);
|
||||
#elif __has_builtin(__builtin_umul_overflow) && (SCUDO_WORDSIZE == 32U)
|
||||
return __builtin_umul_overflow(Size, N, Product);
|
||||
#else
|
||||
*Product = Size * N;
|
||||
if (!Size)
|
||||
|
|
Loading…
Reference in New Issue