#!/usr/bin/env python

import re
import subprocess
import sys

def bss_symbols(lib, sfilter=None):
    symbols = []
    p = subprocess.Popen(['objdump', '-t', '-j', '.bss', '-C', lib], stdout=subprocess.PIPE)
    data = p.communicate()[0]
    pattern = re.compile('^[0-9a-f]+ ([a-zA-Z ])[a-zA-Z ][a-zA-Z ][a-zA-Z ][a-zA-Z ][a-zA-Z ][a-zA-Z ] \.bss\t[0-9a-f]+ +(.*)$')
    for line in data.splitlines():
        m = pattern.match(line)
        if not m:
            continue
        if sfilter is None or sfilter(m.group(1)):
            symbols.append(m.group(2))

    return symbols

if len(sys.argv) < 3:
    print("Usage: %s lib1 lib2" % sys.argv[0])
    sys.exit(1)

s1 = bss_symbols(sys.argv[1], lambda x: x == 'u')
s2 = bss_symbols(sys.argv[2], lambda x: x != 'u')

symbols = []
for symbol in s1:
    if symbol in s2:
        symbols.append(symbol)

if symbols:
    print('The following symbols are global in %s and not in %s' % (sys.argv[1], sys.argv[2]))
    print('\n'.join(sorted(symbols)))
    sys.exit(1)

sys.exit(0)
