Annotation of qemu/roms/seabios/tools/vgafixup.py, revision 1.1.1.1

1.1       root        1: #!/usr/bin/env python
                      2: # Work around x86emu bugs by replacing problematic instructions.
                      3: #
                      4: # Copyright (C) 2012  Kevin O'Connor <[email protected]>
                      5: #
                      6: # This file may be distributed under the terms of the GNU GPLv3 license.
                      7: 
                      8: # The x86emu code widely used in Linux distributions when running Xorg
                      9: # in vesamode is known to have issues with "retl", "leavel", "entryl",
                     10: # and some variants of "calll".  This code modifies those instructions
                     11: # (ret and leave) that are known to be generated by gcc to avoid
                     12: # triggering the x86emu bugs.
                     13: 
                     14: # It is also known that the Windows vgabios emulator has issues with
                     15: # addressing negative offsets to the %esp register.  That has been
                     16: # worked around by not using the gcc paremeter "-fomit-frame-pointer"
                     17: # when compiling.
                     18: 
                     19: import sys
                     20: 
                     21: def main():
                     22:     infilename, outfilename = sys.argv[1:]
                     23:     infile = open(infilename, 'rb')
                     24:     out = []
                     25:     for line in infile:
                     26:         sline = line.strip()
                     27:         if sline == 'ret':
                     28:             out.append('retw $2\n')
                     29:         elif sline == 'leave':
                     30:             out.append('movl %ebp, %esp ; popl %ebp\n')
                     31:         else:
                     32:             out.append(line)
                     33:     infile.close()
                     34:     outfile = open(outfilename, 'wb')
                     35:     outfile.write(''.join(out))
                     36:     outfile.close()
                     37: 
                     38: if __name__ == '__main__':
                     39:     main()

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.