From: Kevin Buettner <kevinb@redhat.com>
To: Paul Koning <pkoning@equallogic.com>, kewarken@qnx.com
Cc: kevinb@redhat.com, gdb@sources.redhat.com, peterv@qnx.com,
cburgess@qnx.com
Subject: Re: relocation of shared libs not based at 0
Date: Wed, 05 Feb 2003 19:11:00 -0000 [thread overview]
Message-ID: <1030205191053.ZM3334@localhost.localdomain> (raw)
In-Reply-To: Paul Koning <pkoning@equallogic.com> "Re: relocation of shared libs not based at 0" (Feb 5, 2:40pm)
On Feb 5, 2:40pm, Paul Koning wrote:
> I'm resurrecting this thread to bring up a problem that's closely
> related.
>
> On mips-netbsd, even after fixing the relocation problem (e.g., by the
> patch I proposed earlier) gdb still has problems. Specifically, it
> computes the wrong address for data within the shared library.
>
> After doing battle with various parts of gdb for quite some time, I
> finally realized what the issue is. What puzzled me is that it works
> just fine on netbsd-i386. That finally led me to the answer...
>
> The reason can be seen by looking at the symbol table. Here are
> (partial) objdump runs, first for i386, then for mips:
>
> mainx86/libf3.so: file format elf32-i386
>
> SYMBOL TABLE:
> 000006fc l F .text 0000002b _strrchr
> 00000000 F *UND* 00000000 __syscall
> 0000083c w F .text 00000033 dlerror
> 00000000 F *UND* 0000002b printf
> 00001b80 g O .bss 00000004 __mainprog_obj
> 00001b88 g O .bss 00000004 p
> 00000934 g F .text 00000041 f3
>
> mainmips/libf3.so: file format elf32-littlemips
>
> SYMBOL TABLE:
> 5ffe10f0 F *UND* 00000034 __syscall
> 5ffe0e20 w F *ABS* 00000000 dlerror
> 5ffe1100 F *UND* 00000068 printf
> 60021314 g O *ABS* 00000004 p
> 5ffe1040 g F *ABS* 000000ac f3
>
> The difference is that the mips symbol table has all symbols as *ABS*,
> whether they are text (functions) or data.
>
> When the library is loaded, text and data are relocated separately
> since they are two separate mmap regions. So the relocation bias is
> different for the two. The i386 case works because the symbols are
> correctly marked as to which region they belong to (text, data, bss).
> But the mips case doesn't have that, so all symbol relocation is done
> as if the symbols were text. The data and bss offsets are fine as
> file offsets, but because the parts are mapped separately they are NOT
> valid as memory address offsets.
>
> I'm wondering what the right way to fix this is. Two ways come to
> mind:
>
> 1. Fix ld so it puts the right section designations on the symbols,
> just as in the i386 case.
>
> 2. Hack gdb so it looks at the section headers in the shared library
> file, to extract the start and length of the three regions. Use
> that to identify the *ABS* symbols (i.e., p is bss since it's
> within the vaddr range of the bss section in the section headers),
> and then figure the correct relocation from that.
>
> I can do (2), and that has the advantage of working with existing
> binaries, but it seems ugly. (1) sounds right. There are two issues
> there, though. One is that I don't know ld. The other is that I'm
> guessing there must be SOME reason why *ABS* is used for the mips
> case, though I can't imagine any reason.
(1) sounds right to me too, though I share your concern that there may
be some reason that ABS must be used the way it is for mips. I think
you ought to ask about this on the binutils list...
If you have to do (2), I strongly encourage you to create a new solib
backend for it.
Kevin
next prev parent reply other threads:[~2003-02-05 19:11 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-12-17 12:23 Kris Warkentin
2002-12-17 12:31 ` Paul Koning
2002-12-17 13:36 ` Kris Warkentin
2002-12-17 16:28 ` Kevin Buettner
2002-12-17 16:47 ` Paul Koning
2003-01-08 21:52 ` Kris Warkentin
2003-01-08 22:24 ` Kevin Buettner
2003-01-09 14:35 ` Colin Burgess
2003-01-09 15:06 ` Kris Warkentin
2003-02-05 18:40 ` Paul Koning
2003-02-05 19:08 ` Kris Warkentin
2003-02-05 19:11 ` Kevin Buettner [this message]
2003-02-10 21:45 ` Paul Koning
2003-02-12 18:06 ` Kevin Buettner
2003-02-12 18:19 ` Kris Warkentin
2002-12-17 13:39 David Anderson
2003-02-12 18:37 Peter van der Veen
2004-01-05 17:39 Paul Koning
2004-01-09 22:48 ` Kevin Buettner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1030205191053.ZM3334@localhost.localdomain \
--to=kevinb@redhat.com \
--cc=cburgess@qnx.com \
--cc=gdb@sources.redhat.com \
--cc=kewarken@qnx.com \
--cc=peterv@qnx.com \
--cc=pkoning@equallogic.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox