Magellan Linux

Contents of /trunk/mkinitrd-magellan/isolinux/lstadjust.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1133 - (show annotations) (download)
Thu Aug 19 09:50:43 2010 UTC (13 years, 8 months ago) by niro
File MIME type: text/plain
File size: 1304 byte(s)
-updated to isolinux-3.86
1 #!/usr/bin/perl
2 #
3 # Take a NASM list and map file and make the offsets in the list file
4 # absolute. This makes debugging a lot easier.
5 #
6 # Usage:
7 #
8 # lstadjust.pl listfile mapfile outfile
9 #
10
11 ($listfile, $mapfile, $outfile) = @ARGV;
12
13 open(LST, "< $listfile\0")
14 or die "$0: cannot open: $listfile: $!\n";
15 open(MAP, "< $mapfile\0")
16 or die "$0: cannot open: $mapfile: $!\n";
17 open(OUT, "> $outfile\0")
18 or die "$0: cannot create: $outfile: $!\n";
19
20 %vstart = ();
21
22 while (defined($line = <MAP>)) {
23 if ($line =~ /^\s*([0-9]+)\s+(\S+)\s+([0-9a-f]+)\s+([0-9a-f]+)\s+([0-9a-f]+)\s+([0-9a-f]+)\s+2\*\*([0-9]+)/i) {
24 $vstart{$2} = hex $4;
25 }
26 }
27 close(MAP);
28
29 $offset = 0;
30 @ostack = ();
31
32 while (defined($line = <LST>)) {
33 chomp $line;
34
35 $source = substr($line, 40);
36 if ($source =~ /^([^;]*);/) {
37 $source = $1;
38 }
39
40 ($label, $op, $arg, $tail) = split(/\s+/, $source);
41 if ($op =~ /^(|\[)section$/i) {
42 $offset = $vstart{$arg};
43 } elsif ($op =~ /^(absolute|\[absolute)$/i) {
44 $offset = 0;
45 } elsif ($op =~ /^struc$/i) {
46 push(@ostack, $offset);
47 $offset = 0;
48 } elsif ($op =~ /^endstruc$/i) {
49 $offset = pop(@ostack);
50 }
51
52 if ($line =~ /^(\s*[0-9]+ )([0-9A-F]{8})(\s.*)$/) {
53 $line = sprintf("%s%08X%s", $1, (hex $2)+$offset, $3);
54 }
55
56 print OUT $line, "\n";
57 }

Properties

Name Value
svn:executable *