提交 d0c6cb05 编写于 作者: R Rich Felker

don't call null pointer if DT_INIT/DT_FINI are null

it's not clear to me why the linker even outputs these headers if they
are null, but apparently it does so. with the default startfiles, they
will never be null anyway, but this patch allows eliminating crti,
crtn, crtbegin, and crtend (leaving only crt1) if the toolchain is
using init_array/fini_array (or for a C-only, no-ctor environment).
上级 9a8d7bee
......@@ -715,7 +715,7 @@ static void do_fini()
while (n--) ((void (*)(void))*--fn)();
}
#ifndef NO_LEGACY_INITFINI
if (dyn[0] & (1<<DT_FINI))
if ((dyn[0] & (1<<DT_FINI)) && dyn[DT_FINI])
((void (*)(void))(p->base + dyn[DT_FINI]))();
#endif
}
......@@ -738,7 +738,7 @@ static void do_init_fini(struct dso *p)
fini_head = p;
}
#ifndef NO_LEGACY_INITFINI
if (dyn[0] & (1<<DT_INIT))
if ((dyn[0] & (1<<DT_INIT)) && dyn[DT_INIT])
((void (*)(void))(p->base + dyn[DT_INIT]))();
#endif
if (dyn[0] & (1<<DT_INIT_ARRAY)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册