From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7547 invoked by alias); 31 Aug 2005 21:19:44 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 7518 invoked by uid 22791); 31 Aug 2005 21:19:34 -0000 Received: from sibelius.xs4all.nl (HELO sibelius.xs4all.nl) (82.92.89.47) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Wed, 31 Aug 2005 21:19:34 +0000 Received: from elgar.sibelius.xs4all.nl (root@elgar.sibelius.xs4all.nl [192.168.0.2]) by sibelius.xs4all.nl (8.13.0/8.13.0) with ESMTP id j7VLJHFi008761; Wed, 31 Aug 2005 23:19:17 +0200 (CEST) Received: from elgar.sibelius.xs4all.nl (kettenis@localhost.sibelius.xs4all.nl [127.0.0.1]) by elgar.sibelius.xs4all.nl (8.13.4/8.13.3) with ESMTP id j7VLJHG0023264; Wed, 31 Aug 2005 23:19:17 +0200 (CEST) Received: (from kettenis@localhost) by elgar.sibelius.xs4all.nl (8.13.4/8.13.4/Submit) id j7VLJDkP020085; Wed, 31 Aug 2005 23:19:13 +0200 (CEST) Date: Wed, 31 Aug 2005 21:19:00 -0000 Message-Id: <200508312119.j7VLJDkP020085@elgar.sibelius.xs4all.nl> From: Mark Kettenis To: kevinb@redhat.com CC: pkoning@equallogic.com, gdb@sources.redhat.com In-reply-to: <20050831133045.7e6ea3ee@ironwood.lan> (message from Kevin Buettner on Wed, 31 Aug 2005 13:30:45 -0700) Subject: Re: enable_break() in solib-svr4.c References: <17152.63787.724675.956910@gargle.gargle.HOWL> <20050831133045.7e6ea3ee@ironwood.lan> X-SW-Source: 2005-08/txt/msg00130.txt.bz2 > Date: Wed, 31 Aug 2005 13:30:45 -0700 > From: Kevin Buettner > > On Mon, 15 Aug 2005 16:20:59 -0400 > Paul Koning wrote: > > > The code in solib-svr4.c in several places seems to assume that the > > shared lib loader is linked to base address 0, loaded somewhere else, > > and relocated at runtime -- and ditto for other libraries. > > > > I've just been battling a bug in enable_break, where the load address > > of the shared lib loader is added to a symbol address from the > > solib_break_names[] list. That produces nonsense on NetBSD/MIPS, > > because ldd.elf_so is linked to 5ffe0000 so that address is added to > > the symbol address (5ffexxxx). > > > > As a hack solution I have it add the load address only if the symbol > > value is less than the load address. It seems to me the correct way > > to cure this is to compute the relocation delta -- the difference > > between the load address and the as-linked VMA of the start of the > > library (from the program headers). I did something like this in > > svr4_relocate_section_addresses. > > I too would like to see your solution, hack or not. > > Is this issue different than the ones already discussed as part of the > following thread? > > http://sources.redhat.com/ml/gdb/2002-12/msg00266.html > > Kevin Did I reply to your origional message Paul? Or did I let it slip through? MIPS is rather special; IRIX apparently did things differently than everybody else, and some of the open source OS'es copied the IRIX behaviour for their MIPS ports. This is the case on NetBSD/mips; see that #ifdef __mips__ in /usr/include/link_elf.h? NetBSD made some changes between 1.6 and 2.0 to "rectify" this; and IIRC the current code works fine on 2.0, but not on 1.6. That said, we must be careful making assumptions about the address layout. The trend is that operating systems randomize the locations where they put stuff. Mark