diff --git a/ChangeLog b/ChangeLog index d94121968..e55acf9ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-03-28 Pavel Roskin + + * kern/i386/pc/startup.S: Assert that uncompressed functions + don't spill beyond GRUB_KERNEL_MACHINE_RAW_SIZE. + * kern/i386/pc/lzo1x.S: Remove all .align directives in the + code, as they push parts of the code (error handlers) beyond + GRUB_KERNEL_MACHINE_RAW_SIZE. Speed is not as important in this + code as correctness and size. + 2008-03-28 Pavel Roskin * kern/i386/pc/startup.S diff --git a/kern/i386/pc/lzo1x.S b/kern/i386/pc/lzo1x.S index 22ec42590..e942e98d6 100644 --- a/kern/i386/pc/lzo1x.S +++ b/kern/i386/pc/lzo1x.S @@ -73,7 +73,6 @@ lzo1x_decompress: jmp 3f - .align 8 .L00: LODSB .L01: @@ -119,7 +118,6 @@ lzo1x_decompress: // M2 ************************************************************************/ - .align 8 .LMATCH: cmpb $64, %al jb .LM3MATCH @@ -156,7 +154,6 @@ lzo1x_decompress: jmp 3f - .align 8 .LM3MATCH: cmpb $32, %al jb .LM4MATCH @@ -180,7 +177,6 @@ lzo1x_decompress: // copy match ************************************************************************/ - .align 2 .LCOPYLONG: /* copy match using longwords */ leal -3(%edi,%ecx), %eax shrl $2, %ecx @@ -202,7 +198,6 @@ lzo1x_decompress: jmp .LMATCH - .align 8 .LCOPYBYTE: /* copy match using bytes */ xchgl %edx,%esi subl N_3,%ecx @@ -226,7 +221,6 @@ lzo1x_decompress: jmp 3f - .align 8 .LM4MATCH: cmpb $16, %al jb .LM1MATCH @@ -252,7 +246,6 @@ lzo1x_decompress: // M1 ************************************************************************/ - .align 8 .LM1MATCH: /* a M1 match */ shrl $2, %eax diff --git a/kern/i386/pc/startup.S b/kern/i386/pc/startup.S index 635630d94..fa404a003 100644 --- a/kern/i386/pc/startup.S +++ b/kern/i386/pc/startup.S @@ -478,6 +478,11 @@ gate_a20_check_state: #include "lzo1x.S" +/* + * The code beyond this point is compressed. Assert that the uncompressed + * code fits GRUB_KERNEL_MACHINE_RAW_SIZE. + */ + . = EXT_C(start) + GRUB_KERNEL_MACHINE_RAW_SIZE /* * This call is special... it never returns... in fact it should simply