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