【发布时间】:2020-11-21 17:53:56
【问题描述】:
我希望能够声明函数,以便将它们添加到特定的代码部分,然后它们都在我的启动函数之前执行。像这样的:
void __attribute__((__section__(".driverinit"))) disk_driver_init() {
dev_register(&diskDevice);
}
目的是每一个都将它们的变量添加到一个数组中,以便可以处理其中包含的函数。我知道我可以在全局范围内添加这些功能,但如果可以的话,我会尽量避免这种情况。
问题是,一旦第一个返回,我不知道如何转到集合中的下一个函数。或者可能有函数在最后不生成“ret”并失败。不确定这是否可能。
这是反汇编,我希望它运行代码部分中的每个函数,然后如果可能的话,最后跳转到 _start...
Disassembly of section .driverinit:
0000000000000000 <disk_driver_init>:
0: a9bf7bfd stp x29, x30, [sp, #-16]!
4: 910003fd mov x29, sp
8: d0000040 adrp x0, a000 <FLAG_APP_CMD+0x138>
c: 9128e000 add x0, x0, #0xa38
10: 9400020f bl 84c <dev_register>
14: d503201f nop
18: a8c17bfd ldp x29, x30, [sp], #16
1c: d65f03c0 ret
20: 14000002 b 28 <_start>
24: d65f03c0 ret
Disassembly of section .text.boot:
0000000000000028 <_start>:
28: d53800a0 mrs x0, mpidr_el1
2c: 92401c00 and x0, x0, #0xff
30: b4000040 cbz x0, 38 <startup_proc>
有人能引导我走向正确的方向吗?
【问题讨论】:
标签: c assembly linker arm embedded