diff options
Diffstat (limited to 'arch/s390/boot/compressed/misc.c')
| -rw-r--r-- | arch/s390/boot/compressed/misc.c | 61 | 
1 files changed, 37 insertions, 24 deletions
diff --git a/arch/s390/boot/compressed/misc.c b/arch/s390/boot/compressed/misc.c index 0851eb1e919..57cbaff1f39 100644 --- a/arch/s390/boot/compressed/misc.c +++ b/arch/s390/boot/compressed/misc.c @@ -19,6 +19,7 @@  #undef memset  #undef memcpy  #undef memmove +#define memmove memmove  #define memzero(s, n) memset((s), 0, (n))  /* Symbols defined by linker scripts */ @@ -46,6 +47,10 @@ static unsigned long free_mem_end_ptr;  #include "../../../../lib/decompress_bunzip2.c"  #endif +#ifdef CONFIG_KERNEL_LZ4 +#include "../../../../lib/decompress_unlz4.c" +#endif +  #ifdef CONFIG_KERNEL_LZMA  #include "../../../../lib/decompress_unlzma.c"  #endif @@ -54,9 +59,13 @@ static unsigned long free_mem_end_ptr;  #include "../../../../lib/decompress_unlzo.c"  #endif +#ifdef CONFIG_KERNEL_XZ +#include "../../../../lib/decompress_unxz.c" +#endif +  extern _sclp_print_early(const char *); -int puts(const char *s) +static int puts(const char *s)  {  	_sclp_print_early(s);  	return 0; @@ -66,34 +75,37 @@ void *memset(void *s, int c, size_t n)  {  	char *xs; -	if (c == 0) -		return __builtin_memset(s, 0, n); - -	xs = (char *) s; -	if (n > 0) -		do { -			*xs++ = c; -		} while (--n > 0); +	xs = s; +	while (n--) +		*xs++ = c;  	return s;  } -void *memcpy(void *__dest, __const void *__src, size_t __n) +void *memcpy(void *dest, const void *src, size_t n)  { -	return __builtin_memcpy(__dest, __src, __n); +	const char *s = src; +	char *d = dest; + +	while (n--) +		*d++ = *s++; +	return dest;  } -void *memmove(void *__dest, __const void *__src, size_t __n) +void *memmove(void *dest, const void *src, size_t n)  { -	char *d; -	const char *s; - -	if (__dest <= __src) -		return __builtin_memcpy(__dest, __src, __n); -	d = __dest + __n; -	s = __src + __n; -	while (__n--) -		*--d = *--s; -	return __dest; +	const char *s = src; +	char *d = dest; + +	if (d <= s) { +		while (n--) +			*d++ = *s++; +	} else { +		d += n; +		s += n; +		while (n--) +			*--d = *--s; +	} +	return dest;  }  static void error(char *x) @@ -133,11 +145,12 @@ unsigned long decompress_kernel(void)  	unsigned long output_addr;  	unsigned char *output; -	check_ipl_parmblock((void *) 0, (unsigned long) output + SZ__bss_start); +	output_addr = ((unsigned long) &_end + HEAP_SIZE + 4095UL) & -4096UL; +	check_ipl_parmblock((void *) 0, output_addr + SZ__bss_start);  	memset(&_bss, 0, &_ebss - &_bss);  	free_mem_ptr = (unsigned long)&_end;  	free_mem_end_ptr = free_mem_ptr + HEAP_SIZE; -	output = (unsigned char *) ((free_mem_end_ptr + 4095UL) & -4096UL); +	output = (unsigned char *) output_addr;  #ifdef CONFIG_BLK_DEV_INITRD  	/*  | 
