cregit-Linux how code gets into the kernel

Release 4.11 arch/arm/boot/compressed/misc.c

/*
 * misc.c
 * 
 * This is a collection of several routines from gzip-1.0.3 
 * adapted for Linux.
 *
 * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
 *
 * Modified for ARM Linux by Russell King
 *
 * Nicolas Pitre <nico@visuaide.com>  1999/04/14 :
 *  For this code to run directly from Flash, all constant variables must
 *  be marked with 'const' and all other variables initialized at run-time 
 *  only.  This way all non constant variables will end up in the bss segment,
 *  which should point to addresses in RAM and cleared to 0 on start.
 *  This allows for a much quicker boot time.
 */


unsigned int __machine_arch_type;

#include <linux/compiler.h>	/* for inline */
#include <linux/types.h>
#include <linux/linkage.h>

static void putstr(const char *ptr);
extern void error(char *x);

#include CONFIG_UNCOMPRESS_INCLUDE

#ifdef CONFIG_DEBUG_ICEDCC

#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) || defined(CONFIG_CPU_V7)


static void icedcc_putc(int ch) { int status, i = 0x4000000; do { if (--i < 0) return; asm volatile ("mrc p14, 0, %0, c0, c1, 0" : "=r" (status)); } while (status & (1 << 29)); asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch)); }

Contributors

PersonTokensPropCommitsCommitProp
Tony Lindgren42100.00%1100.00%
Total42100.00%1100.00%

#elif defined(CONFIG_CPU_XSCALE)
static void icedcc_putc(int ch) { int status, i = 0x4000000; do { if (--i < 0) return; asm volatile ("mrc p14, 0, %0, c14, c0, 0" : "=r" (status)); } while (status & (1 << 28)); asm("mcr p14, 0, %0, c8, c0, 0" : : "r" (ch)); }

Contributors

PersonTokensPropCommitsCommitProp
Jean-Christophe Plagniol-Villard42100.00%1100.00%
Total42100.00%1100.00%

#else
static void icedcc_putc(int ch) { int status, i = 0x4000000; do { if (--i < 0) return; asm volatile ("mrc p14, 0, %0, c0, c0, 0" : "=r" (status)); } while (status & 2); asm("mcr p14, 0, %0, c1, c0, 0" : : "r" (ch)); }

Contributors

PersonTokensPropCommitsCommitProp
Russell King2873.68%125.00%
Ben Dooks513.16%125.00%
Uwe Zeisberger410.53%125.00%
Al Viro12.63%125.00%
Total38100.00%4100.00%

#endif #define putc(ch) icedcc_putc(ch) #endif
static void putstr(const char *ptr) { char c; while ((c = *ptr++) != '\0') { if (c == '\n') putc('\r'); putc(c); } flush(); }

Contributors

PersonTokensPropCommitsCommitProp
Russell King2859.57%150.00%
Ben Dooks1940.43%150.00%
Total47100.00%2100.00%

/* * gzip declarations */ extern char input_data[]; extern char input_data_end[]; unsigned char *output_data; unsigned long free_mem_ptr; unsigned long free_mem_end_ptr; #ifndef arch_error #define arch_error(x) #endif
void error(char *x) { arch_error(x); putstr("\n\n"); putstr(x); putstr("\n\n -- System halted"); while(1); /* Halt */ }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2777.14%133.33%
Ben Dooks514.29%133.33%
Nico Pitre38.57%133.33%
Total35100.00%3100.00%


asmlinkage void __div0(void) { error("Attempting division by 0!"); }

Contributors

PersonTokensPropCommitsCommitProp
Albin Tonnerre13100.00%1100.00%
Total13100.00%1100.00%

unsigned long __stack_chk_guard;
void __stack_chk_guard_setup(void) { __stack_chk_guard = 0x000a0dff; }

Contributors

PersonTokensPropCommitsCommitProp
Kees Cook11100.00%1100.00%
Total11100.00%1100.00%


void __stack_chk_fail(void) { error("stack-protector: Kernel stack is corrupted\n"); }

Contributors

PersonTokensPropCommitsCommitProp
Kees Cook12100.00%1100.00%
Total12100.00%1100.00%

extern int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));
void decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p, unsigned long free_mem_ptr_end_p, int arch_id) { int ret; __stack_chk_guard_setup(); output_data = (unsigned char *)output_start; free_mem_ptr = free_mem_ptr_p; free_mem_end_ptr = free_mem_ptr_end_p; __machine_arch_type = arch_id; arch_decomp_setup(); putstr("Uncompressing Linux..."); ret = do_decompress(input_data, input_data_end - input_data, output_data, error); if (ret) error("decompressor returned an error"); else putstr(" done, booting the kernel.\n"); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)4350.59%436.36%
Albin Tonnerre2023.53%19.09%
Nico Pitre1720.00%327.27%
Kees Cook33.53%19.09%
Russell King11.18%19.09%
Thomas Petazzoni11.18%19.09%
Total85100.00%11100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Russell King11524.68%416.67%
Linus Torvalds (pre-git)9319.96%416.67%
Jean-Christophe Plagniol-Villard4810.30%14.17%
Tony Lindgren4710.09%14.17%
Ben Dooks439.23%28.33%
Albin Tonnerre398.37%14.17%
Kees Cook306.44%14.17%
Nico Pitre224.72%312.50%
Mark Brown91.93%14.17%
Rusty Russell71.50%14.17%
Stephen Boyd51.07%14.17%
Uwe Zeisberger40.86%14.17%
Thomas Petazzoni20.43%14.17%
Shawn Guo10.21%14.17%
Al Viro10.21%14.17%
Total466100.00%24100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.