This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: relocation truncated to fit errors


On 4/3/06, Marius Groeger <mgroeger@sysgo.com> wrote:
> On Mon, 3 Apr 2006, Niklaus wrote:
>
> > Good piece of information.  I tried writing a hello world program and
> > few others , it compiled file and i got the a.out. file showed it as
> > an mips executable.
> >
> > How do we provide the global pointer _gp.
>
> You need some linker script magic for that. As a totally random
> -- albeit visual -- example, take ...ldscripts/elf32ltsmip.x:
>
>    .data1          : { *(.data1) }
>    . = .;
>    _gp = ALIGN(16) + 0x7ff0;
>    .got            : { *(.got.plt) *(.got) }
>    /* We want the small data sections together, so single-instruction offsets
>       can access them all, and initialized data all before uninitialized, so
>
> This will define _gp in a way that it gives you a +/- 0x7ff0 range into the
> data segment. I'm not really knowledgable as to the gazillion aspects of
> current binutils linker script options, but this should at least give you
> some kind of a starting point.
>
> >> I'm not sure you're providing that.
> >> What's more, I think it'll also require the main program components be
> >> linked with -fPIC as well, which you are not doing.
> >>
> > I am not very sure about this. Can you tell me where i can find more
> > details about this.
>
> info gcc (and make sure you're browsing the info pages of your cross gcc,
> not the one installed on your development host!)
>
> >> I'm aware that this is no directly usable help for you. All I can advise is
> >> to carefully analyse (X-objdump -fph .. and X-objdump -d ..) ALL objects
> >> you're linking to make sure they're compatible with >each other.
> > How to check this if they are compatible.
>
pro@deb:~/scripe/cross/lib/gcc/mips-deb-linux/3.4.6$
mips-deb-linux-objdump -d libgcc.a  | grep __gp
pro@deb:~/scripe/cross/lib/gcc/mips-deb-linux/3.4.6$
mips-deb-linux-objdump -d libgcc.a  | egrep __gp
pro@deb:~/scripe/cross/lib/gcc/mips-deb-linux/3.4.6$

In archive libgcc.a:

_muldi3.oS:     file format elf32-tradbigmips

Disassembly of section .text:

00000000 <__muldi3>:
   0:   00870018        mult    a0,a3
   4:   00005012        mflo    t2
        ...
  10:   00a70019        multu   a1,a3
  14:   00001010        mfhi    v0
  18:   00001812        mflo    v1
        ...
  24:   00a60018        mult    a1,a2
  28:   00003012        mflo    a2
  2c:   00ca3021        addu    a2,a2,t2
  30:   03e00008        jr      ra
  34:   00c21021        addu    v0,a2,v0
        ...

_negdi2.oS:     file format elf32-tradbigmips

--More--

I don't find any __gp.


> Like I mentioned: run your cross objdump on the object files or the libgcc.a
> and scan the object's flags. With the -d option, you'll get a dissassembly.
> Looking more closely into that, you should find that all compiled C
> functions start with initializing the _gp pointer.
>
> > Thanks very much for the help and handholding so far.
>
> Not to worry -- I'm still not feeling like I provide much help here. I'm
> afraid you'll have to do quite some digging on your own here...
>
> Regards,
> Marius
>
> --
> Marius Groeger <mgroeger@sysgo.com>
> SYSGO AG                      Embedded and Real-Time Software
> Voice: +49 6136 9948 0                  FAX: +49 6136 9948 10
> www.sysgo.com | www.elinos.com | www.osek.de | www.pikeos.com
>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]