MAke a separate scratch for decompressor

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-09-21 19:39:51 +02:00
parent f8926c32b4
commit e0a8ef26e4
5 changed files with 33 additions and 14 deletions

View file

@ -80,6 +80,27 @@ void *memmove (void *dest, const void *src, grub_size_t n)
void *memcpy (void *dest, const void *src, grub_size_t n)
__attribute__ ((alias ("grub_memmove")));
void *grub_decompressor_scratch;
void
find_scratch (void *src, void *dst, unsigned long srcsize,
unsigned long dstsize)
{
#ifdef _mips
/* Decoding from ROM. */
if (((grub_addr_t) src & 0x10000000))
{
grub_decompressor_scratch = (char *) dst + dstsize;
return;
}
#endif
if ((char *) src + srcsize > (char *) dst + dstsize)
grub_decompressor_scratch = (char *) src + srcsize;
else
grub_decompressor_scratch = (char *) dst + dstsize;
return;
}
void
grub_decompress_core (void *src, void *dst, unsigned long srcsize,
unsigned long dstsize)
@ -87,6 +108,8 @@ grub_decompress_core (void *src, void *dst, unsigned long srcsize,
struct xz_dec *dec;
struct xz_buf buf;
find_scratch (src, dst, srcsize, dstsize);
dec = xz_dec_init (GRUB_DECOMPRESSOR_DICT_SIZE);
buf.in = src;

View file

@ -49,7 +49,7 @@ codestart:
/* Parse arguments. Has to be done before relocation.
So need to do it in asm. */
#if 0 // def GRUB_MACHINE_MIPS_YEELOONG
#ifdef GRUB_MACHINE_MIPS_YEELOONG
move $s2, $zero
move $s3, $zero
move $s4, $zero