diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c26c022527405ee2520e114f5ee6c3a5a8138828..0cd8fd7b5e8010419f66cdbde6659eab6d544ad3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2010-02-11 Jan Kratochvil <jan.kratochvil@redhat.com> + Ulrich Weigand <uweigand@de.ibm.com> + + * solib-svr4.c (LM_ADDR_CHECK): New comment on PPC-aware condition. + 2010-02-11 Pedro Alves <pedro@codesourcery.com> * ax-gdb.c (gen_exp_binop_rest) [BINOP_SUBSCRIPT]: Error out if diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index 2833ed140d472c2ca151f5176fc509192fcccc31..9d4e59edf6c018eb0ab4b585e7d3cc98157a91d9 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -217,7 +217,19 @@ LM_ADDR_CHECK (struct so_list *so, bfd *abfd) location, or anything, really. To avoid regressions, don't adjust the base offset in the latter case, although odds are that, if things really changed, debugging won't - quite work. */ + quite work. + + One could expect more the condition + ((l_addr & align) == 0 && ((l_dynaddr - dynaddr) & align) == 0) + but the one below is relaxed for PPC. The PPC kernel supports + either 4k or 64k page sizes. To be prepared for 64k pages, + PPC ELF files are built using an alignment requirement of 64k. + However, when running on a kernel supporting 4k pages, the memory + 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.) */ + if ((l_addr & align) == ((l_dynaddr - dynaddr) & align)) { l_addr = l_dynaddr - dynaddr;