mirror of git://sourceware.org/git/glibc.git
Update.
2001-11-10 Ulrich Drepper <drepper@redhat.com> * elf/dl-load.c (_dl_map_object_from_fd): Remove use of _dl_pf_to_prot. Use arithmetic operation using PF_TO_PROT macro. * sysdeps/generic/ldsodefs.h (PF_TO_PROT): New macro. * elf/dl-reloc.c (_dl_relocate_object): Likewise.
This commit is contained in:
parent
94a758fe85
commit
9d63abbc7f
|
|
@ -1,3 +1,10 @@
|
||||||
|
2001-11-10 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* elf/dl-load.c (_dl_map_object_from_fd): Remove use of
|
||||||
|
_dl_pf_to_prot. Use arithmetic operation using PF_TO_PROT macro.
|
||||||
|
* sysdeps/generic/ldsodefs.h (PF_TO_PROT): New macro.
|
||||||
|
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
|
||||||
|
|
||||||
2001-11-10 Andreas Jaeger <aj@suse.de>
|
2001-11-10 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
* sysdeps/ieee754/ldbl-128/e_log2l.c: New file.
|
* sysdeps/ieee754/ldbl-128/e_log2l.c: New file.
|
||||||
|
|
|
||||||
|
|
@ -167,20 +167,20 @@ cannot make segment writable for relocation"));
|
||||||
caddr_t mapend = ((caddr_t) l->l_addr +
|
caddr_t mapend = ((caddr_t) l->l_addr +
|
||||||
((ph->p_vaddr + ph->p_memsz + _dl_pagesize - 1)
|
((ph->p_vaddr + ph->p_memsz + _dl_pagesize - 1)
|
||||||
& ~(_dl_pagesize - 1)));
|
& ~(_dl_pagesize - 1)));
|
||||||
extern unsigned char _dl_pf_to_prot[8];
|
|
||||||
int prot;
|
int prot;
|
||||||
|
|
||||||
if ((PF_R | PF_W | PF_X) == 7
|
#if (PF_R | PF_W | PF_X) == 7 && (PROT_READ | PROT_WRITE | PROT_EXEC) == 7
|
||||||
&& (PROT_READ | PROT_WRITE | PROT_EXEC) == 7)
|
prot = (PF_TO_PROT
|
||||||
prot = _dl_pf_to_prot[ph->p_flags & (PF_R | PF_X)];
|
>> ((ph->p_flags & (PF_R | PF_W | PF_X)) * 4)) & 0xf;
|
||||||
else
|
#else
|
||||||
{
|
prot = 0;
|
||||||
prot = 0;
|
if (ph->p_flags & PF_R)
|
||||||
if (ph->p_flags & PF_R)
|
prot |= PROT_READ;
|
||||||
prot |= PROT_READ;
|
if (ph->p_flags & PF_W)
|
||||||
if (ph->p_flags & PF_X)
|
prot |= PROT_WRITE;
|
||||||
prot |= PROT_EXEC;
|
if (ph->p_flags & PF_X)
|
||||||
}
|
prot |= PROT_EXEC;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (__builtin_expect (__mprotect (mapstart, mapend - mapstart,
|
if (__builtin_expect (__mprotect (mapstart, mapend - mapstart,
|
||||||
prot), 0) < 0)
|
prot), 0) < 0)
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,20 @@ typedef ElfW(Addr) lookup_t;
|
||||||
#define ELF_RTYPE_CLASS_PLT 1
|
#define ELF_RTYPE_CLASS_PLT 1
|
||||||
#define ELF_RTYPE_CLASS_COPY 2
|
#define ELF_RTYPE_CLASS_COPY 2
|
||||||
|
|
||||||
|
/* ELF uses the PF_x macros to specify the segment permissions, mmap
|
||||||
|
uses PROT_xxx. In most cases the three macros have the values 1, 2,
|
||||||
|
and 3 but not in a matching order. The following macros allows
|
||||||
|
converting from the PF_x values to PROT_xxx values. */
|
||||||
|
#define PF_TO_PROT \
|
||||||
|
((PROT_READ << (PF_R * 4)) \
|
||||||
|
| (PROT_WRITE << (PF_W * 4)) \
|
||||||
|
| (PROT_EXEC << (PF_X * 4)) \
|
||||||
|
| ((PROT_READ | PROT_WRITE) << ((PF_R | PF_W) * 4)) \
|
||||||
|
| ((PROT_READ | PROT_EXEC) << ((PF_R | PF_X) * 4)) \
|
||||||
|
| ((PROT_WRITE | PROT_EXEC) << (PF_W | PF_X) * 4) \
|
||||||
|
| ((PROT_READ | PROT_WRITE | PROT_EXEC) << ((PF_R | PF_W | PF_X) * 4)))
|
||||||
|
|
||||||
|
|
||||||
/* For the version handling we need an array with only names and their
|
/* For the version handling we need an array with only names and their
|
||||||
hash values. */
|
hash values. */
|
||||||
struct r_found_version
|
struct r_found_version
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue