/* * STM32H750XBHx 的 GNU ld 链接脚本 */ /* 程序入口点,设置为"used"避免被GC */ MEMORY { ROM (rx) : ORIGIN = 0x08000000, LENGTH = 128k /* 128K 内部Flash */ RAM (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K SRAM */ } ENTRY(Reset_Handler) /* 入口点为复位处理函数 */ _system_stack_size = 0x400; /* 系统栈大小=1KB */ SECTIONS { .text : /* 代码段 */ { . = ALIGN(4); /* 4字节对齐 */ _stext = .; /* 代码段起始地址 */ KEEP(*(.isr_vector)) /* 保留中断向量表(必须放在开头) */ . = ALIGN(4); *(.text) /* 程序代码 */ *(.text.*) /* 程序子代码段 */ *(.rodata) /* 只读数据(常量) */ *(.rodata*) *(.glue_7) /* ARM/Thumb胶合代码 */ *(.glue_7t) /* Thumb/ARM胶合代码 */ *(.gnu.linkonce.t*) /* Finsh shell的符号表信息 */ . = ALIGN(4); __fsymtab_start = .; /* Finsh符号表起始 */ KEEP(*(FSymTab)) /* 保留Finsh符号表 */ __fsymtab_end = .; /* Finsh符号表结束 */ /* 系统组件的符号表 */ . = ALIGN(4); __vsymtab_start = .; /* 组件符号表起始 */ KEEP(*(VSymTab)) /* 保留组件符号表 */ __vsymtab_end = .; /* 组件符号表结束 */ /* utest测试框架的段信息 */ . = ALIGN(4); __rt_utest_tc_tab_start = .; /* utest测试用例表起始 */ KEEP(*(UtestTcTab)) /* 保留测试用例表 */ __rt_utest_tc_tab_end = .; /* utest测试用例表结束 */ /* AT指令服务器的段信息 */ . = ALIGN(4); __rtatcmdtab_start = .; /* AT指令表起始 */ KEEP(*(RtAtCmdTab)) /* 保留AT指令表 */ __rtatcmdtab_end = .; /* AT指令表结束 */ . = ALIGN(4); /* RT-Thread初始化函数表 */ . = ALIGN(4); __rt_init_start = .; /* 初始化函数表起始 */ KEEP(*(SORT(.rti_fn*))) /* 保留排序后的初始化函数指针 */ __rt_init_end = .; /* 初始化函数表结束 */ . = ALIGN(4); /* C++构造函数表 */ PROVIDE(__ctors_start__ = .); /* 构造函数表起始 */ KEEP (*(SORT(.init_array.*))) /* 保留排序的构造函数 */ KEEP (*(.init_array)) /* 保留普通构造函数 */ PROVIDE(__ctors_end__ = .); /* 构造函数表结束 */ . = ALIGN(4); _etext = .; /* 代码段结束地址 */ } > ROM = 0 /* 位于ROM区域,填充0 */ /* .ARM.exidx 是已排序的,必须放在自己的输出段 */ __exidx_start = .; /* ARM异常索引起始 */ .ARM.exidx : /* ARM异常处理索引表 */ { *(.ARM.exidx* .gnu.linkonce.armexidx.*) /* 以下变量用于启动时初始化.data段 */ _sidata = .; /* 初始化数据在ROM中的加载地址 */ } > ROM __exidx_end = .; /* ARM异常索引结束 */ /* .data段 - 用于已初始化的数据 */ .data : AT (_sidata) /* AT指定运行时加载地址 */ { . = ALIGN(4); _sdata = . ; /* 数据段在RAM中的起始地址(运行时) */ *(.data) /* 已初始化数据 */ *(.data.*) *(.gnu.linkonce.d*) /* C++析构函数表 */ PROVIDE(__dtors_start__ = .); /* 析构函数表起始 */ KEEP(*(SORT(.dtors.*))) /* 保留排序的析构函数 */ KEEP(*(.dtors)) /* 保留普通析构函数 */ PROVIDE(__dtors_end__ = .); /* 析构函数表结束 */ . = ALIGN(4); _edata = . ; /* 数据段在RAM中的结束地址(运行时) */ } >RAM /* 位于RAM区域 */ .stack : /* 系统栈段 */ { . = ALIGN(4); _sstack = .; /* 栈起始地址 */ . = . + _system_stack_size; /* 分配栈空间 */ . = ALIGN(4); _estack = .; /* 栈结束地址 */ } >RAM /* 位于RAM区域 */ __bss_start = .; /* BSS段起始标记 */ .bss : /* 未初始化数据段 */ { . = ALIGN(4); _sbss = .; /* BSS段起始地址 */ *(.bss) /* 未初始化数据 */ *(.bss.*) *(COMMON) /* 公共符号 */ . = ALIGN(4); _ebss = . ; /* BSS段结束地址 */ *(.bss.init) /* 特殊用途的BSS初始化段 */ } > RAM /* 位于RAM区域 */ __bss_end = .; /* BSS段结束标记 */ _end = .; /* 程序内存结束标记 */ /* 以下为调试段,实际输出时不包含 */ /* Stabs调试节 */ .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 0 : { *(.debug) } .line 0 : { *(.line) } .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .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) } .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } }