{
        struct elf_phdr *elf_phdata;
        struct elf_phdr *eppnt;
-       unsigned long elf_bss, bss, len;
        int retval, error, i, j;
        struct elfhdr elf_ex;
 
                eppnt++;
 
        /* Now use mmap to map the library into memory. */
-       error = vm_mmap(file,
-                       ELF_PAGESTART(eppnt->p_vaddr),
-                       (eppnt->p_filesz +
-                        ELF_PAGEOFFSET(eppnt->p_vaddr)),
+       error = elf_load(file, ELF_PAGESTART(eppnt->p_vaddr),
+                       eppnt,
                        PROT_READ | PROT_WRITE | PROT_EXEC,
                        MAP_FIXED_NOREPLACE | MAP_PRIVATE,
-                       (eppnt->p_offset -
-                        ELF_PAGEOFFSET(eppnt->p_vaddr)));
-       if (error != ELF_PAGESTART(eppnt->p_vaddr))
-               goto out_free_ph;
+                       0);
 
-       elf_bss = eppnt->p_vaddr + eppnt->p_filesz;
-       if (padzero(elf_bss)) {
-               error = -EFAULT;
+       if (error != ELF_PAGESTART(eppnt->p_vaddr))
                goto out_free_ph;
-       }
 
-       len = ELF_PAGEALIGN(eppnt->p_filesz + eppnt->p_vaddr);
-       bss = ELF_PAGEALIGN(eppnt->p_memsz + eppnt->p_vaddr);
-       if (bss > len) {
-               error = vm_brk(len, bss - len);
-               if (error)
-                       goto out_free_ph;
-       }
        error = 0;
 
 out_free_ph: