comments. Avoid copiing one more byte than necessary (just in case).
(grub_vga_text_term): Use grub_vga_text_init_fini() instead of
grub_vga_text_cls().
+ * kern/i386/loader.S (grub_multiboot_backward_relocator): Improve
+ comments. Avoid copiing one more byte than necessary (just in case).
+
2008-11-20 Robert Millan <rmh@aybabtu.com>
* kern/i386/coreboot/init.c (grub_time_tics): Remove variable.
* edx: Offset of the entry point (relative to the beginning of the block).
*/
VARIABLE(grub_multiboot_forward_relocator)
- cld
+ /* Add entry offset. */
addl %edi, %edx
+
+ /* Forward copy. */
+ cld
rep
movsb
+
jmp *%edx
VARIABLE(grub_multiboot_forward_relocator_end)
VARIABLE(grub_multiboot_backward_relocator)
+ /* Add entry offset (before %edi is mangled). */
+ addl %edi, %edx
+
+ /* Backward movsb is implicitly off-by-one. compensate that. */
+ decl %esi
+ decl %edi
+
+ /* Backward copy. */
std
addl %ecx, %esi
addl %ecx, %edi
- /* backward movsb is implicitly off-by-one. compensate that. */
- incl %ecx
rep
movsb
- /* same problem again. */
- incl %edi
- addl %edi, %edx
+
jmp *%edx
VARIABLE(grub_multiboot_backward_relocator_end)