#!/usr/bin/perl -p

BEGIN {
	$hex = '[0-9a-fA-F]+';
	$sym = '[a-zA-Z_$][a-zA-Z_$0-9]*';
}

if (/^($hex) <(.+?)>:$/o) {
	$start = hex($1); $function = $2;
} elsif (/^($hex)\t/o) {
	$pc = hex($1);
	if (/($hex) <0x($hex)>/o) {
		$abs = hex($1); $func_rel = hex($2);
		$rel = to_signed_hex($func_rel - ($pc - $start));
		s/($hex) <0x($hex)>/$1 <$rel>/o;
	}
}

sub to_signed_hex {
	my $dec = $_[0];
	my $hex;
	if ($dec >= 0) {
		$hex = sprintf("+0x%x", $dec);
	} else {
		$hex = sprintf("-0x%x", -$dec);
	}
}
