def parse_arenas(): global jeheap jeheap.arenas[:] = [] for i in range(0, jeheap.narenas): current_arena = jemalloc.arena(0, i, []) try: current_arena.addr = \ dbg.to_int(dbg.eval_expr(dbg.arena_expr % (i))) except: print('[shadow] error: cannot evaluate arenas[%d]') % (i) sys.exit() for j in range(0, jeheap.nbins): nrg = 0 run_sz = 0 reg_size = 0 reg_offset = 0 end_addr = 0 try: expr = dbg.arena_reg_size_expr % (i, j) reg_size = dbg.to_int(dbg.eval_expr(expr)) expr = dbg.arena_reg0_offset_expr % (i, j) reg_offset = dbg.to_int(dbg.eval_expr(expr)) except: # XXX: for now assume it's a standalone variant; we # need to do some error checking here too. jeheap.STANDALONE = true expr = dbg.arena_bin_info_reg_size_expr % (j) reg_size = dbg.to_int(dbg.eval_expr(expr)) expr = dbg.arena_bin_info_nregs_expr % (j) nrg = dbg.to_int(dbg.eval_expr(expr)) expr = dbg.arena_bin_info_run_size_expr % (j) run_sz = dbg.to_int(dbg.eval_expr(expr)) try: expr = dbg.arena_runcur_expr % (i, j) runcur_addr = runcur = dbg.to_int(dbg.eval_expr(expr)) end_addr = runcur_addr + run_sz if runcur != 0: current_run = \ jemalloc.arena_run(runcur, end_addr, run_sz, 0, \ int(reg_size), reg_offset, nrg, 0, []) current_bin = jemalloc.arena_bin(0, j, current_run) current_bin.addr = \ dbg.to_int(dbg.eval_expr(dbg.arena_bin_addr_expr % (i, j))) current_arena.bins.append(current_bin) else: # no regions for this size class yet, therefore no runcur current_run = jemalloc.arena_run() current_bin = jemalloc.arena_bin(0, j, current_run) current_arena.bins.append(current_bin) except: current_run = jemalloc.arena_run() current_bin = jemalloc.arena_bin(0, j, current_run) current_arena.bins.append(current_bin) continue # add arena to the list of arenas jeheap.arenas.append(current_arena)
def jeparse_arenas(): global jeheap jeheap.arenas[:] = [] for i in range(0, jeheap.narenas): current_arena = jemalloc.arena(0, i, []) try: current_arena.addr = \ gdbutil.to_int(gdb.parse_and_eval('arenas[%d]' % (i))) except: print '[unmask_jemalloc] error: cannot evaluate arenas[%d]' % (i) sys.exit() for j in range(0, jeheap.nbins): nrg = 0 run_sz = 0 reg_size = 0 reg_offset = 0 end_addr = 0 try: expr = 'arenas[%d].bins[%d].reg_size' % (i, j) reg_size = \ gdbutil.to_int(gdb.parse_and_eval(expr)) expr = 'arenas[%d].bins[%d].reg0_offset' % (i, j) reg_offset = \ gdbutil.to_int(gdb.parse_and_eval(expr)) except RuntimeError: # XXX: for now assume it's a standalone variant; we # need to do some error checking here too. jeheap.STANDALONE = true expr = 'arena_bin_info[%d].reg_size' % (j) reg_size = \ gdbutil.to_int(gdb.parse_and_eval(expr)) expr = 'arena_bin_info[%d].nregs' % (j) nrg = \ gdbutil.to_int(gdb.parse_and_eval(expr)) expr = 'arena_bin_info[%d].run_size' % (j) run_sz = \ gdbutil.to_int(gdb.parse_and_eval(expr)) try: expr = 'arenas[%d].bins[%d].runcur' % (i, j) runcur_addr = runcur = \ gdbutil.to_int(gdb.parse_and_eval(expr)) end_addr = runcur_addr + run_sz if runcur != 0: current_run = \ jemalloc.arena_run(runcur, end_addr, run_sz, 0, \ int(reg_size), reg_offset, nrg, 0, []) current_bin = jemalloc.arena_bin(0, j, current_run) current_bin.addr = \ gdbutil.to_int(gdb.parse_and_eval('&arenas[%d].bins[%d]' % (i, j))) current_arena.bins.append(current_bin) else: # no regions for this size class yet, therefore no runcur current_run = jemalloc.arena_run() current_bin = jemalloc.arena_bin(0, j, current_run) current_arena.bins.append(current_bin) except RuntimeError: current_run = jemalloc.arena_run() current_bin = jemalloc.arena_bin(0, j, current_run) current_arena.bins.append(current_bin) continue # add arena to the list of arenas jeheap.arenas.append(current_arena)
def parse_arenas(): global jeheap jeheap.arenas[:] = [] for i in range(0, jeheap.narenas): current_arena = jemalloc.arena(0, i, []) try: current_arena.addr = dbg.to_int(dbg.eval_expr(dbg.arena_expr % (i))) except: print("[shadow] error: cannot evaluate arenas[%d]") % (i) sys.exit() for j in range(0, jeheap.nbins): nrg = 0 run_sz = 0 reg_size = 0 reg_offset = 0 end_addr = 0 try: expr = dbg.arena_reg_size_expr % (i, j) reg_size = dbg.to_int(dbg.eval_expr(expr)) expr = dbg.arena_reg0_offset_expr % (i, j) reg_offset = dbg.to_int(dbg.eval_expr(expr)) except: # XXX: for now assume it's a standalone variant; we # need to do some error checking here too. jeheap.STANDALONE = true expr = dbg.arena_bin_info_reg_size_expr % (j) reg_size = dbg.to_int(dbg.eval_expr(expr)) expr = dbg.arena_bin_info_nregs_expr % (j) nrg = dbg.to_int(dbg.eval_expr(expr)) expr = dbg.arena_bin_info_run_size_expr % (j) run_sz = dbg.to_int(dbg.eval_expr(expr)) try: expr = dbg.arena_runcur_expr % (i, j) runcur_addr = runcur = dbg.to_int(dbg.eval_expr(expr)) end_addr = runcur_addr + run_sz if runcur != 0: current_run = jemalloc.arena_run(runcur, end_addr, run_sz, 0, int(reg_size), reg_offset, nrg, 0, []) current_bin = jemalloc.arena_bin(0, j, current_run) current_bin.addr = dbg.to_int(dbg.eval_expr(dbg.arena_bin_addr_expr % (i, j))) current_arena.bins.append(current_bin) else: # no regions for this size class yet, therefore no runcur current_run = jemalloc.arena_run() current_bin = jemalloc.arena_bin(0, j, current_run) current_arena.bins.append(current_bin) except: current_run = jemalloc.arena_run() current_bin = jemalloc.arena_bin(0, j, current_run) current_arena.bins.append(current_bin) continue # add arena to the list of arenas jeheap.arenas.append(current_arena)
def jeparse_arenas(): global jeheap jeheap.arenas[:] = [] for i in range(0, jeheap.narenas): current_arena = jemalloc.arena(0, i, []) try: current_arena.addr = \ gdbutil.to_int(gdb.parse_and_eval('arenas[%d]' % (i))) except: print('[unmask_jemalloc] error: cannot evaluate arenas[%d]') % (i) sys.exit() for j in range(0, jeheap.nbins): nrg = 0 run_sz = 0 reg_size = 0 reg_offset = 0 end_addr = 0 try: expr = 'arenas[%d].bins[%d].reg_size' % (i, j) reg_size = \ gdbutil.to_int(gdb.parse_and_eval(expr)) expr = 'arenas[%d].bins[%d].reg0_offset' % (i, j) reg_offset = \ gdbutil.to_int(gdb.parse_and_eval(expr)) except RuntimeError: # XXX: for now assume it's a standalone variant; we # need to do some error checking here too. jeheap.STANDALONE = true expr = 'arena_bin_info[%d].reg_size' % (j) reg_size = \ gdbutil.to_int(gdb.parse_and_eval(expr)) expr = 'arena_bin_info[%d].nregs' % (j) nrg = \ gdbutil.to_int(gdb.parse_and_eval(expr)) expr = 'arena_bin_info[%d].run_size' % (j) run_sz = \ gdbutil.to_int(gdb.parse_and_eval(expr)) try: expr = 'arenas[%d].bins[%d].runcur' % (i, j) runcur_addr = runcur = \ gdbutil.to_int(gdb.parse_and_eval(expr)) end_addr = runcur_addr + run_sz if runcur != 0: current_run = \ jemalloc.arena_run(runcur, end_addr, run_sz, 0, \ int(reg_size), reg_offset, nrg, 0, []) current_bin = jemalloc.arena_bin(0, j, current_run) current_bin.addr = \ gdbutil.to_int(gdb.parse_and_eval('&arenas[%d].bins[%d]' % (i, j))) current_arena.bins.append(current_bin) else: # no regions for this size class yet, therefore no runcur current_run = jemalloc.arena_run() current_bin = jemalloc.arena_bin(0, j, current_run) current_arena.bins.append(current_bin) except RuntimeError: current_run = jemalloc.arena_run() current_bin = jemalloc.arena_bin(0, j, current_run) current_arena.bins.append(current_bin) continue # add arena to the list of arenas jeheap.arenas.append(current_arena)
def jeparse_arenas(): global jeheap jeheap.arenas[:] = [] for i in range(0, jeheap.narenas): current_arena = jemalloc.arena(0, i, []) try: current_arena.addr = \ gdbutil.to_int(gdb.parse_and_eval('je_arenas[%d]' % (i))) except: print('[unmask_jemalloc] error: cannot evaluate je_arenas[%d]') % (i) sys.exit() for j in range(0, jeheap.nbins): nrg = 0 run_sz = 0 reg_size = 0 reg_offset = 0 end_addr = 0 jeheap.STANDALONE = true reg_size = gdbutil.to_int(gdb.parse_and_eval('je_arena_bin_info[%d].reg_size' % (j))) nrg = gdbutil.to_int(gdb.parse_and_eval('je_arena_bin_info[%d].nregs' % (j))) run_sz = gdbutil.to_int(gdb.parse_and_eval('je_arena_bin_info[%d].run_size' % (j))) reg_offset = gdbutil.to_int(gdb.parse_and_eval('je_arena_bin_info[%d].reg0_offset' % (j))) try: expr = 'je_arenas[%d].bins[%d].runcur' % (i, j) runcur_addr = runcur = gdbutil.to_int(gdb.parse_and_eval(expr)) end_addr = runcur_addr + run_sz if runcur != 0: expr = 'je_arenas[%d].bins[%d].runcur.nfree' % (i, j) nfree = gdbutil.to_int(gdb.parse_and_eval(expr)) current_run = \ jemalloc.arena_run(runcur, end_addr, run_sz, 0, \ int(reg_size), reg_offset, nrg, nfree, []) current_bin = jemalloc.arena_bin(0, j, current_run) current_bin.addr = \ gdbutil.to_int(gdb.parse_and_eval('&je_arenas[%d].bins[%d]' % (i, j))) current_arena.bins.append(current_bin) else: # no regions for this size class yet, therefore no runcur current_run = jemalloc.arena_run() current_bin = jemalloc.arena_bin(0, j, current_run) current_arena.bins.append(current_bin) except RuntimeError: current_run = jemalloc.arena_run() current_bin = jemalloc.arena_bin(0, j, current_run) current_arena.bins.append(current_bin) continue # add arena to the list of arenas jeheap.arenas.append(current_arena)