码迷,mamicode.com
首页 > 其他好文 > 详细

tricore-ld APA

时间:2020-05-29 18:04:15      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:address   keep   size   add   式表   定义   err   部分   fail   

OUTPUT_FORMAT("elf32-tricore")
OUTPUT_ARCH(tricore)
ENTRY(_RESET)

_ISTACK_SIZE = DEFINED (__ISTACK_SIZE) ? __ISTACK_SIZE : 8K;

<表达式1>?<表达式2>:<表达式3>
返回 表达式2 或者表达式3 的值
例:
return (((key & SWC_STEERING_UNDERRANGE_Bit) != 0UL) ? DTC_FAILED : DTC_PASS);

(rx!p)

‘R’ Read-only section
‘W’ Read/write section
‘X’ Executable section
‘A’ Allocatable section
‘I’ Initialized section
‘L’ Same as ‘I’
‘!’ Invert the sense of any of the preceding attribute


SECTION
在输出节名称后面的大括号内,列出应该放入此输出节的输入节的名称
例1:
.inttab_tc0_000 (__INTTAB_START_ADDR + 0x0) : { . = ALIGN(8) ; KEEP (*(.intvec_tc0_0)); } > PMU_INTTAB_TC0
//VMA : { }
例2:
.FLS_AC_WRITE :
{
IROM_BASE_WRITE = .;
*(.FLS_AC_WRITE)
*(.FLS_AC_WRITE.*)
. = ALIGN(8);
} > FLS_WRITE_SRAM AT > FLS_WRITE_PFLASH0 = 0

section [address] [(type)] : //address: VMA(RAM
       [AT(LMA)] [ALIGN(section_align)]
       [SUBALIGN(subsection_align)]
       [constraint]
       {
         output-section-command
         output-section-command
         ...
       } [>region] [AT>lma_region] [:phdr :phdr ...] [=fillexp]


.MTL_PMU_ECC_EDC_TST_PF0 : ALIGN(32)
{
/*576 bytes need to be reserved for this section*/
PROVIDE(LOC_START_PF0_PATTERNS = .);
KEEP(*(.rodata.MTL_PMU_ECC_EDC_TST_PF0))
. = ALIGN(32);
} > PMU_PF0_PATTERNS
PROVIDE:
假如他被引用,但是没有被连接中包括的任何对象定义。
Linker script 可以被允许去定义一些符号
例如,传统的链接器定义了符号“ etext”。
但是,ANSI C要求用户能够使用“ etext”作为函数名称,而不会遇到错误。
仅在引用但未定义的情况下,PROVIDE关键字才可以用于定义符号,
例如“ etext”。语法为PROVIDE(symbol = expression)。
KEEP: 标记不应该删除的部分

PROVIDE HIDDEN
Similar to PROVIDE.


LONG(0 + ADDR(.CPU0_PRIVATE_BSS)); LONG(SIZEOF(.CPU0_PRIVATE_BSS));

将BYTE,SHORT,LONG,QUAD或SQUAD用作输出节命令
BYTE,SHORT,LONG和QUAD命令分别存储一个,两个,四个和八个字节。
每个关键字后面都有一个括号中的表达式,提供要存储的值
可以在输出节中包含数据的显式字节。每个关键字后跟一个括号内的表达式,
该表达式提供要存储的值。表达式的值存储在LC的当前值。
存储字节后,位置计数器将增加所存储的字节数。


LONG(0 + ADDR(.CPU0_PRIVATE_ZDATA))
//ADDR为内置函数,用来返回VMA


_code_ram_start = ABSOLUTE (.);

链接器对表达式求值时,结果是绝对的或相对于某个部分的。相对表达式表示为相对于截面基部的固定偏移量
输出节定义(an output section)中出现的表达式是相对于输出节的基数的。出现在其他位置的表达将是绝对的

绝对:设置为绝对表达式的符号将在任何进一步的链接操作中保持相同的值。
该符号将是绝对的,并且不会有任何特定的关联部分
相对:这意味着进一步的链接操作可能会改变符号的值。符号的部分将是相对表达式的部分

SECTIONS
{
.data : { *(.data) _edata = ABSOLUTE(.); }
}
If ‘ABSOLUTE’ were not used, ‘_edata’ would be relative to the ‘.data’ section.

_edata 后面继续链接,也不会再变化。否则后面继续链接,_edata值变化


_code_rom_start = LOADADDR (.FLSLOADERRAMCODE);

LOADADDR(section)
返回指定节的绝对LMA。这通常与ADDR相同, 但如果在输出节定义中使用AT属性,则可能不同

SIZEOF(.PMUECCEDCTST_TVT_RAMCODE);

SIZEOF(section)
如果已分配指名节,则返回该节的大小(以字节为单位)。
如果在评估时尚未分配该节,链接器将报告错误。
SECTIONS{ ...
.output {
.start = . ;
...
.end = . ;
}
symbol_1 = .end - .start ;
symbol_2 = SIZEOF(.output);//这俩相等
... }

以上为TRICORE

 


 

tricore-ld APA

标签:address   keep   size   add   式表   定义   err   部分   fail   

原文地址:https://www.cnblogs.com/yyyyloveu/p/12988525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!