#include "reloc.h"
-void __init_ssp(size_t *);
int __init_tp(void *);
void __init_libc(char **, char *);
static struct dso *head, *tail, *ldso, *fini_head;
static char *env_path, *sys_path;
static unsigned long long gencnt;
-static int ssp_used;
static int runtime;
static int ldd_mode;
static int ldso_fail;
{
uint32_t h = 0, gh = 0;
struct symdef def = {0};
- if (dso->ghashtab) {
- gh = gnu_hash(s);
- if (gh == 0x1f4039c9 && !strcmp(s, "__stack_chk_fail")) ssp_used = 1;
- } else {
- h = sysv_hash(s);
- if (h == 0x595a4cc && !strcmp(s, "__stack_chk_fail")) ssp_used = 1;
- }
for (; dso; dso=dso->next) {
Sym *sym;
if (!dso->global) continue;
if (p->relro_start != p->relro_end &&
mprotect(p->base+p->relro_start, p->relro_end-p->relro_start, PROT_READ) < 0) {
snprintf(errbuf, sizeof errbuf,
- "Error relocating %s: RELRO protection failed",
+ "Error relocating %s: RELRO protection failed: %m",
p->name);
if (runtime) longjmp(*rtld_fail, 1);
dprintf(2, "%s\n", errbuf);
debug.state = 0;
_dl_debug_state();
- if (ssp_used) __init_ssp((void *)aux[AT_RANDOM]);
__init_libc(envp, argv[0]);
atexit(do_fini);
errno = 0;
}
update_tls_size();
-
- if (ssp_used) __init_ssp(libc.auxv);
-
_dl_debug_state();
orig_tail = tail;
end: