* sysdeps/sh/dl-machine.h (elf_machine_rela): Remove code using

RESOLVE.

2005-02-07  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-load.c (_dl_map_object_from_fd): Makre sure registers are
	set correctly.

	* sysdeps/unix/sysv/linux/i386/sysdep.h (check_consistency): Define.
This commit is contained in:
Ulrich Drepper 2005-02-08 08:25:22 +00:00
parent dbfc1e0267
commit 606832e6e5
4 changed files with 39 additions and 12 deletions

View File

@ -1,3 +1,13 @@
2005-02-08 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/sh/dl-machine.h (elf_machine_rela): Remove code using
RESOLVE.
2005-02-07 Ulrich Drepper <drepper@redhat.com>
* elf/dl-load.c (_dl_map_object_from_fd): Makre sure registers are
set correctly.
2005-01-07 Richard Henderson <rth@redhat.com>
* math/math_private.h (__copysign): Define as builtin for gcc 4.
@ -26,6 +36,8 @@
* iconv/iconv_prog.c (main): Provide more help in case on an error.
* sysdeps/unix/sysv/linux/i386/sysdep.h (check_consistency): Define.
2005-02-07 Jakub Jelinek <jakub@redhat.com>
* nscd/nscd.c (termination_handler): Avoid segfault if some database

View File

@ -36,6 +36,7 @@
#include <dl-osinfo.h>
#include <stackinfo.h>
#include <caller.h>
#include <sysdep.h>
#include <dl-dst.h>
@ -1373,6 +1374,10 @@ cannot allocate TLS data structures for initial thread");
#endif
__stack_prot |= PROT_READ|PROT_WRITE|PROT_EXEC;
#ifdef check_consistency
check_consistency ();
#endif
errval = (*GL(dl_make_stack_executable_hook)) (stack_endp);
if (errval)
{

View File

@ -323,15 +323,9 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
else
{
const Elf32_Sym *const refsym = sym;
#ifndef RTLD_BOOTSTRAP
struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;
#else
value = RESOLVE (&sym, version, r_type);
value += sym->st_value;
#endif
value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value;
value += reloc->r_addend;
switch (r_type)

View File

@ -1,5 +1,5 @@
/* Stack executability handling for GNU dynamic linker. Linux version.
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -24,6 +24,7 @@
#include <stdbool.h>
#include <stackinfo.h>
#include <caller.h>
#include <sysdep.h>
#include "kernel-features.h"
@ -38,6 +39,7 @@ _dl_make_stack_executable (void **stack_endp)
/* This gives us the highest/lowest page that needs to be changed. */
uintptr_t page = ((uintptr_t) *stack_endp
& -(intptr_t) GLRO(dl_pagesize));
int result = 0;
/* Challenge the caller. */
if (__builtin_expect (__check_caller (RETURN_ADDRESS (0),
@ -60,7 +62,10 @@ _dl_make_stack_executable (void **stack_endp)
no_growsupdown = true;
else
# endif
return errno;
{
result = errno;
goto out;
}
}
#endif
@ -85,7 +90,10 @@ _dl_make_stack_executable (void **stack_endp)
else
{
if (errno != ENOMEM) /* Unexpected failure mode. */
return errno;
{
result = errno;
goto out;
}
if (size == GLRO(dl_pagesize))
/* We just tried to mprotect the top hole page and failed.
@ -108,7 +116,10 @@ _dl_make_stack_executable (void **stack_endp)
else
{
if (errno != ENOMEM) /* Unexpected failure mode. */
return errno;
{
result = errno;
goto out;
}
if (size == GLRO(dl_pagesize))
/* We just tried to mprotect the lowest hole page and failed.
@ -133,6 +144,11 @@ _dl_make_stack_executable (void **stack_endp)
/* Remember that we changed the permission. */
GL(dl_stack_flags) |= PF_X;
return 0;
out:
#ifdef check_consistency
check_consistency ();
#endif
return result;
}
rtld_hidden_def (_dl_make_stack_executable)