+ if (vdso_base) {
+ ehdr = (void *)vdso_base;
+ phdr = (void *)(vdso_base + ehdr->e_phoff);
+ for (i=ehdr->e_phnum; i; i--, phdr=(void *)((char *)phdr + ehdr->e_phentsize)) {
+ if (phdr->p_type == PT_DYNAMIC)
+ vdso->dynv = (void *)(vdso_base + phdr->p_offset);
+ if (phdr->p_type == PT_LOAD)
+ vdso->base = (void *)(vdso_base - phdr->p_vaddr + phdr->p_offset);
+ }
+ decode_vec(vdso->dynv, vdso_dyn, DYN_CNT);
+ vdso->syms = (void *)(vdso->base + vdso_dyn[DT_SYMTAB]);
+ vdso->hashtab = (void *)(vdso->base + vdso_dyn[DT_HASH]);
+ vdso->strings = (void *)(vdso->base + vdso_dyn[DT_STRTAB]);
+ vdso->name = "linux-gate.so.1";
+ vdso->global = 1;
+
+ vdso->prev = lib;
+ lib->next = vdso;
+ }
+