gdb/
* solib-svr4.c (LM_ADDR_CHECK): New variable minpagesize. Optionally initialize it from ELF BFD. Extend the prelink condition by it.
This commit is contained in:
parent
74164c5624
commit
4e1fc9c971
2 changed files with 13 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
2010-02-15 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* solib-svr4.c (LM_ADDR_CHECK): New variable minpagesize. Optionally
|
||||
initialize it from ELF BFD. Extend the prelink condition by it.
|
||||
|
||||
2010-02-15 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* defs.h (parse_pid_to_attach): New.
|
||||
|
|
|
@ -194,6 +194,7 @@ LM_ADDR_CHECK (struct so_list *so, bfd *abfd)
|
|||
if (dynaddr + l_addr != l_dynaddr)
|
||||
{
|
||||
CORE_ADDR align = 0x1000;
|
||||
CORE_ADDR minpagesize = align;
|
||||
|
||||
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
|
||||
{
|
||||
|
@ -206,6 +207,8 @@ LM_ADDR_CHECK (struct so_list *so, bfd *abfd)
|
|||
for (i = 0; i < ehdr->e_phnum; i++)
|
||||
if (phdr[i].p_type == PT_LOAD && phdr[i].p_align > align)
|
||||
align = phdr[i].p_align;
|
||||
|
||||
minpagesize = get_elf_backend_data (abfd)->minpagesize;
|
||||
}
|
||||
|
||||
/* Turn it into a mask. */
|
||||
|
@ -230,9 +233,12 @@ LM_ADDR_CHECK (struct so_list *so, bfd *abfd)
|
|||
mapping of the library may not actually happen on a 64k boundary!
|
||||
|
||||
(In the usual case where (l_addr & align) == 0, this check is
|
||||
equivalent to the possibly expected check above.) */
|
||||
equivalent to the possibly expected check above.)
|
||||
|
||||
if ((l_addr & align) == ((l_dynaddr - dynaddr) & align))
|
||||
Even on PPC it must be zero-aligned at least for MINPAGESIZE. */
|
||||
|
||||
if ((l_addr & (minpagesize - 1)) == 0
|
||||
&& (l_addr & align) == ((l_dynaddr - dynaddr) & align))
|
||||
{
|
||||
l_addr = l_dynaddr - dynaddr;
|
||||
|
||||
|
|
Loading…
Reference in a new issue