#define DEBUG …
#include <linux/types.h>
#include <linux/extable.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/binfmts.h>
#include <linux/kernel.h>
#include <linux/syscalls.h>
#include <linux/stackprotector.h>
#include <linux/string.h>
#include <linux/ctype.h>
#include <linux/delay.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/initrd.h>
#include <linux/memblock.h>
#include <linux/acpi.h>
#include <linux/bootconfig.h>
#include <linux/console.h>
#include <linux/nmi.h>
#include <linux/percpu.h>
#include <linux/kmod.h>
#include <linux/kprobes.h>
#include <linux/kmsan.h>
#include <linux/vmalloc.h>
#include <linux/kernel_stat.h>
#include <linux/start_kernel.h>
#include <linux/security.h>
#include <linux/smp.h>
#include <linux/profile.h>
#include <linux/kfence.h>
#include <linux/rcupdate.h>
#include <linux/srcu.h>
#include <linux/moduleparam.h>
#include <linux/kallsyms.h>
#include <linux/buildid.h>
#include <linux/writeback.h>
#include <linux/cpu.h>
#include <linux/cpuset.h>
#include <linux/cgroup.h>
#include <linux/efi.h>
#include <linux/tick.h>
#include <linux/sched/isolation.h>
#include <linux/interrupt.h>
#include <linux/taskstats_kern.h>
#include <linux/delayacct.h>
#include <linux/unistd.h>
#include <linux/utsname.h>
#include <linux/rmap.h>
#include <linux/mempolicy.h>
#include <linux/key.h>
#include <linux/debug_locks.h>
#include <linux/debugobjects.h>
#include <linux/lockdep.h>
#include <linux/kmemleak.h>
#include <linux/padata.h>
#include <linux/pid_namespace.h>
#include <linux/device/driver.h>
#include <linux/kthread.h>
#include <linux/sched.h>
#include <linux/sched/init.h>
#include <linux/signal.h>
#include <linux/idr.h>
#include <linux/kgdb.h>
#include <linux/ftrace.h>
#include <linux/async.h>
#include <linux/shmem_fs.h>
#include <linux/slab.h>
#include <linux/perf_event.h>
#include <linux/ptrace.h>
#include <linux/pti.h>
#include <linux/blkdev.h>
#include <linux/sched/clock.h>
#include <linux/sched/task.h>
#include <linux/sched/task_stack.h>
#include <linux/context_tracking.h>
#include <linux/random.h>
#include <linux/moduleloader.h>
#include <linux/list.h>
#include <linux/integrity.h>
#include <linux/proc_ns.h>
#include <linux/io.h>
#include <linux/cache.h>
#include <linux/rodata_test.h>
#include <linux/jump_label.h>
#include <linux/kcsan.h>
#include <linux/init_syscalls.h>
#include <linux/stackdepot.h>
#include <linux/randomize_kstack.h>
#include <linux/pidfs.h>
#include <linux/ptdump.h>
#include <net/net_namespace.h>
#include <asm/io.h>
#include <asm/setup.h>
#include <asm/sections.h>
#include <asm/cacheflush.h>
#define CREATE_TRACE_POINTS
#include <trace/events/initcall.h>
#include <kunit/test.h>
static int kernel_init(void *);
bool early_boot_irqs_disabled __read_mostly;
enum system_states system_state __read_mostly;
EXPORT_SYMBOL(…);
#define MAX_INIT_ARGS …
#define MAX_INIT_ENVS …
void (*__initdata late_time_init)(void);
char __initdata boot_command_line[COMMAND_LINE_SIZE];
char *saved_command_line __ro_after_init;
unsigned int saved_command_line_len __ro_after_init;
static char *static_command_line;
static char *extra_command_line;
static char *extra_init_args;
#ifdef CONFIG_BOOT_CONFIG
static bool bootconfig_found;
static size_t initargs_offs;
#else
#define bootconfig_found …
#define initargs_offs …
#endif
static char *execute_command;
static char *ramdisk_execute_command = …;
bool static_key_initialized __read_mostly;
EXPORT_SYMBOL_GPL(…);
unsigned int reset_devices;
EXPORT_SYMBOL(…);
static int __init set_reset_devices(char *str)
{ … }
__setup(…);
static const char *argv_init[MAX_INIT_ARGS+2] = …;
const char *envp_init[MAX_INIT_ENVS+2] = …;
static const char *panic_later, *panic_param;
static bool __init obsolete_checksetup(char *line)
{ … }
unsigned long loops_per_jiffy = …;
EXPORT_SYMBOL(…);
static int __init debug_kernel(char *str)
{ … }
static int __init quiet_kernel(char *str)
{ … }
early_param(…);
early_param(…);
static int __init loglevel(char *str)
{ … }
early_param(…);
#ifdef CONFIG_BLK_DEV_INITRD
static void * __init get_boot_config_from_initrd(size_t *_size)
{ … }
#else
static void * __init get_boot_config_from_initrd(size_t *_size)
{
return NULL;
}
#endif
#ifdef CONFIG_BOOT_CONFIG
static char xbc_namebuf[XBC_KEYLEN_MAX] __initdata;
#define rest …
static int __init xbc_snprint_cmdline(char *buf, size_t size,
struct xbc_node *root)
{ … }
#undef rest
static char * __init xbc_make_cmdline(const char *key)
{ … }
static int __init bootconfig_params(char *param, char *val,
const char *unused, void *arg)
{ … }
static int __init warn_bootconfig(char *str)
{ … }
static void __init setup_boot_config(void)
{ … }
static void __init exit_boot_config(void)
{ … }
#else
static void __init setup_boot_config(void)
{
get_boot_config_from_initrd(NULL);
}
static int __init warn_bootconfig(char *str)
{
pr_warn("WARNING: 'bootconfig' found on the kernel command line but CONFIG_BOOT_CONFIG is not set.\n");
return 0;
}
#define exit_boot_config …
#endif
early_param(…);
bool __init cmdline_has_extra_options(void)
{ … }
static void __init repair_env_string(char *param, char *val)
{ … }
static int __init set_init_arg(char *param, char *val,
const char *unused, void *arg)
{ … }
static int __init unknown_bootoption(char *param, char *val,
const char *unused, void *arg)
{ … }
static int __init init_setup(char *str)
{ … }
__setup(…);
static int __init rdinit_setup(char *str)
{ … }
__setup(…);
#ifndef CONFIG_SMP
static inline void setup_nr_cpu_ids(void) { }
static inline void smp_prepare_cpus(unsigned int maxcpus) { }
#endif
static void __init setup_command_line(char *command_line)
{ … }
static __initdata DECLARE_COMPLETION(kthreadd_done);
static noinline void __ref __noreturn rest_init(void)
{ … }
static int __init do_early_param(char *param, char *val,
const char *unused, void *arg)
{ … }
void __init parse_early_options(char *cmdline)
{ … }
void __init parse_early_param(void)
{ … }
void __init __weak arch_post_acpi_subsys_init(void) { … }
void __init __weak smp_setup_processor_id(void)
{ … }
void __init __weak smp_prepare_boot_cpu(void)
{ … }
# if THREAD_SIZE >= PAGE_SIZE
void __init __weak thread_stack_cache_init(void)
{ … }
#endif
void __init __weak poking_init(void) { … }
void __init __weak pgtable_cache_init(void) { … }
void __init __weak trap_init(void) { … }
bool initcall_debug;
core_param(…);
#ifdef TRACEPOINTS_ENABLED
static void __init initcall_debug_enable(void);
#else
static inline void initcall_debug_enable(void)
{
}
#endif
#ifdef CONFIG_RANDOMIZE_KSTACK_OFFSET
DEFINE_STATIC_KEY_MAYBE_RO(CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT,
randomize_kstack_offset);
DEFINE_PER_CPU(u32, kstack_offset);
static int __init early_randomize_kstack_offset(char *buf)
{ … }
early_param(…);
#endif
static void __init print_unknown_bootoptions(void)
{ … }
static void __init early_numa_node_init(void)
{ … }
asmlinkage __visible __init __no_sanitize_address __noreturn __no_stack_protector
void start_kernel(void)
{ … }
static void __init do_ctors(void)
{ … }
#ifdef CONFIG_KALLSYMS
struct blacklist_entry { … };
static __initdata_or_module LIST_HEAD(blacklisted_initcalls);
static int __init initcall_blacklist(char *str)
{ … }
static bool __init_or_module initcall_blacklisted(initcall_t fn)
{ … }
#else
static int __init initcall_blacklist(char *str)
{
pr_warn("initcall_blacklist requires CONFIG_KALLSYMS\n");
return 0;
}
static bool __init_or_module initcall_blacklisted(initcall_t fn)
{
return false;
}
#endif
__setup(…);
static __init_or_module void
trace_initcall_start_cb(void *data, initcall_t fn)
{ … }
static __init_or_module void
trace_initcall_finish_cb(void *data, initcall_t fn, int ret)
{ … }
static ktime_t initcall_calltime;
#ifdef TRACEPOINTS_ENABLED
static void __init initcall_debug_enable(void)
{ … }
#define do_trace_initcall_start …
#define do_trace_initcall_finish …
#else
static inline void do_trace_initcall_start(initcall_t fn)
{
if (!initcall_debug)
return;
trace_initcall_start_cb(&initcall_calltime, fn);
}
static inline void do_trace_initcall_finish(initcall_t fn, int ret)
{
if (!initcall_debug)
return;
trace_initcall_finish_cb(&initcall_calltime, fn, ret);
}
#endif
int __init_or_module do_one_initcall(initcall_t fn)
{ … }
static initcall_entry_t *initcall_levels[] __initdata = …;
static const char *initcall_level_names[] __initdata = …;
static int __init ignore_unknown_bootoption(char *param, char *val,
const char *unused, void *arg)
{ … }
static void __init do_initcall_level(int level, char *command_line)
{ … }
static void __init do_initcalls(void)
{ … }
static void __init do_basic_setup(void)
{ … }
static void __init do_pre_smp_initcalls(void)
{ … }
static int run_init_process(const char *init_filename)
{ … }
static int try_to_run_init_process(const char *init_filename)
{ … }
static noinline void __init kernel_init_freeable(void);
#if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_STRICT_MODULE_RWX)
bool rodata_enabled __ro_after_init = …;
#ifndef arch_parse_debug_rodata
static inline bool arch_parse_debug_rodata(char *str) { … }
#endif
static int __init set_debug_rodata(char *str)
{ … }
early_param(…);
#endif
static void mark_readonly(void)
{ … }
void __weak free_initmem(void)
{ … }
static int __ref kernel_init(void *unused)
{ … }
void __init console_on_rootfs(void)
{ … }
static noinline void __init kernel_init_freeable(void)
{ … }