#!/bin/bash

# libcomp - Script to check whether the size of library symbols has
#           changed between versions.  For checking ABI compatibility.
#           Requires the "bc" and "binutils" packages to be installed.

# Arguments: $1 - old library; $2 - new library

OLD="`nm -D "$1" | egrep '^[0-9]' | sort`"
NEW="`nm -D "$2" | egrep '^[0-9]' | sort`"

prevaddr=0
prevname=""
echo "$OLD" | while read addr type name ; do
	size=`( echo ibase=16 ; echo $addr - $prevaddr | tr 'a-z' 'A-Z' ) | bc`
	#echo $prevname $size

	newlines="`echo "$NEW" | grep --after-context=1 '[[:space:]]'$prevname'$'`"
	#echo "$newlines" ; echo ---
	if [ -z "$newlines" ] ; then
		echo $prevname: not found in new lib
	else
		newprevaddr=`echo "$newlines" | head -n 1 | awk '{print $1}'`
		newaddr=`echo "$newlines" | tail -n 1 | awk '{print $1}'`
		newsize=`( echo ibase=16 ;
			echo $newaddr - $newprevaddr | tr 'a-z' 'A-Z' ) | bc`
		if [ ! "$newsize" = "$size" ] ; then
			echo $prevname: oldsize $size, newsize $newsize
		fi
	fi
	prevname=$name
	prevaddr=$addr
done

