linux/debian/lib/python/debian_linux/abi.py

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))