#!/usr/bin/env ruby -w

class Fixnum
  def to_size
    if self >= 1024*1024
      ret = "#{self/(1024*1024)}MB"
    elsif self >= 1024
      ret = "#{self/1024}KB"
    else
      ret = "#{self}B"
    end
    ret
  end
end

nm = IO.popen("nm -n #{ARGV.to_s}") #no spaces allowed :(

pos = []
names = []
out = []

nm.each do |line|
  if line =~ /([0-9a-f]+) . (.+)$/ then
    pos << $1.hex
    names << $2
  end  
end

pos.each_index do |i|
  s = (pos[i+1]) ? pos[i+1] - pos[i] : 0
  out << [s, names[i]]
end

out.sort! {|x,y| x[0] <=> y[0]}

out.each do |v|
  s = v[0].to_size
  n = v[1]
  puts "#{s} #{n}"
end