typedef int (*initcall_t) (void); typedef long long __kernel_loff_t; typedef __kernel_loff_t loff_t; static __attribute__ ((__section__(".init.data"))) char *message; static void __attribute__ ((__section__(".init.text"))) error(char *x) { if (!message) message = x; } static __attribute__ ((__section__(".init.data"))) enum state { Start, Collect, GotHeader, SkipIt, GotName, CopyFile, GotSymlink, Reset } state, next_state; static __attribute__ ((__section__(".init.data"))) loff_t this_header, next_header; static __attribute__ ((__section__(".init.data"))) char *collected; static int __attribute__ ((__section__(".init.text"))) do_start(void) { } static int __attribute__ ((__section__(".init.text"))) do_collect(void) { } static int __attribute__ ((__section__(".init.text"))) do_header(void) { if (memcmp(collected, "070707", 6) == 0) { error("incorrect cpio method used: use -H newc option"); } } static int __attribute__ ((__section__(".init.text"))) do_skip(void) { } static int __attribute__ ((__section__(".init.text"))) do_reset(void) { } static int __attribute__ ((__section__(".init.text"))) do_name(void) { } static int __attribute__ ((__section__(".init.text"))) do_copy(void) { } static int __attribute__ ((__section__(".init.text"))) do_symlink(void) { } static __attribute__ ((__section__(".init.data"))) int (*actions[]) (void) = { [Start] = do_start,[Collect] = do_collect,[GotHeader] = do_header,[SkipIt] = do_skip,[GotName] = do_name,[CopyFile] = do_copy,[GotSymlink] = do_symlink,[Reset] = do_reset,}; static int __attribute__ ((__section__(".init.text"))) write_buffer(char *buf, unsigned len) { while (!actions[state] ()) ; } static char * __attribute__ ((__section__(".init.text"))) unpack_to_rootfs(char *buf, unsigned len, int check_only) { int written; while (!message && len) { if (*buf == '0' && !(this_header & 3)) { written = write_buffer(buf, len); } if (state != Reset) error("junk in gzipped archive"); } } extern char __initramfs_start[], __initramfs_end[]; static int __attribute__ ((__section__(".init.text"))) populate_rootfs(void) { char *err = unpack_to_rootfs(__initramfs_start, __initramfs_end - __initramfs_start, 0); } static initcall_t __initcall_populate_rootfsrootfs __attribute__ ((__used__)) __attribute__ ((__section__(".initcall" "rootfs" ".init"))) = populate_rootfs;