GCC链接器描述文件强制符号位于特定地址
gcc linker description file force symbol to be at specific address
我有一个关于gcc链接器描述文件的非常具体的问题。我有一个嵌入式项目,必须确保,主要符号或主要符号的地址存在于特定地址(Elf文件)。
原因是,我有一个微控制器,它上面有一个引导加载程序。这个引导加载程序应该在启动后调用主例程。因此,我必须提供启动后跳转到的地址。
是否有一种方法使用链接器描述文件来强制符号始终在表的顶部或输入地址,或者我甚至可以以某种方式获得符号的地址以将其写回特定位置?
提前谢谢。
当然有办法。您最好的选择是为您的函数使用一个节:
int start(void) __attribute__((section(".start")));
int start(void)
{
}
然后在链接器脚本中:
SECTIONS
{
. = 0x1234; // <---- put here your address
.start :
{
*(.start)
}
}
或者类似的东西(我已经很长时间没有使用这个了)
如果您已经有一个链接器控制文件(我假设您正在使用gcc工具链),那么您只需要将包含main()函数的对象文件放入第一部分(并将其留在Makefile之外)。
下面是一个例子:
MEMORY
{
rom (RX) : ORIGIN = START_ADDRESS, LENGTH = 0x0010000
}
SECTIONS
{
.text :
{
main.o (.text) /* this is the program entry point */
*(.text)
}
.data :
{
. = ALIGN(4);
*(.data)
}
}
(这是简化了一点,但我认为你明白了)。.text部分从START_ADDRESS开始,只要您确保您的main。O位于这里(和 main()是其中的第一个函数),您设置。
相关文章:
- 如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件
- 确保特征将 AVX 矢量化用于特定操作
- 确定夏令时是否适用于特定日期
- 非静态成员引用必须相对于特定对象
- 互斥锁能否保护相对于特定指针的数据?
- 依赖于特定类类型的C++模板方法
- 如何以精度换取速度来评估C++中两个向量的点积符号?(不特定于硬件)
- 将QT窗口强加于特定的屏幕
- 如何使函数模板仅适用于特定命名空间中的类型
- 不确定如何修复;非静态成员参考必须相对于特定对象
- 将所有文件依赖于特定目录的依赖
- 仅适用于特定模板类的模板
- C++非静态成员引用必须相对于特定对象
- 无法理解错误 msg:"非静态成员引用必须相对于特定对象"
- 新的新类对象的函数;错误:非静态成员引用必须相对于特定对象
- 如何创建只存在于特定模板专用化的函数
- C++非静态成员引用必须相对于特定对象
- 有没有一种方法可以让本机npm包依赖于特定版本的v8C++API
- 在另一个类内部构造一个类(非静态成员引用必须相对于特定对象)
- 非静态成员引用必须相对于特定的c++对象单例类