看到一个代码自定义段实现如下:
typedef void (*myown_call)(void);
#define func_init(func) \
__attribute__((section("myown"), aligned(__alignof__(myown_call)))) \
myown_call _fn_##func = func
extern myown_call __start_myown;
extern myown_call __stop_myown;
void do_initcalls(void) {
myown_call *pfun = &__start_myown;
do {
(*pfun)();
++pfun;
} while (pfun < &__stop_myown);
}
上面的代码是实现初始化逻辑的,我在网上看到要想实现自定义的段数据加载,需要在链接脚本中指定__start_myown 和__stop_myown 的地址位置,但是在代码的编译过程中没有看到相关的设置,不太清楚__start_myown 、__stop_myown 的地址编译器是如何分配的,又懂得大佬可以给解释下么?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.