[ASan] Make printf arguments match format strings better.

llvm-svn: 158059
This commit is contained in:
Alexey Samsonov 2012-06-06 10:46:00 +00:00
parent ac4c290d02
commit 461820ad67
7 changed files with 26 additions and 22 deletions

View File

@ -217,7 +217,7 @@ struct AsanChunk: public ChunkBase {
void DescribeAddress(uptr addr, uptr access_size) { void DescribeAddress(uptr addr, uptr access_size) {
uptr offset; uptr offset;
Printf("%p is located ", addr); Printf("%p is located ", (void*)addr);
if (AddrIsInside(addr, access_size, &offset)) { if (AddrIsInside(addr, access_size, &offset)) {
Printf("%zu bytes inside of", offset); Printf("%zu bytes inside of", offset);
} else if (AddrIsAtLeft(addr, access_size, &offset)) { } else if (AddrIsAtLeft(addr, access_size, &offset)) {
@ -228,7 +228,7 @@ struct AsanChunk: public ChunkBase {
Printf(" somewhere around (this is AddressSanitizer bug!)"); Printf(" somewhere around (this is AddressSanitizer bug!)");
} }
Printf(" %zu-byte region [%p,%p)\n", Printf(" %zu-byte region [%p,%p)\n",
used_size, beg(), beg() + used_size); used_size, (void*)beg(), (void*)(beg() + used_size));
} }
}; };
@ -622,7 +622,8 @@ static u8 *Allocate(uptr alignment, uptr size, AsanStackTrace *stack) {
} }
CHECK(IsAligned(needed_size, REDZONE)); CHECK(IsAligned(needed_size, REDZONE));
if (size > kMaxAllowedMallocSize || needed_size > kMaxAllowedMallocSize) { if (size > kMaxAllowedMallocSize || needed_size > kMaxAllowedMallocSize) {
Report("WARNING: AddressSanitizer failed to allocate %p bytes\n", size); Report("WARNING: AddressSanitizer failed to allocate %p bytes\n",
(void*)size);
return 0; return 0;
} }

View File

