The individual sections are created by compiler and assembler.
The linker using the linker script creates the vmlinux with the following structure.
See the attached System.map file for the vmlinux structure.
* OUTPUT_FORMAT(...)
* OUTPUT_ARCH(...)
* ENTRY(...)
* SECTIONS
* {
* . = START;
* __init_begin = .;
* HEAD_TEXT_SECTION ->> .head.text
* INIT_TEXT_SECTION(PAGE_SIZE) ->> _sinittext
.init.text .devinit.text .cpuinit.text .meminit.text
_sinittext
* INIT_DATA_SECTION(...) ->> .init.data .devinit.data .cpuinit.data .meminit.data
__ctors_start .ctors __ctors_end
.init.rodata
__start_mcount_loc __mcount_loc __stop_mcount_loc
__start_ftrace_events _ftrace_events __stop_ftrace_events
__start_syscalls_metadata __syscalls_metadata __stop_syscalls_metadata
.devinit.rodata .cpuinit.rodata .meminit.rodata
__dtb_start .dtb.init.rodata __dtb_end
__setup_start .init.setup __setup_end
__initcall_start
.initcallearly.init
__initcall0_start .initcall0.init .initcall0s.init __initcall1_start .initcall1.init .initcall1s.init __initcall2_start .initcall2.init .initcall2s.init __initcall3_start .initcall3.init .initcall3s.init __initcall4_start .initcall4.init .initcall4s.init __initcall5_start .initcall5.init .initcall5s.init __initcallrootfs_start .initcallrootfs.init .initcall0rootfs.init __initcall6_start .initcall6.init .initcall6s.init __initcall7_start .initcall7.init .initcall7s.init
__initcall_end
__con_initcall_start .con_initcall.init __con_initcall_end
__security_initcall_start .security_initcall.init __security_initcall_end
__initramfs_start .init.ramfs .init.ramfs.info
* PERCPU_SECTION(CACHELINE_SIZE) ->> __per_cpu_load
__per_cpu_start
.data..percpu..first
.data..percpu..page_aligned
.data..percpu..readmostly
.data..percpu
.data..percpu..shared_aligned
__per_cpu_end
* __init_end = .;
*
* _stext = .;
* TEXT_SECTION = 0
* _etext = .;
*
* _sdata = .;
* RO_DATA_SECTION(PAGE_SIZE) ->> __start_rodata
.rodata .rodata.*
__vermagic
__start___tracepoints_ptrs __tracepoints_ptrs __stop___tracepoints_ptrs
__tracepoints_strings
.rodata1
__start___bug_table __bug_table __stop___bug_table
__start_pci_fixups_early .pci_fixup_early __end_pci_fixups_early
__start_pci_fixups_header .pci_fixup_header __end_pci_fixups_header
__start_pci_fixups_final .pci_fixup_final __end_pci_fixups_final
__start_pci_fixups_enable .pci_fixup_enable __end_pci_fixups_enable
__start_pci_fixups_resume .pci_fixup_resume __end_pci_fixups_resume
__start_pci_fixups_resume_early .pci_fixup_resume_early __end_pci_fixups_resume_early
__start_pci_fixups_suspend .pci_fixup_suspend __end_pci_fixups_suspend
__start_builtin_fw .builtin_fw __end_builtin_fw
__start_rio_switch_ops .rio_switch_ops __end_rio_switch_ops
__tracedata_start .tracedata __tracedata_end
__start___ksymtab ___ksymtab+* __stop___ksymtab
__start___ksymtab_gpl ___ksymtab_gpl+* __stop___ksymtab_gpl
__start___ksymtab_unused ___ksymtab_unused+* __stop___ksymtab_unused
__start___ksymtab_unused_gpl ___ksymtab_unused_gpl+* __stop___ksymtab_unused_gpl
__start___ksymtab_gpl_future ___ksymtab_gpl_future+* __stop___ksymtab_gpl_future
__start___kcrctab ___kcrctab+* __stop___kcrctab
__start___kcrctab_gpl ___kcrctab_gpl+* __stop___kcrctab_gpl
__start___kcrctab_unused ___kcrctab_unused+* __stop___kcrctab_unused
__start___kcrctab_unused_gpl ___kcrctab_unused_gpl+* __stop___kcrctab_unused_gpl
__start___kcrctab_gpl_future ___kcrctab_gpl_future+* __stop___kcrctab_gpl_future
__ksymtab_strings
devinit.rodata
devexit.rodata
cpuinit.rodata
cpuexit.rodata
meminit.rodata
memexit.rodata
__start___param __param __stop___param
__start___modver __modver __stop___modver
__end_rodata
* RW_DATA_SECTION(...) ->> .data..init_task
__nosave_begin
.data..nosave
__nosave_end
.data..page_aligned
.data..cacheline_aligned
.data..read_mostly
.data
.ref.data
.data..shared_aligned
.devinit.data
.devexit.data
.cpuinit.data
.cpuexit.data
.meminit.data
.memexit.data
.data.unlikely
__tracepoints
__start___jump_table __jump_table __stop___jump_table
__start___verbose __verbose __stop___verbose
__start_annotated_branch_profile _ftrace_annotated_branch __stop_annotated_branch_profile
__start_branch_profile _ftrace_branch __stop_branch_profile
__start___trace_bprintk_fmt __trace_printk_fmt __stop___trace_bprintk_fmt
* _edata = .;
*
* EXCEPTION_TABLE(...) ->> __start___ex_table __ex_table __stop___ex_table
* NOTES ->> __start_notes .note.* __stop_notes
*
* BSS_SECTION(0, 0, 0) ->> __bss_start
.sbss .scommon
.bss..page_aligned .dynbss .bss COMMON
__bss_stop
* _end = .;
*
* STABS_DEBUG ->> .stab .stabstr .stab.excl .stab.exclstr .stab.index .stab.indexstr .comment
* DWARF_DEBUG ->> .debug .line .debug_srcinfo .debug_sfnames .debug_aranges .debug_pubnames .debug_info.gnu.linkonce.wi.* \
.debug_abbrev .debug_line .debug_frame .debug_str .debug_loc .debug_macinfo \
.debug_weaknames .debug_funcnames .debug_typenames .debug_varnames
*
* DISCARDS // must be the last
->> .exit.text
devexit.text
cpuexit.text
memexit.text
.exit.data
devexit.data
devexit.rodata
cpuexit.data
cpuexit.rodata
memexit.data
memexit.rodata
.exitcall.exit
.discard
.discard.*
* }
No comments:
Post a Comment