Cor*_*uzu 6 gcc program-entry-point ld linker-scripts objcopy
我刚刚开始学习一些ARM编程,但我遇到了一个有点恼人的问题.我用来编译源代码的工具链是Sourcery CodeBench Lite 2013.05-23(可以在这里找到:https://sourcery.mentor.com/GNUToolchain/release2449 )
我需要的是告诉GCC或LD或OBJCOPY将'main'函数的编译字节码放在.text段的开头.
有没有办法实现这个目标?(也许通过链接器脚本?)
谢谢
Cor*_*uzu 11
解决了这个问题.无论面对谁:
其次,使用链接描述文件将这些"函数部分"排序到最后的大.text部分.例如,将main函数放在.text部分的开头会导致LD脚本看起来大致如下所示:
ENTRY(main)
SECTIONS
{
.text :
{
*(.text.main);
*(.text*);
}
}
Run Code Online (Sandbox Code Playgroud)小智 5
首先,查看 .text 部分是如何在 gcc 的默认链接器脚本中定义的(因此您不必创建自己的链接器脚本),将其调用为:
gcc -Wl,-verbose
Run Code Online (Sandbox Code Playgroud)
这将打印出默认的链接描述文件。我的显示了 .text 部分:
/* text: Program code section */
.text :
{
*(.text)
*(.text.*)
*(.gnu.linkonce.t.*)
}
Run Code Online (Sandbox Code Playgroud)
因此,为了使“main”函数成为 .text 部分中的第一个函数(并且其余函数是连续的),您必须为所有其他函数设置“section”属性。例如:
void main(void);
void funct1(....) __attribute__ ((section (".text.A")));
void funct2(....) __attribute__ ((section (".text.A")));
void funct3(....) __attribute__ ((section (".text.A")));
Run Code Online (Sandbox Code Playgroud)
“归因”函数原型就足够了。这样,当您现在编译时,“main”函数将是“.text”部分中的第一个函数,所有其他函数将紧随其后的连续地址。
如果您想将“.text”部分(即“main”函数)放置在特定地址(例如0x1000),请记住链接:
gcc .... -Wl,-Ttext=0x1000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5469 次 |
| 最近记录: |