/* ld script to make ARM Linux kernel * taken from the i386 version by Russell King * Written by Martin Mares */ #include #include #include #include #include #ifdef CONFIG_STRICT_MEMORY_RWX #include #endif #define PROC_INFO \ VMLINUX_SYMBOL(__proc_info_begin) = .; \ *(.proc.info.init) \ VMLINUX_SYMBOL(__proc_info_end) = .; #ifdef CONFIG_HOTPLUG_CPU #define ARM_CPU_DISCARD(x) #define ARM_CPU_KEEP(x) x #else #define ARM_CPU_DISCARD(x) x #define ARM_CPU_KEEP(x) #endif #if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \ defined(CONFIG_GENERIC_BUG) #define ARM_EXIT_KEEP(x) x #else #define ARM_EXIT_KEEP(x) #endif OUTPUT_ARCH(arm) ENTRY(stext) #ifndef __ARMEB__ jiffies = jiffies_64; #else jiffies = jiffies_64 + 4; #endif SECTIONS { #ifdef CONFIG_XIP_KERNEL . = XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR); #else . = PAGE_OFFSET + TEXT_OFFSET; #endif .init : { /* Init code and data */ _stext = .; _sinittext = .; HEAD_TEXT INIT_TEXT ARM_EXIT_KEEP(EXIT_TEXT) _einittext = .; ARM_CPU_DISCARD(PROC_INFO) __arch_info_begin = .; *(.arch.info.init) __arch_info_end = .; __tagtable_begin = .; *(.taglist.init) __tagtable_end = .; #ifdef CONFIG_SMP_ON_UP __smpalt_begin = .; *(.alt.smp.init) __smpalt_end = .; #endif __pv_table_begin = .; *(.pv_table) __pv_table_end = .; INIT_SETUP(16) INIT_CALLS CON_INITCALL SECURITY_INITCALL INIT_RAM_FS #ifndef CONFIG_XIP_KERNEL __init_begin = _stext; INIT_DATA ARM_EXIT_KEEP(EXIT_DATA) #endif } PERCPU_SECTION(L1_CACHE_BYTES) #ifndef CONFIG_XIP_KERNEL . = ALIGN(PAGE_SIZE); __init_end = .; #endif /* * unwind exit sections must be discarded before the rest of the * unwind sections get included. */ /DISCARD/ : { *(.ARM.exidx.exit.text) *(.ARM.extab.exit.text) ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text)) ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text)) #ifndef CONFIG_HOTPLUG *(.ARM.exidx.devexit.text) *(.ARM.extab.devexit.text) #endif #ifndef CONFIG_MMU *(.fixup) *(__ex_table) #endif } #ifdef CONFIG_STRICT_MEMORY_RWX . = ALIGN(1<