This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: [Gcl-devel] Re: relocation overflow
Greetings, and thanks for your reply!
Geoff Keating <geoffk@geoffk.org> writes:
> > Cc: Daniel Jacobowitz <drow@mvista.com>, Alan Modra <amodra@bigpond.net.au>,
> > gcl-devel@gnu.org, binutils@sources.redhat.com
> > From: Camm Maguire <camm@enhanced.com>
> > Date: 20 Nov 2002 21:45:23 -0500
>
> > Greetings, and thanks for your reply!
> >
> > Geoff Keating <geoffk@geoffk.org> writes:
> >
> > > Daniel Jacobowitz <drow@mvista.com> writes:
> > >
> > > > On Wed, Nov 20, 2002 at 12:01:59PM -0500, Camm Maguire wrote:
>
> > > > PowerPC GCC doesn't seem to have a long-calls option, so you're just
> > > > out of luck if you can't fit things in 16MB. Trampolines may be the
> > > > way to go.
> > >
> > > The way this is normally done, for programs that load arbitrary
> > > modules, is that each module is a .so file, is built with -fpic, and
> > > is loaded using the dlsym functions. Then the limit is 32Mb per
> > > module, and you can have as many modules as your address space can
> > > fit; cross-module calls happen through a PLT which can perform long
> > > jumps.
> >
> > OK, when I first read this, I thought that -fPIC would eliminate 24bit
> > relocs. I was mistaken, and have just verified that the reloc
> > overflows are different, but still present, when adding -fPIC. On
> > rereading this, it appears as though the dlym code has trampolines to
> > handle long calls on 24bit relocs. Maybe I should look here.
>
> Perhaps you are trying to load .o files, not .so files? There should
> be no *24 relocs in a .so file if all its contents are built with
> -fpic or -fPIC.
OK, this is what I thought you meant the first time. Unfortunately,
this does not seem to be the case:
camm@voltaire:~/gcl-2.5.0.cvs20020625/o$ gcc -c -Wall -DVOL=volatile -fsigned-char -fwritable-strings -pipe -fPIC main.c -o main.o
camm@voltaire:~/gcl-2.5.0.cvs20020625/o$ objdump -x main.o |grep 24
00000024 O *COM* 00000004 Cnil_body
00000024 O *COM* 00000004 Dotnil_body
00000024 O *COM* 00000004 Ct_body
00002460 g F .text 00000084 siLinitialization_failure
000024e8 g F .text 00000054 Lidentity
00000048 R_PPC_PLTREL24 setbuf
00000058 R_PPC_PLTREL24 setbuf
...
00000024 R_PPC_ADDR32 system_directory
000000b4 R_PPC_ADDR32 .data+0x00000024
Perhaps I need to pass each module through ld -shared too?
Take care,
>
> --
> - Geoffrey Keating <geoffk@geoffk.org>
>
>
--
Camm Maguire camm@enhanced.com
==========================================================================
"The earth is but one country, and mankind its citizens." -- Baha'u'llah