[i386] Add data32 prefixes to all lgdt/lidt instructions
authorMichael Brown <mcb30@etherboot.org>
Thu, 6 Nov 2008 23:08:10 +0000 (23:08 +0000)
committerMichael Brown <mcb30@etherboot.org>
Fri, 7 Nov 2008 03:48:25 +0000 (03:48 +0000)
commit29e6f9835ea0277c262b1ab2c4acee1d69cb7099
treeba53b2dcc7d2fd841ede1773a4cc3ac186a26524
parentaa95744915aba1b96fd226609e07ad1843437afc
[i386] Add data32 prefixes to all lgdt/lidt instructions

With a 16-bit operand, lgdt/lidt will load only a 24-bit base address,
ignoring the high-order bits.  This meant that we could fail to fully
restore the GDT across a call into gPXE, if the GDT happened to be
located above the 16MB mark.

Not all of our lgdt/lidt instructions require a data32 prefix (for
example, reloading the real-mode IDT can never require a 32-bit base
address), but by adding them everywhere we will hopefully not forget
the necessary ones in future.
src/arch/i386/prefix/libprefix.S
src/arch/i386/transitions/librm.S