locate.pl revision 10641
110641Sse#!/usr/local/bin/perl
210641Sse
310641Sse$errpos = hex($ARGV[0])/4;
410641Sse$ofs=0;
510641Sse
610641Sseopen (INPUT, "cc -E ncr.c 2>/dev/null |");
710641Sse
810641Ssewhile ($_ = <INPUT>)
910641Sse{
1010641Sse    last if /^struct script \{/;
1110641Sse}
1210641Sse
1310641Ssewhile ($_ = <INPUT>)
1410641Sse{
1510641Sse    last if /^\}\;/;
1610641Sse    ($label, $size) = /ncrcmd\s+(\S+)\s+\[([^]]+)/;
1710641Sse    $size = eval($size);
1810641Sse    if ($label) {
1910641Sse	if ($errpos) {
2010641Sse	    if ($ofs + $size > $errpos) {
2110641Sse		printf ("%4x: %s\n", $ofs * 4, $label);
2210641Sse		printf ("%4x: %s + %d\n", $errpos * 4, $label, $errpos - $ofs);
2310641Sse		last;
2410641Sse	    }
2510641Sse	    $ofs += $size;
2610641Sse	} else {
2710641Sse	    printf ("%4x: %s\n", $ofs * 4, $label);
2810641Sse	}
2910641Sse    }
3010641Sse}
3110641Sse
32