From: Jan Kratochvil Date: Mon, 15 Feb 2010 17:37:35 +0000 (+0000) Subject: gdb/ X-Git-Tag: gdb_7_1-2010-02-18-branchpoint~47 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4e1fc9c9718fef23508d3a7c6349bbfe4e9b0f3c;p=thirdparty%2Fbinutils-gdb.git gdb/ * solib-svr4.c (LM_ADDR_CHECK): New variable minpagesize. Optionally initialize it from ELF BFD. Extend the prelink condition by it. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ca892e99385..34feb8f244f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2010-02-15 Jan Kratochvil + + * 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 * defs.h (parse_pid_to_attach): New. diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index ae3f49ac85b..f8e8e846318 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -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.) + + Even on PPC it must be zero-aligned at least for MINPAGESIZE. */ - if ((l_addr & align) == ((l_dynaddr - dynaddr) & align)) + if ((l_addr & (minpagesize - 1)) == 0 + && (l_addr & align) == ((l_dynaddr - dynaddr) & align)) { l_addr = l_dynaddr - dynaddr;