summaryrefslogtreecommitdiff
path: root/lib/asan/asan_printf.cc
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2012-03-21 11:32:46 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2012-03-21 11:32:46 +0000
commit739eb7984139d457216623347ae3b7a706c0aadf (patch)
tree1c61a916805bdaff0363e40a3b147c14b791e900 /lib/asan/asan_printf.cc
parent2962f26071ebef1d5fec52b5569e5ae7aae45c9b (diff)
downloadcompiler-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.cc24
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);