链接脚本中设置标号的问题
在链接脚本中预留一块区域内存,设置三个标号。第一个标号指向内存的起始地址,第二个标号指向内存的结束地址,第三个标号表示内存的长度。
MEMORY {
reserved_mem(rw) : ORIGIN = 0x40002000, LENGTH = 1M
}
PROVIDE(_reserved_mem_start = ORIGIN(reserved_mem);
PROVIDE(_reserved_mem_end = ORIGIN(reserved_mem) + LENGTH(reserved_mem));
PROVIDE(_reserved_mem_len = LENGTH(_reserved_mem_end));
上述链接脚本中,_reserved_mem_len 标号存在问题。这个标号能够在 c 代码中作为外部变量引用,只是取不到正确的值。
查看链接器手册发现,ORIGIN 与 LENGTH 代表两类不同的函数。
ORIGIN 类函数将会返回一个地址,LENGTH 类函数将会返回一个普通数值。
由于标号必须指向一个地址,因此将 LENGTH 函数计算的数值赋值给一个标号的方法不合法。