aboutsummaryrefslogtreecommitdiff
path: root/scripts/vgafixup.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2013-08-17 10:13:14 -0400
committerKevin O'Connor <kevin@koconnor.net>2013-08-17 10:23:46 -0400
commitb942ce0a03a8b83c4b52e8af5d649b3661034a2d (patch)
treed0625ea547ceba4b857d8ddc1502c5f33c60c3fb /scripts/vgafixup.py
parent915f64aee37159d21760d44cdc5778220468fe0b (diff)
downloadseabios-hppa-b942ce0a03a8b83c4b52e8af5d649b3661034a2d.zip
seabios-hppa-b942ce0a03a8b83c4b52e8af5d649b3661034a2d.tar.gz
seabios-hppa-b942ce0a03a8b83c4b52e8af5d649b3661034a2d.tar.bz2
Rename tools/ directory to scripts/ directory.
It's common for other projects (eg, QEMU, Linux) to put build scripts into a "scripts/" directory. There's no reason for SeaBIOS to be different, so rename the "tools/" directory to "scripts/". Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'scripts/vgafixup.py')
-rw-r--r--scripts/vgafixup.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/scripts/vgafixup.py b/scripts/vgafixup.py
new file mode 100644
index 0000000..52fb934
--- /dev/null
+++ b/scripts/vgafixup.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+# Work around x86emu bugs by replacing problematic instructions.
+#
+# Copyright (C) 2012 Kevin O'Connor <kevin@koconnor.net>
+#
+# This file may be distributed under the terms of the GNU GPLv3 license.
+
+# The x86emu code widely used in Linux distributions when running Xorg
+# in vesamode is known to have issues with "retl", "leavel", "entryl",
+# and some variants of "calll". This code modifies those instructions
+# (ret and leave) that are known to be generated by gcc to avoid
+# triggering the x86emu bugs.
+
+# It is also known that the Windows vgabios emulator has issues with
+# addressing negative offsets to the %esp register. That has been
+# worked around by not using the gcc parameter "-fomit-frame-pointer"
+# when compiling.
+
+import sys
+
+def main():
+ infilename, outfilename = sys.argv[1:]
+ infile = open(infilename, 'rb')
+ out = []
+ for line in infile:
+ sline = line.strip()
+ if sline == 'ret':
+ out.append('retw $2\n')
+ elif sline == 'leave':
+ out.append('movl %ebp, %esp ; popl %ebp\n')
+ else:
+ out.append(line)
+ infile.close()
+ outfile = open(outfilename, 'wb')
+ outfile.write(''.join(out))
+ outfile.close()
+
+if __name__ == '__main__':
+ main()