/伍梁* ld script to make i386 Linux kernel
* Written by Martin Mares
*/
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(_start)
SECTIONS
{
. = PAGE_OFFSET_RAW + 0x100000
_text = ./* Text and read-only data */
.text : {
*(.text)
*(.fixup)
*(.gnu.warning)
} = 0x9090
.text.lock : { *(.text.lock) } /* out-of-line lock text */
.rodata : { *(.rodata) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16)/* Exception table */
__start___ex_table = .
__ex_table : { *(__ex_table) }
__stop___ex_table = .
__start___ksymtab = ./* Kernel symbol table */
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .
_etext = ./* End of text section */
.data : { /虚橘纯* Data */
*(.data)
CONSTRUCTORS
}
_edata = ./* End of data section */
. = ALIGN(8192)/* init_task */
.data.init_task : { *(.data.init_task) }
. = ALIGN(4096)/* Init code and data */
__init_begin = .
.text.init : { *(.text.init) }
.data.init : { *(.data.init) }
. = ALIGN(4096)
__init_end = .
. = ALIGN(32)
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
. = ALIGN(4096)
.data.page_aligned : { *(.data.idt) }
__bss_start = ./* BSS */
.bss : {
*(.bss)
}
_end = .
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
}
vmlinux.lds.S用于对ld的输出进行组版,岩租这个文件的格式在ld.info手册隐链中有详细的说明。vmlinu x.lds.S的主要目的是对输出文件中段进行排序,并定义相关的符号名粗携兆,以下是简要注释。 /* ld script to make i386 Linux kernel * Written by Martin M...有两冲慧宽种使用方法:1,lds作为外置脚本,参与对gcc链接过程散亮的控制。使用方法为
gcc XXX.c XX.lds。
gcc能够自动识别你的文件列中后缀不能识别的文件,作为链接脚本使用。这样编译出来的程序,还是要使用gcc默碧盯认的lds脚本,你的脚本只是一个辅助。
2,lds代替系统的脚本。
这种要先使用gcc -c参数编译你的源程序,编译出来的.o文件,使用命令ld -T来指定lds文件链接到一起。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)