diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2012-03-21 11:32:46 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2012-03-21 11:32:46 +0000 |
commit | 739eb7984139d457216623347ae3b7a706c0aadf (patch) | |
tree | 1c61a916805bdaff0363e40a3b147c14b791e900 /lib/asan/asan_printf.cc | |
parent | 2962f26071ebef1d5fec52b5569e5ae7aae45c9b (diff) | |
download | compiler-rt-739eb7984139d457216623347ae3b7a706c0aadf.tar.gz |
[asan] Support for %z to Printf()
At the moment, asan internal Printf() uses %l modifier for printing
values of size_t and related types. This works, because we control
both the implementation of Printf and all its uses, but can be a
little misleading.
This change adds support for %z to Printf(). All callers that print
sizes and pointers as integers are switched to %zu / %zx.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@153177 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/asan/asan_printf.cc')
-rw-r--r-- | lib/asan/asan_printf.cc | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/lib/asan/asan_printf.cc b/lib/asan/asan_printf.cc index 234420461..4f08f54c4 100644 --- a/lib/asan/asan_printf.cc +++ b/lib/asan/asan_printf.cc @@ -108,7 +108,7 @@ static inline int AppendPointer(char **buff, const char *buff_end, static int VSNPrintf(char *buff, int buff_length, const char *format, va_list args) { static const char *kPrintfFormatsHelp = "Supported Printf formats: " - "%%[l]{d,u,x}; %%p; %%s"; + "%%[z]{d,u,x}; %%p; %%s"; RAW_CHECK(format); RAW_CHECK(buff_length > 0); const char *buff_end = &buff[buff_length - 1]; @@ -117,28 +117,28 @@ static int VSNPrintf(char *buff, int buff_length, for (; *cur; cur++) { if (*cur == '%') { cur++; - bool have_l = (*cur == 'l'); - cur += have_l; + bool have_z = (*cur == 'z'); + cur += have_z; int64_t dval; - uint64_t uval, xval; + uint64_t uval; switch (*cur) { - case 'd': dval = have_l ? va_arg(args, intptr_t) + case 'd': dval = have_z ? va_arg(args, intptr_t) : va_arg(args, int); result += AppendSignedDecimal(&buff, buff_end, dval); break; - case 'u': uval = have_l ? va_arg(args, uintptr_t) - : va_arg(args, unsigned int); + case 'u': uval = have_z ? va_arg(args, size_t) + : va_arg(args, unsigned); result += AppendUnsigned(&buff, buff_end, uval, 10, 0); break; - case 'x': xval = have_l ? va_arg(args, uintptr_t) - : va_arg(args, unsigned int); - result += AppendUnsigned(&buff, buff_end, xval, 16, 0); + case 'x': uval = have_z ? va_arg(args, size_t) + : va_arg(args, unsigned); + result += AppendUnsigned(&buff, buff_end, uval, 16, 0); break; - case 'p': RAW_CHECK_MSG(!have_l, kPrintfFormatsHelp); + case 'p': RAW_CHECK_MSG(!have_z, kPrintfFormatsHelp); result += AppendPointer(&buff, buff_end, va_arg(args, uintptr_t)); break; - case 's': RAW_CHECK_MSG(!have_l, kPrintfFormatsHelp); + case 's': RAW_CHECK_MSG(!have_z, kPrintfFormatsHelp); result += AppendString(&buff, buff_end, va_arg(args, char*)); break; default: RAW_CHECK_MSG(false, kPrintfFormatsHelp); |