root/core/lstadjust.pl

Revision b536209dfb7bd50c37061735fe10d2c19a97d26d, 1.3 KB (checked in by H. Peter Anvin <hpa@…>, 4 years ago)

Move files out of root into core, dos, and utils

Move source files out of the root directory; the root is a mess and
has become virtually unmaintainable. The Syslinux core now lives in
core/; the Linux and generic utilities has moved into utils/, and
copybs.com has moved into dos/; it had to go somewhere, and it seemed
as good a place as any.

  • Property mode set to 100755
Line 
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
13open(LST, "< $listfile\0")
14    or die "$0: cannot open: $listfile: $!\n";
15open(MAP, "< $mapfile\0")
16    or die "$0: cannot open: $mapfile: $!\n";
17open(OUT, "> $outfile\0")
18    or die "$0: cannot create: $outfile: $!\n";
19
20%vstart = ();
21
22while (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}
27close(MAP);
28
29$offset = 0;
30@ostack = ();
31
32while (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}
Note: See TracBrowser for help on using the browser.