@ -66,13 +66,13 @@ void PrintIfASCII(const Global &g) {
if (!isascii(*(char*)p)) return; if (!isascii(*(char*)p)) return;
} }
if (*(char*)(g.beg + g.size - 1) != 0) return; if (*(char*)(g.beg + g.size - 1) != 0) return;
Printf(" '%s' is ascii string '%s'\n", g.name, g.beg); Printf(" '%s' is ascii string '%s'\n", g.name, (char*)g.beg);
} }
bool DescribeAddrIfMyRedZone(const Global &g, uptr addr) { bool DescribeAddrIfMyRedZone(const Global &g, uptr addr) {
if (addr < g.beg - kGlobalAndStackRedzone) return false; if (addr < g.beg - kGlobalAndStackRedzone) return false;
if (addr >= g.beg + g.size_with_redzone) return false; if (addr >= g.beg + g.size_with_redzone) return false;
Printf("%p is located ", addr); Printf("%p is located ", (void*)addr);
if (addr < g.beg) { if (addr < g.beg) {
Printf("%zd bytes to the left", g.beg - addr); Printf("%zd bytes to the left", g.beg - addr);
} else if (addr >= g.beg + g.size) { } else if (addr >= g.beg + g.size) {
@ -95,7 +95,7 @@ bool DescribeAddrIfGlobal(uptr addr) {
const Global &g = *l->g; const Global &g = *l->g;
if (FLAG_report_globals >= 2) if (FLAG_report_globals >= 2)
Printf("Search Global: beg=%p size=%zu name=%s\n", Printf("Search Global: beg=%p size=%zu name=%s\n",
g.beg, g.size, g.name); (void*)g.beg, g.size, (char*)g.name);
res |= DescribeAddrIfMyRedZone(g, addr); res |= DescribeAddrIfMyRedZone(g, addr);
} }
return res; return res;
@ -118,7 +118,7 @@ static void RegisterGlobal(const Global *g) {
list_of_globals = l; list_of_globals = l;
if (FLAG_report_globals >= 2) if (FLAG_report_globals >= 2)
Report("Added Global: beg=%p size=%zu name=%s\n", Report("Added Global: beg=%p size=%zu name=%s\n",
g->beg, g->size, g->name); (void*)g->beg, g->size, g->name);
} }
static void UnregisterGlobal(const Global *g) { static void UnregisterGlobal(const Global *g) {

View File

@ -79,7 +79,8 @@ void __asan_poison_memory_region(void const volatile *addr, uptr size) {
uptr beg_addr = (uptr)addr; uptr beg_addr = (uptr)addr;
uptr end_addr = beg_addr + size; uptr end_addr = beg_addr + size;
if (FLAG_v >= 1) { if (FLAG_v >= 1) {
Printf("Trying to poison memory region [%p, %p)\n", beg_addr, end_addr); Printf("Trying to poison memory region [%p, %p)\n",
(void*)beg_addr, (void*)end_addr);
} }
ShadowSegmentEndpoint beg(beg_addr); ShadowSegmentEndpoint beg(beg_addr);
ShadowSegmentEndpoint end(end_addr); ShadowSegmentEndpoint end(end_addr);
@ -120,7 +121,8 @@ void __asan_unpoison_memory_region(void const volatile *addr, uptr size) {
uptr beg_addr = (uptr)addr; uptr beg_addr = (uptr)addr;
uptr end_addr = beg_addr + size; uptr end_addr = beg_addr + size;
if (FLAG_v >= 1) { if (FLAG_v >= 1) {
Printf("Trying to unpoison memory region [%p, %p)\n", beg_addr, end_addr); Printf("Trying to unpoison memory region [%p, %p)\n",
(void*)beg_addr, (void*)end_addr);
} }
ShadowSegmentEndpoint beg(beg_addr); ShadowSegmentEndpoint beg(beg_addr);
ShadowSegmentEndpoint end(end_addr); ShadowSegmentEndpoint end(end_addr);

View File

@ -88,7 +88,7 @@ static void ASAN_OnSIGSEGV(int, siginfo_t *siginfo, void *context) {
GetPcSpBp(context, &pc, &sp, &bp); GetPcSpBp(context, &pc, &sp, &bp);
Report("ERROR: AddressSanitizer crashed on unknown address %p" Report("ERROR: AddressSanitizer crashed on unknown address %p"
" (pc %p sp %p bp %p T%d)\n", " (pc %p sp %p bp %p T%d)\n",
addr, pc, sp, bp, (void*)addr, (void*)pc, (void*)sp, (void*)bp,
asanThreadRegistry().GetCurrentTidOrMinusOne()); asanThreadRegistry().GetCurrentTidOrMinusOne());
Printf("AddressSanitizer can not provide additional info. ABORTING\n"); Printf("AddressSanitizer can not provide additional info. ABORTING\n");
GET_STACK_TRACE_WITH_PC_AND_BP(kStackTraceMax, pc, bp); GET_STACK_TRACE_WITH_PC_AND_BP(kStackTraceMax, pc, bp);

View File

@ -33,7 +33,7 @@ void Die() {
while (1) { } while (1) { }
} }
if (FLAG_sleep_before_dying) { if (FLAG_sleep_before_dying) {
Report("Sleeping for %d second(s)\n", FLAG_sleep_before_dying); Report("Sleeping for %zd second(s)\n", FLAG_sleep_before_dying);
SleepForSeconds(FLAG_sleep_before_dying); SleepForSeconds(FLAG_sleep_before_dying);
} }
if (FLAG_unmap_shadow_on_exit) if (FLAG_unmap_shadow_on_exit)
@ -189,7 +189,7 @@ static bool DescribeStackAddress(uptr addr, uptr access_size) {
static_cast<sptr>(name_end - frame_descr))); static_cast<sptr>(name_end - frame_descr)));
Printf("Address %p is located at offset %zu " Printf("Address %p is located at offset %zu "
"in frame <%s> of T%d's stack:\n", "in frame <%s> of T%d's stack:\n",
addr, offset, buf, t->tid()); (void*)addr, offset, buf, t->tid());
// Report the number of stack objects. // Report the number of stack objects.
char *p; char *p;
uptr n_objects = internal_simple_strtoll(name_end, &p, 10); uptr n_objects = internal_simple_strtoll(name_end, &p, 10);
@ -419,11 +419,11 @@ void __asan_report_error(uptr pc, uptr bp, uptr sp,
Report("ERROR: AddressSanitizer %s on address " Report("ERROR: AddressSanitizer %s on address "
"%p at pc 0x%zx bp 0x%zx sp 0x%zx\n", "%p at pc 0x%zx bp 0x%zx sp 0x%zx\n",
bug_descr, addr, pc, bp, sp); bug_descr, (void*)addr, pc, bp, sp);
Printf("%s of size %zu at %p thread T%d\n", Printf("%s of size %zu at %p thread T%d\n",
access_size ? (is_write ? "WRITE" : "READ") : "ACCESS", access_size ? (is_write ? "WRITE" : "READ") : "ACCESS",
access_size, addr, curr_tid); access_size, (void*)addr, curr_tid);
if (FLAG_debug) { if (FLAG_debug) {
PrintBytes("PC: ", (uptr*)pc); PrintBytes("PC: ", (uptr*)pc);
@ -440,7 +440,7 @@ void __asan_report_error(uptr pc, uptr bp, uptr sp,
Report("ABORTING\n"); Report("ABORTING\n");
__asan_print_accumulated_stats(); __asan_print_accumulated_stats();
Printf("Shadow byte and word:\n"); Printf("Shadow byte and word:\n");
Printf(" %p: %x\n", shadow_addr, *(unsigned char*)shadow_addr); Printf(" %p: %x\n", (void*)shadow_addr, *(unsigned char*)shadow_addr);
uptr aligned_shadow = shadow_addr & ~(kWordSize - 1); uptr aligned_shadow = shadow_addr & ~(kWordSize - 1);
PrintBytes(" ", (uptr*)(aligned_shadow)); PrintBytes(" ", (uptr*)(aligned_shadow));
Printf("More shadow bytes:\n"); Printf("More shadow bytes:\n");
@ -536,14 +536,14 @@ void __asan_init() {
ReplaceOperatorsNewAndDelete(); ReplaceOperatorsNewAndDelete();
if (FLAG_v) { if (FLAG_v) {
Printf("|| `[%p, %p]` || HighMem ||\n", kHighMemBeg, kHighMemEnd); Printf("|| `[%zx, %zx]` || HighMem ||\n", kHighMemBeg, kHighMemEnd);
Printf("|| `[%p, %p]` || HighShadow ||\n", Printf("|| `[%zx, %zx]` || HighShadow ||\n",
kHighShadowBeg, kHighShadowEnd); kHighShadowBeg, kHighShadowEnd);
Printf("|| `[%p, %p]` || ShadowGap ||\n", Printf("|| `[%zx, %zx]` || ShadowGap ||\n",
kShadowGapBeg, kShadowGapEnd); kShadowGapBeg, kShadowGapEnd);
Printf("|| `[%p, %p]` || LowShadow ||\n", Printf("|| `[%zx, %zx]` || LowShadow ||\n",
kLowShadowBeg, kLowShadowEnd); kLowShadowBeg, kLowShadowEnd);
Printf("|| `[%p, %p]` || LowMem ||\n", kLowMemBeg, kLowMemEnd); Printf("|| `[%zx, %zx]` || LowMem ||\n", kLowMemBeg, kLowMemEnd);
Printf("MemToShadow(shadow): %p %p %p %p\n", Printf("MemToShadow(shadow): %p %p %p %p\n",
MEM_TO_SHADOW(kLowShadowBeg), MEM_TO_SHADOW(kLowShadowBeg),
MEM_TO_SHADOW(kLowShadowEnd), MEM_TO_SHADOW(kLowShadowEnd),

View File

@ -74,7 +74,7 @@ void AsanThread::Init() {
if (FLAG_v >= 1) { if (FLAG_v >= 1) {
int local = 0; int local = 0;
Report("T%d: stack [%p,%p) size 0x%zx; local=%p\n", Report("T%d: stack [%p,%p) size 0x%zx; local=%p\n",
tid(), stack_bottom_, stack_top_, tid(), (void*)stack_bottom_, (void*)stack_top_,
stack_top_ - stack_bottom_, &local); stack_top_ - stack_bottom_, &local);
} }
fake_stack_.Init(stack_size()); fake_stack_.Init(stack_size());

View File

@ -88,7 +88,8 @@ AsanThread *AsanThreadRegistry::GetCurrent() {
void AsanThreadRegistry::SetCurrent(AsanThread *t) { void AsanThreadRegistry::SetCurrent(AsanThread *t) {
CHECK(t->summary()); CHECK(t->summary());
if (FLAG_v >= 2) { if (FLAG_v >= 2) {
Report("SetCurrent: %p for thread %p\n", t->summary(), GetThreadSelf()); Report("SetCurrent: %p for thread %p\n",
t->summary(), (void*)GetThreadSelf());
} }
// Make sure we do not reset the current AsanThread. // Make sure we do not reset the current AsanThread.
CHECK(AsanTSDGet() == 0); CHECK(AsanTSDGet() == 0);