It's important for Linux kernel to load vmlinux.lds:
arch/arm/kernel/vmlinux.lds-----> __proc_info_begin=.;
*(.proc.info.init)
__proc_info_end=.;
arch/arm/mm/proc-armv6.S-------> .section ".proc.info.init" #alloc, #execinstr
.type __arm6_proc_info,#object
__arm6_proc_info:
arch/arm/kernel/head-common.S--> __lookup_processor_type:
......
.long __proc_info_begin
.long __proc_info_end
The .proc.info.init is structure :proc_info_list
arch/arm/include/asm/procinfo.h
struct proc_info_list{
unsigned int cpu_val;
unsigned int cpu_mask
unsigned long __cpu_mm_mmu_flags;
unsigned long __cpu_io_mmu_flags;
unsigned long __cpu_flush;
const char *arch_name;
const char *elf_name;
const char *cpu_name;
unsigned int elf_hwcap;
struct processor *proc;
struct cpu_tlb_fns *tlb;
struct cpu_user_fns *user;
struct cpu_cache_fns *cache;
};