diff --git a/tools/dumpaout.py b/tools/dumpaout.py index 1ea5568..d4fbad7 100755 --- a/tools/dumpaout.py +++ b/tools/dumpaout.py @@ -1,5 +1,6 @@ #!/usr/bin/env python +import sys from struct import pack, unpack class AOut(object) : @@ -11,7 +12,8 @@ class AOut(object) : self.txtd = bin[:self.txt] self.symd = bin[self.txt : self.txt+self.sym] self.reld = bin[self.txt+self.sym : self.txt+self.sym+self.rel] - assert len(bin) == self.txt+self.sym+self.rel + # XXX why isnt this true? + #assert len(bin) == self.txt+self.sym+self.rel def __str__(self) : return '[a.out mag=%x txt=%x sym=%x rel=%x dat=%x z=%x]' % \ (self.mag, self.txt, self.sym, self.rel, self.dat, self.z) @@ -20,12 +22,21 @@ def dump(fn, addr) : f = file(fn, 'rb') a = AOut(f.read()) f.close() + print a assert a.rel == 0 vals = unpack("<%dH" % (a.txt/2), a.txtd) + + # it appears the a.out header isnt used for the kernel. + # dropping the first 16 bytes causes the tables in u0.s to + # line up with the addresses they were assigned... + vals = vals[8:] for n,v in enumerate(vals) : print 'dep cpu %o %06o' % (addr+n*2, v) + print 'go 400' # XXX just an example. -dump('/tmp/s2/bin/ls', 02000) +#dump('/tmp/s2/bin/ls', 02000) +for fn in sys.argv[1:] : + dump(fn, 0)