From: Pavel Roskin <proski@gnu.org>
To: grub-devel@gnu.org
Subject: [PATCH 2/2] Disable lzo compression, lzma is doing its job just fine
Date: Wed, 15 Jul 2009 19:40:45 -0400 [thread overview]
Message-ID: <20090715234045.31016.49690.stgit@mj.roinet.com> (raw)
In-Reply-To: <20090715234038.31016.40532.stgit@mj.roinet.com>
ChangeLog:
* Makefile.in: Remove LIBLZO and enable_lzo.
* conf/i386-pc.rmk: Remove lzo support.
* configure.ac: Remove checks for lzo, don't define ENABLE_LZMA.
* include/grub/i386/pc/kernel.h: Define ENABLE_LZMA. Remove lzo
support.
* kern/i386/pc/lzo1x.S: Remove.
* kern/i386/pc/startup.S: Remove lzo support.
* util/i386/pc/grub-mkimage.c: Likewise.
---
Makefile.in | 2
conf/i386-pc.rmk | 6 -
configure.ac | 26 ---
include/grub/i386/pc/kernel.h | 7 -
kern/i386/pc/lzo1x.S | 315 -----------------------------------------
kern/i386/pc/startup.S | 19 --
util/i386/pc/grub-mkimage.c | 54 -------
7 files changed, 8 insertions(+), 421 deletions(-)
delete mode 100644 kern/i386/pc/lzo1x.S
diff --git a/Makefile.in b/Makefile.in
index 3d208e7..29e347a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -94,7 +94,6 @@ HELP2MAN := LANG=C $(HELP2MAN) --no-info --source=FSF
endif
AWK = @AWK@
LIBCURSES = @LIBCURSES@
-LIBLZO = @LIBLZO@
YACC = @YACC@
UNIFONT_BDF = @UNIFONT_BDF@
@@ -103,7 +102,6 @@ enable_grub_emu = @enable_grub_emu@
enable_grub_emu_usb = @enable_grub_emu_usb@
enable_grub_fstest = @enable_grub_fstest@
enable_grub_pe2elf = @enable_grub_pe2elf@
-enable_lzo = @enable_lzo@
enable_grub_mkfont = @enable_grub_mkfont@
freetype_cflags = @freetype_cflags@
freetype_libs = @freetype_libs@
diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk
index f1915b6..f5bded2 100644
--- a/conf/i386-pc.rmk
+++ b/conf/i386-pc.rmk
@@ -89,14 +89,8 @@ sbin_UTILITIES += grub-emu
endif
# For grub-mkimage.
-ifeq ($(enable_lzo), yes)
-grub_mkimage_SOURCES = util/i386/pc/grub-mkimage.c util/misc.c \
- util/resolve.c
-grub_mkimage_LDFLAGS = $(LIBLZO)
-else
grub_mkimage_SOURCES = util/i386/pc/grub-mkimage.c util/misc.c \
util/resolve.c lib/LzmaEnc.c lib/LzFind.c
-endif
grub_mkimage_CFLAGS = -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)
util/i386/pc/grub-mkimage.c_DEPENDENCIES = Makefile
diff --git a/configure.ac b/configure.ac
index 8b12c58..66f2b59 100644
--- a/configure.ac
+++ b/configure.ac
@@ -171,32 +171,6 @@ if test x$grub_cv_apple_cc = xyes ; then
ASFLAGS="$ASFLAGS -DAPPLE_CC=1"
fi
-# Check LZO when compiling for the i386-pc.
-if test "$target_cpu"-"$platform" = i386-pc; then
- AC_ARG_ENABLE([lzo],
- [AS_HELP_STRING([--enable-lzo],
- [use lzo to compress kernel (default is lzma)])])
- [if [ x"$enable_lzo" = xyes ]; then
- # There are three possibilities. LZO version 2 installed with the name
- # liblzo2, with the name liblzo, and LZO version 1.]
- AC_DEFINE([ENABLE_LZO], [1], [Use lzo compression])
- AC_CHECK_LIB([lzo2], [__lzo_init_v2], [LIBLZO="-llzo2"],
- [AC_CHECK_LIB([lzo], [__lzo_init_v2], [LIBLZO="-llzo"],
- [AC_CHECK_LIB([lzo], [__lzo_init2], [LIBLZO="-llzo"],
- [AC_MSG_ERROR([LZO library version 1.02 or later is required])])])])
- AC_SUBST([LIBLZO])
- [LIBS="$LIBS $LIBLZO"]
- AC_CHECK_FUNC([lzo1x_999_compress], ,
- [AC_MSG_ERROR([LZO1X-999 must be enabled])])
-
- [# LZO version 2 uses lzo/lzo1x.h, while LZO version 1 uses lzo1x.h.]
- AC_CHECK_HEADERS([lzo/lzo1x.h lzo1x.h])
- [else]
- AC_DEFINE([ENABLE_LZMA], [1], [Use lzma compression])
- [fi]
- AC_SUBST([enable_lzo])
-fi
-
# Check for functions.
AC_CHECK_FUNCS(posix_memalign memalign asprintf)
diff --git a/include/grub/i386/pc/kernel.h b/include/grub/i386/pc/kernel.h
index 5b9d8dc..e830afa 100644
--- a/include/grub/i386/pc/kernel.h
+++ b/include/grub/i386/pc/kernel.h
@@ -41,11 +41,10 @@
#define GRUB_KERNEL_MACHINE_DATA_END 0x5c
/* The size of the first region which won't be compressed. */
-#if defined(ENABLE_LZO)
-#define GRUB_KERNEL_MACHINE_RAW_SIZE (GRUB_KERNEL_MACHINE_DATA_END + 0x450)
-#elif defined(ENABLE_LZMA)
#define GRUB_KERNEL_MACHINE_RAW_SIZE (GRUB_KERNEL_MACHINE_DATA_END + 0x5F0)
-#endif
+
+/* Enable LZMA compression */
+#define ENABLE_LZMA 1
#ifndef ASM_FILE
diff --git a/kern/i386/pc/lzo1x.S b/kern/i386/pc/lzo1x.S
deleted file mode 100644
index 49ba8cc..0000000
--- a/kern/i386/pc/lzo1x.S
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * GRUB -- GRand Unified Bootloader
- * Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer
- * Copyright (C) 2003,2007 Free Software Foundation, Inc.
- *
- * GRUB is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GRUB is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * This code was stolen from the files enter.sh, leave.sh, lzo1x_d.sh,
- * lzo1x_f.s and lzo_asm.h in LZO version 1.08, and was heavily modified
- * to adapt it to GRUB's requirement.
- *
- * See <http://www.oberhumer.com/opensource/lzo/>, for more information
- * about LZO.
- */
-
-#define INP 4+16(%esp)
-#define INS 8+16(%esp)
-#define OUTP 12+16(%esp)
-#define NN 3
-#define N_3 %ebp
-#define N_255 $255
-#define LODSB movb (%esi), %al ; incl %esi
-#define NOTL_3(r) xorl N_3, r
-#define MOVSL(r1,r2,x) movl (r1), x ; addl $4, r1 ; movl x, (r2) ; addl $4, r2
-#define COPYL_C(r1,r2,x,rc) 9: MOVSL(r1,r2,x) ; decl rc ; jnz 9b
-#define COPYL(r1,r2,x) COPYL_C(r1,r2,x,%ecx)
-
-lzo1x_decompress:
- pushl %ebp
- pushl %edi
- pushl %esi
- pushl %ebx
-
- cld
-
- movl INP, %esi
- movl OUTP, %edi
- movl $3, %ebp
-
-
- xorl %eax, %eax
- xorl %ebx, %ebx /* high bits 9-32 stay 0 */
- lodsb
- cmpb $17, %al
- jbe .L01
- subb $17-NN, %al
- jmp .LFLR
-
-
-/***********************************************************************
-// literal run
-************************************************************************/
-
-0: addl N_255, %eax
-1: movb (%esi), %bl
- incl %esi
- orb %bl, %bl
- jz 0b
- leal 18+NN(%eax,%ebx), %eax
- jmp 3f
-
-
-.L00:
- LODSB
-.L01:
- cmpb $16, %al
- jae .LMATCH
-
- /* a literal run */
- orb %al, %al
- jz 1b
- addl $3+NN, %eax
-3:
-.LFLR:
- movl %eax, %ecx
- NOTL_3(%eax)
- shrl $2, %ecx
- andl N_3, %eax
- COPYL(%esi,%edi,%edx)
- subl %eax, %esi
- subl %eax, %edi
-
- LODSB
- cmpb $16, %al
- jae .LMATCH
-
-
-/***********************************************************************
-// R1
-************************************************************************/
-
- shrl $2, %eax
- movb (%esi), %bl
- leal -0x801(%edi), %edx
- leal (%eax,%ebx,4), %eax
- incl %esi
- subl %eax, %edx
- movl (%edx), %ecx
- movl %ecx, (%edi)
- addl N_3, %edi
- jmp .LMDONE
-
-
-/***********************************************************************
-// M2
-************************************************************************/
-
-.LMATCH:
- cmpb $64, %al
- jb .LM3MATCH
-
- /* a M2 match */
- movl %eax, %ecx
- shrl $2, %eax
- leal -1(%edi), %edx
- andl $7, %eax
- movb (%esi), %bl
- shrl $5, %ecx
- leal (%eax,%ebx,8), %eax
- incl %esi
- subl %eax, %edx
-
- addl $1+3, %ecx
-
- cmpl N_3, %eax
- jae .LCOPYLONG
- jmp .LCOPYBYTE
-
-
-/***********************************************************************
-// M3
-************************************************************************/
-
-0: addl N_255, %eax
-1: movb (%esi), %bl
- incl %esi
- orb %bl, %bl
- jz 0b
- leal 33+NN(%eax,%ebx), %ecx
- xorl %eax, %eax
- jmp 3f
-
-
-.LM3MATCH:
- cmpb $32, %al
- jb .LM4MATCH
-
- /* a M3 match */
- andl $31, %eax
- jz 1b
- lea 2+NN(%eax), %ecx
-3:
- movw (%esi), %ax
- leal -1(%edi), %edx
- shrl $2, %eax
- addl $2, %esi
- subl %eax, %edx
-
- cmpl N_3, %eax
- jb .LCOPYBYTE
-
-
-/***********************************************************************
-// copy match
-************************************************************************/
-
-.LCOPYLONG: /* copy match using longwords */
- leal -3(%edi,%ecx), %eax
- shrl $2, %ecx
- COPYL(%edx,%edi,%ebx)
- movl %eax, %edi
- xorl %ebx, %ebx
-
-.LMDONE:
- movb -2(%esi), %al
- andl N_3, %eax
- jz .L00
-.LFLR3:
- movl (%esi), %edx
- addl %eax, %esi
- movl %edx, (%edi)
- addl %eax, %edi
-
- LODSB
- jmp .LMATCH
-
-
-.LCOPYBYTE: /* copy match using bytes */
- xchgl %edx,%esi
- subl N_3,%ecx
-
- rep
- movsb
- movl %edx, %esi
- jmp .LMDONE
-
-
-/***********************************************************************
-// M4
-************************************************************************/
-
-0: addl N_255, %ecx
-1: movb (%esi), %bl
- incl %esi
- orb %bl, %bl
- jz 0b
- leal 9+NN(%ebx,%ecx), %ecx
- jmp 3f
-
-
-.LM4MATCH:
- cmpb $16, %al
- jb .LM1MATCH
-
- /* a M4 match */
- movl %eax, %ecx
- andl $8, %eax
- shll $13, %eax /* save in bit 16 */
- andl $7, %ecx
- jz 1b
- addl $2+NN, %ecx
-3:
- movw (%esi), %ax
- addl $2, %esi
- leal -0x4000(%edi), %edx
- shrl $2, %eax
- jz .LEOF
- subl %eax, %edx
- jmp .LCOPYLONG
-
-
-/***********************************************************************
-// M1
-************************************************************************/
-
-.LM1MATCH:
- /* a M1 match */
- shrl $2, %eax
- movb (%esi), %bl
- leal -1(%edi), %edx
- leal (%eax,%ebx,4), %eax
- incl %esi
- subl %eax, %edx
-
- movb (%edx), %al /* we must use this because edx can be edi-1 */
- movb %al, (%edi)
- movb 1(%edx), %bl
- movb %bl, 1(%edi)
- addl $2, %edi
- jmp .LMDONE
-
-
-/***********************************************************************
-//
-************************************************************************/
-
-.LEOF:
-/**** xorl %eax,%eax eax=0 from above */
-
- cmpl $3+NN, %ecx /* ecx must be 3/6 */
- setnz %al
-
- /* check compressed size */
- movl INP, %edx
- addl INS, %edx
- cmpl %edx, %esi /* check compressed size */
- ja .L_input_overrun
- jb .L_input_not_consumed
-
-.L_leave:
- negl %eax
- jnz 1f
-
- subl OUTP, %edi /* write back the uncompressed size */
- movl %edi, %eax
-
-1: popl %ebx
- popl %esi
- popl %edi
- popl %ebp
- ret
-
-.L_input_not_consumed:
- movl $8, %eax /* LZO_E_INPUT_NOT_CONSUMED */
- jmp .L_leave
-
-.L_input_overrun:
- movl $4, %eax /* LZO_E_INPUT_OVERRUN */
- jmp .L_leave
-
-#undef INP
-#undef INS
-#undef OUTP
-#undef NN
-#undef NN
-#undef N_3
-#undef N_255
-#undef LODSB
-#undef NOTL_3
-#undef MOVSL
-#undef COPYL_C
-#undef COPYL
diff --git a/kern/i386/pc/startup.S b/kern/i386/pc/startup.S
index 171fbea..be258fb 100644
--- a/kern/i386/pc/startup.S
+++ b/kern/i386/pc/startup.S
@@ -210,20 +210,7 @@ codestart:
incl %eax
call EXT_C(grub_gate_a20)
-#if defined(ENABLE_LZO)
- /* decompress the compressed part and put the result at 1MB */
- movl $GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR, %esi
- movl $(_start + GRUB_KERNEL_MACHINE_RAW_SIZE), %edi
-
- pushl %esi
- pushl EXT_C(grub_compressed_size)
- pushl %edi
- call lzo1x_decompress
- addl $12, %esp
-
- movl %eax, %ecx
- cld
-#elif defined(ENABLE_LZMA)
+#ifdef ENABLE_LZMA
movl $GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR, %edi
movl $(_start + GRUB_KERNEL_MACHINE_RAW_SIZE), %esi
pushl %edi
@@ -451,9 +438,7 @@ gate_a20_check_state:
popl %ebx
ret
-#if defined(ENABLE_LZO)
-#include "lzo1x.S"
-#elif defined(ENABLE_LZMA)
+#ifdef ENABLE_LZMA
#include "lzma_decode.S"
#endif
diff --git a/util/i386/pc/grub-mkimage.c b/util/i386/pc/grub-mkimage.c
index ee1af82..b81392c 100644
--- a/util/i386/pc/grub-mkimage.c
+++ b/util/i386/pc/grub-mkimage.c
@@ -36,57 +36,9 @@
#define _GNU_SOURCE 1
#include <getopt.h>
-#if defined(ENABLE_LZO)
-
-#if defined(HAVE_LZO_LZO1X_H)
-# include <lzo/lzo1x.h>
-#elif defined(HAVE_LZO1X_H)
-# include <lzo1x.h>
-#endif
-
-#elif defined(ENABLE_LZMA)
-
+#ifdef ENABLE_LZMA
#include <grub/lib/LzmaEnc.h>
-#endif
-
-#if defined(ENABLE_LZO)
-
-static void
-compress_kernel (char *kernel_img, size_t kernel_size,
- char **core_img, size_t *core_size)
-{
- lzo_uint size;
- char *wrkmem;
-
- if (kernel_size < GRUB_KERNEL_MACHINE_RAW_SIZE)
- grub_util_error ("the core image is too small");
-
- if (lzo_init () != LZO_E_OK)
- grub_util_error ("cannot initialize LZO");
-
- *core_img = xmalloc (kernel_size + kernel_size / 64 + 16 + 3);
- wrkmem = xmalloc (LZO1X_999_MEM_COMPRESS);
-
- memcpy (*core_img, kernel_img, GRUB_KERNEL_MACHINE_RAW_SIZE);
-
- grub_util_info ("compressing the core image");
- if (lzo1x_999_compress ((const lzo_byte *) (kernel_img
- + GRUB_KERNEL_MACHINE_RAW_SIZE),
- kernel_size - GRUB_KERNEL_MACHINE_RAW_SIZE,
- (lzo_byte *) (*core_img
- + GRUB_KERNEL_MACHINE_RAW_SIZE),
- &size, wrkmem)
- != LZO_E_OK)
- grub_util_error ("cannot compress the kernel image");
-
- free (wrkmem);
-
- *core_size = (size_t) size + GRUB_KERNEL_MACHINE_RAW_SIZE;
-}
-
-#elif defined(ENABLE_LZMA)
-
static void *SzAlloc(void *p, size_t size) { p = p; return xmalloc(size); }
static void SzFree(void *p, void *address) { p = p; free(address); }
static ISzAlloc g_Alloc = { SzAlloc, SzFree };
@@ -124,7 +76,7 @@ compress_kernel (char *kernel_img, size_t kernel_size,
*core_size += GRUB_KERNEL_MACHINE_RAW_SIZE;
}
-#else
+#else /* No lzma compression */
static void
compress_kernel (char *kernel_img, size_t kernel_size,
@@ -135,7 +87,7 @@ compress_kernel (char *kernel_img, size_t kernel_size,
*core_size = kernel_size;
}
-#endif
+#endif /* No lzma compression */
static void
generate_image (const char *dir, char *prefix, FILE *out, char *mods[],
next prev parent reply other threads:[~2009-07-15 23:40 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-15 23:40 [PATCH 1/2] Introduce grub_malloc0() Pavel Roskin
2009-07-15 23:40 ` Pavel Roskin [this message]
2009-07-16 16:24 ` [PATCH 2/2] Disable lzo compression, lzma is doing its job just fine Vladimir 'phcoder' Serbinenko
2009-07-18 18:18 ` Robert Millan
2009-07-19 17:45 ` Pavel Roskin
2009-07-19 18:24 ` Vladimir 'phcoder' Serbinenko
2009-07-19 20:33 ` Pavel Roskin
2009-07-16 15:22 ` [PATCH 1/2] Introduce grub_malloc0() Vladimir 'phcoder' Serbinenko
2009-07-16 15:41 ` Pavel Roskin
2009-07-16 15:53 ` Vladimir 'phcoder' Serbinenko
2009-07-17 15:02 ` Pavel Roskin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090715234045.31016.49690.stgit@mj.roinet.com \
--to=proski@gnu.org \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.