about summary refs log tree commit diff
path: root/elf/dl-reloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'elf/dl-reloc.c')
-rw-r--r--elf/dl-reloc.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c
index bfa0174444..5da8575da5 100644
--- a/elf/dl-reloc.c
+++ b/elf/dl-reloc.c
@@ -28,8 +28,6 @@ Cambridge, MA 02139, USA.  */
 void
 _dl_relocate_object (struct link_map *l, int lazy)
 {
-  const size_t pagesize = getpagesize ();
-
   if (l->l_relocated)
     return;
 
@@ -37,17 +35,17 @@ _dl_relocate_object (struct link_map *l, int lazy)
     {
       /* Bletch.  We must make read-only segments writable
 	 long enough to relocate them.  */
-      const Elf32_Phdr *ph;
+      const ElfW(Phdr) *ph;
       for (ph = l->l_phdr; ph < &l->l_phdr[l->l_phnum]; ++ph)
 	if (ph->p_type == PT_LOAD && (ph->p_flags & PF_W) == 0)
 	  {
 	    caddr_t mapstart = ((caddr_t) l->l_addr +
-				(ph->p_vaddr & ~(pagesize - 1)));
+				(ph->p_vaddr & ~(_dl_pagesize - 1)));
 	    caddr_t mapend = ((caddr_t) l->l_addr +
-			      ((ph->p_vaddr + ph->p_memsz + pagesize - 1)
-			       & ~(pagesize - 1)));
-	    if (mprotect (mapstart, mapend - mapstart,
-			  PROT_READ|PROT_WRITE) < 0)
+			      ((ph->p_vaddr + ph->p_memsz + _dl_pagesize - 1)
+			       & ~(_dl_pagesize - 1)));
+	    if (__mprotect (mapstart, mapend - mapstart,
+			    PROT_READ|PROT_WRITE) < 0)
 	      _dl_signal_error (errno, l->l_name,
 				"cannot make segment writable for relocation");
 	  }
@@ -59,8 +57,8 @@ _dl_relocate_object (struct link_map *l, int lazy)
     const char *strtab
       = ((void *) l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);
 
-    Elf32_Addr resolve (const Elf32_Sym **ref,
-			Elf32_Addr reloc_addr, int noplt)
+    ElfW(Addr) resolve (const ElfW(Sym) **ref,
+			ElfW(Addr) reloc_addr, int noplt)
       {
 	return _dl_lookup_symbol (strtab + (*ref)->st_name, ref, scope,
 				  l->l_name, reloc_addr, noplt);
@@ -97,21 +95,21 @@ _dl_relocate_object (struct link_map *l, int lazy)
   if (l->l_info[DT_TEXTREL])
     {
       /* Undo the protection change we made before relocating.  */
-      const Elf32_Phdr *ph;
+      const ElfW(Phdr) *ph;
       for (ph = l->l_phdr; ph < &l->l_phdr[l->l_phnum]; ++ph)
 	if (ph->p_type == PT_LOAD && (ph->p_flags & PF_W) == 0)
 	  {
 	    caddr_t mapstart = ((caddr_t) l->l_addr +
-				(ph->p_vaddr & ~(pagesize - 1)));
+				(ph->p_vaddr & ~(_dl_pagesize - 1)));
 	    caddr_t mapend = ((caddr_t) l->l_addr +
-			      ((ph->p_vaddr + ph->p_memsz + pagesize - 1)
-			       & ~(pagesize - 1)));
+			      ((ph->p_vaddr + ph->p_memsz + _dl_pagesize - 1)
+			       & ~(_dl_pagesize - 1)));
 	    int prot = 0;
 	    if (ph->p_flags & PF_R)
 	      prot |= PROT_READ;
 	    if (ph->p_flags & PF_X)
 	      prot |= PROT_EXEC;
-	    if (mprotect (mapstart, mapend - mapstart, prot) < 0)
+	    if (__mprotect (mapstart, mapend - mapstart, prot) < 0)
 	      _dl_signal_error (errno, l->l_name,
 				"can't restore segment prot after reloc");
 	  }