On 12/15/2010 10:39 PM, kashyap garimella wrote:
> Hello everybody,
>
> I have tried to boot Invaders <http://www.erikyyy.de/invaders/>, a
> small multiboot compliant kernel game, and found that it was not
> working(triple faults). After a lot of painful debugging, I found the
> bug in grub-core/loader/i386/multiboot_mbi.c. Here is the patch:
> === modified file 'grub-core/loader/i386/multiboot_mbi.c'
> --- grub-core/loader/i386/multiboot_mbi.c    2010-09-29 21:51:12 +0000
> +++ grub-core/loader/i386/multiboot_mbi.c    2010-12-15 21:25:52 +0000
> @@ -141,7 +141,7 @@
>      }
>  
>        if (header->bss_end_addr)
> -    grub_memset ((grub_uint32_t *) source + load_size, 0,
> +    grub_memset ((grub_uint8_t *) source + load_size, 0,
>               header->bss_end_addr - header->load_addr - load_size);
>  
>        grub_multiboot_payload_eip = header->entry_addr;
>
>
Thanks you. Committed locally will be pushed as soon as savannah is back
online.
> --
> The bug is very simple, but tough to find. "(grub_uint32_t *) source +
> load_size" will give the resultant address as "source + 4 *
> load_size", since source is made 32-bit pointer. But it is wrong
> because load_size is the size in bytes. So "source" should also be
> treated in bytes, i.e. grub_uint8_t. Hence a single line fix will
> solve the problem. Pfa the patch file. I have read the multiboot specs
> from here </>. I have used grub_printf to debug. I would like to know
> if there is any better debugging technique for memory debugging.
>
> Thanks,
> Kashyap Garimella
>
>
> _______________________________________________
> Bug-grub mailing list
> [email protected]
> http://lists.gnu.org/mailman/listinfo/bug-grub
>   


-- 
Regards
Vladimir 'φ-coder/phcoder' Serbinenko


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Bug-grub mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-grub

Reply via email to