From: Paul Koning <pkoning@equallogic.com>
To: 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 18:40:00 -0000 [thread overview]
Message-ID: <15937.26809.680000.225947@gargle.gargle.HOWL> (raw)
In-Reply-To: <08ab01c2b760$2e6612a0$0202040a@catdog>
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.
Suggestions would be much appreciated.
paul
next prev parent reply other threads:[~2003-02-05 18:40 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 [this message]
2003-02-05 19:08 ` Kris Warkentin
2003-02-05 19:11 ` Kevin Buettner
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=15937.26809.680000.225947@gargle.gargle.HOWL \
--to=pkoning@equallogic.com \
--cc=cburgess@qnx.com \
--cc=gdb@sources.redhat.com \
--cc=kevinb@redhat.com \
--cc=kewarken@qnx.com \
--cc=peterv@qnx.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