欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ld链接脚本(*.lds)示例

程序员文章站 2022-07-12 10:55:07
...

.text 程序代码
.rodata 只读数据
.data 可读写且需要初始化数据
.bss 可读写的置零初始化数据

经典示例:https://gitee.com/linux-open-source/linux-2.4.0/blob/master/linux-2.4.0/arch/i386/vmlinux.lds

SECTION格式

 section [address] [(type)] :
   [AT(lma)]   [ALIGN(section_align) | ALIGN_WITH_INPUT]   [SUBALIGN(subsection_align)]   [constraint]

示例

ENTRY(symbol)
 SECTIONS
 {
   . = SIZEOF_HEADERS;
   .interp :
   { *(.interp) } :text :interp 
   . = 0x10000;
   .text :
   { head.o(.text); *(.text) }
   //.text ALIGN(0x10) : { *(.text) }
   //.text 0x10000: { *(.text) }
   //.text { o1/*.o(.text); }
   . = . + 0x100;
   . = ALIGN(0x8000)
   //variable = ALIGN(0x8000)
   .rodata : { *(.rodata) }
   .mdata 0x20000 :
     AT ( ADDR (.text) + SIZEOF (.text) )
     { _data = . ; *(.data); _edata = . ;  }
   . = 0x8000000;
   .data : { *(.data) }
   .bss : { *(.bss) }
 }

示例

 SECTIONS
   {
     .text :
       {
         *(.text)
       } > REGION_TEXT
     .rodata :
       {
         *(.rodata)
         rodata_end = .;
       } > REGION_RODATA
     _bdata = (. + 3) & ~ 3;
     .data : AT (rodata_end)
       {
         data_start = .;
         *(.data)
       } > REGION_DATA
     data_size = SIZEOF(.data);
     data_load_start = LOADADDR(.data);
     .bss :
       {
         *(.bss)
       } > REGION_BSS
   }

示例

   SECTIONS { ...
        .data ALIGN(0x2000): {
          *(.data)
          variable = ALIGN(0x8000);
        }
      ... }
相关标签: 笔记