account for alignment padding. leak appears to still assume 32-bit ptrs, unfortunately Reference: /n/atom/patch/applied2013/leakalign Date: Fri Jun 14 20:10:31 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/lib/acid/leak Fri Jun 14 20:09:37 2013 +++ /sys/lib/acid/leak Fri Jun 14 20:09:37 2013 @@ -70,34 +70,36 @@ } defn -dumpblock(addr, sum) +emitblock(addr, type) { complex Bhdr addr; - if addr.magic == ALLOC_MAGIC || (!sum && addr.magic == FREE_MAGIC) then { - local a, x, s; + print(type\s, " ", addr\X, " ", addr.size\X, " "); + print(*(addr+8)\X, " ", *(addr+12)\X, " ", + *(addr+8)\a, " ", *(addr+12)\a, "\n"); +} - a = addr; - complex Alloc a; +defn +dumpblock(addr, sum) +{ + complex Bhdr addr; + local x; + if addr.magic == ALLOC_MAGIC then { x = addr+8; + while *x == ALIGN_MAGIC do + x = x + 4; if sum then { - if *(addr+8) != lastalloc then { + if *x != lastalloc then { emitsum(); - lastalloc = *(addr+8); + lastalloc = *x; } lastcount = lastcount+1; - lastsize = lastsize+a.size; - }else{ - if addr.magic == ALLOC_MAGIC then - s = "block"; - else - s = "free"; - print(s, " ", addr\X, " ", a.size\X, " "); - print(*(addr+8)\X, " ", *(addr+12)\X, " ", - *(addr+8)\a, " ", *(addr+12)\a, "\n"); - } - } + lastsize = lastsize+addr.size; + }else + emitblock(addr, "block"); + }else if !sum && addr.magic == FREE_MAGIC then + emitblock(addr, "free"); } defn