88 lines
2.7 KiB
Python
Executable File
88 lines
2.7 KiB
Python
Executable File
class symbols(object):
|
|
def __init__(self, filename = None):
|
|
if filename is not None:
|
|
self.read(file(filename))
|
|
|
|
def cmp(self, new):
|
|
symbols_ref = set(self.symbols.keys())
|
|
symbols_new = set(new.symbols.keys())
|
|
|
|
symbols_add = {}
|
|
symbols_remove = {}
|
|
|
|
symbols_change = {}
|
|
|
|
for symbol in symbols_new - symbols_ref:
|
|
symbols_add[symbol] = {'module': new.symbols[symbol][0]}
|
|
|
|
for symbol in symbols_ref.intersection(symbols_new):
|
|
module_ref, version_ref = self.symbols[symbol]
|
|
module_new, version_new = new.symbols[symbol]
|
|
|
|
ent = {}
|
|
if module_ref != module_new:
|
|
ent['module'] = module_ref, module_new
|
|
if version_ref != version_new:
|
|
ent['version'] = version_ref, version_new
|
|
if ent:
|
|
symbols_change[symbol] = ent
|
|
|
|
for symbol in symbols_ref - symbols_new:
|
|
symbols_remove[symbol] = {'module': self.symbols[symbol][0]}
|
|
|
|
return symbols_add, symbols_change, symbols_remove
|
|
|
|
def read(self, file):
|
|
self.modules = {}
|
|
self.symbols = {}
|
|
|
|
for line in file.readlines():
|
|
symbol, module, version = line.strip().split()
|
|
|
|
symbols = self.modules.get(module, {})
|
|
symbols[symbol] = version
|
|
self.modules[module] = symbols
|
|
if self.symbols.has_key(symbol):
|
|
pass
|
|
self.symbols[symbol] = module, version
|
|
|
|
def read_kernel(self, file):
|
|
self.modules = {}
|
|
self.symbols = {}
|
|
|
|
for line in file.readlines():
|
|
version, symbol, module = line.strip().split('\t')
|
|
|
|
symbols = self.modules.get(module, {})
|
|
symbols[symbol] = version
|
|
self.modules[module] = symbols
|
|
if self.symbols.has_key(symbol):
|
|
pass
|
|
self.symbols[symbol] = module, version
|
|
|
|
def write(self, file):
|
|
symbols = self.symbols.items()
|
|
symbols.sort()
|
|
for symbol, i in symbols:
|
|
module, version = i
|
|
file.write("%s %s %s\n" % (symbol, module, version))
|
|
|
|
def write_human(self, file):
|
|
modules = self.modules.keys()
|
|
modules.sort()
|
|
modules.remove('vmlinux')
|
|
|
|
file.write("Symbols in vmlinux\n\n")
|
|
symbols = self.modules['vmlinux'].items()
|
|
symbols.sort()
|
|
for symbol, version in symbols:
|
|
file.write("%-48s %s\n" % (symbol, version))
|
|
|
|
for module in modules:
|
|
file.write("\n\nSymbols in module %s\n\n" % module)
|
|
symbols = self.modules[module].items()
|
|
symbols.sort()
|
|
for symbol, version in symbols:
|
|
file.write("%-48s %s\n" % (symbol, version))
|
|
|