BOOTROM的连接

来源:互联网 发布:医院数据库管理规范 编辑:程序博客网 时间:2024/06/06 16:47

bootrom的链接是通过文件link.dotbootrom完成的,文件的内容如下:

ENTRY(_start)
SECTIONS
{
  .text      :
  {
    wrs_kernel_text_start = .; _wrs_kernel_text_start = .;
    *(.text) *(.text.*) *(.stub) *(.gnu.warning) *(.gnu.linkonce.t*)
    KEEP(*(.init)) KEEP(*(.fini))
    *(.glue_7t) *(.glue_7) *(.rdata)   /* for ARM */
    *(.mips16.fn.*) *(.mips16.call.*) *(.reginfo) /* for MIPS */
    *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) *(.rodata1)
    *(.sdata2) *(.sbss2)    /* for PPC */
    . = ALIGN(16);
  }
  . = ALIGN(16);
  wrs_kernel_text_end = .; _wrs_kernel_text_end = .;
  etext = .; _etext = .;
  .data    : AT(etext)
  {
    wrs_kernel_data_start = .; _wrs_kernel_data_start = .;
    *(.data) *(.data.*) *(.gnu.linkonce.d*) SORT(CONSTRUCTORS) *(.data1)
    *(.eh_frame) *(.gcc_except_table)
    KEEP (*crtbegin.o(.ctors))
    KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
    KEEP (*(SORT(.ctors.*)))
    KEEP (*(.ctors))
    KEEP (*crtbegin.o(.dtors))
    KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
    KEEP (*(SORT(.dtors.*)))
    KEEP (*(.dtors))
    _gp = ALIGN(16) + 0x7ff0;  /* set gp for MIPS startup code */
    /* got*, dynamic, sdata*, lit[48], and sbss should follow _gp */
    *(.got.plt) *(.got) *(.dynamic)
    *(.got2)
    *(.sdata) *(.sdata.*) *(.lit8) *(.lit4)
    . = ALIGN(16);
  }
  . = ALIGN(16);
  edata = .; _edata = .;
  wrs_kernel_data_end = .; _wrs_kernel_data_end = .;
  .bss       :
  {
    wrs_kernel_bss_start = .; _wrs_kernel_bss_start = .;
    *(.sbss) *(.scommon) *(.dynbss) *(.bss) *(COMMON)
    . = ALIGN(16);
  }
  . = ALIGN(16);
  end = .; _end = .;
  wrs_kernel_bss_end = .; _wrs_kernel_bss_end = .;

  .boot (wrs_kernel_text_start + wrs_kernel_rom_size - 0x800) :
  {
  *(.boot)
  }
  .reset (wrs_kernel_text_start + wrs_kernel_rom_size - 4) :
  {
  *(.reset)
  }

  /DISCARD/ :
  {
  *(.note)    /* seen on Pentium ELF */
  *(.comment)    /* seen on PPC & SH ELF */
  *(.pdr)    /* seen on MIPS ELF */
  }
  /* 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) }
  /* DWARF debug sections.
     Symbols in the DWARF debugging sections are relative to the beginning
     of the section so we begin them at 0.  */
  /* DWARF 1 */
  .debug          0 : { *(.debug) }
  .line           0 : { *(.line) }
  /* GNU DWARF 1 extensions */
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
  .debug_sfnames  0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges  0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2 */
  .debug_info     0 : { *(.debug_info) }
  .debug_abbrev   0 : { *(.debug_abbrev) }
  .debug_line     0 : { *(.debug_line) }
  .debug_frame    0 : { *(.debug_frame) }
  .debug_str      0 : { *(.debug_str) }
  .debug_loc      0 : { *(.debug_loc) }
  .debug_macinfo  0 : { *(.debug_macinfo) }
  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames  0 : { *(.debug_varnames) }
}

 

 

    一共指定了text段、data段、bss段、boot段、reset段。指定了每个段的起始地址,例如text段的起始地址为 wrs_kernel_text_start = .; _wrs_kernel_text_start = .; 结束地址为wrs_kernel_text_end = .; _wrs_kernel_text_end = .;并且是按照16byte对齐的. = ALIGN(16);。boot段和reset段不是必须的,可以为空。

原创粉丝点击