This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: arm/thumb: GOT and indirections
- From: Richard Earnshaw <rearnsha at arm dot com>
- To: "Thierry COLIN" <thierry dot colin at thales-e-transactions dot com>
- Cc: avbidder at acter dot ch, gcc at gcc dot gnu dot org, Richard dot Earnshaw at arm dot com
- Date: Wed, 10 Apr 2002 16:06:54 +0100
- Subject: Re: arm/thumb: GOT and indirections
- Organization: ARM Ltd.
- Reply-to: Richard dot Earnshaw at arm dot com
> Hi,
>
> I work with GCC 3.0.4 and I found the same pb as you. Indeed, I have the
> following source and asm code : (compiled with -fpic and -mthumb options
> - and others but without importance here -)
> ...
> sDisplayPuts(1,s);
> - 0x50f4 <vMain+40>: ldr r3, [pc, #36] (0x511c <vMain+80>)
> - 0x50f6 <vMain+42>: add r3, r10
> - 0x50f8 <vMain+44>: ldr r3, [r3, #0]
> - 0x50fa <vMain+46>: ldr r3, [r3, #0] <----------- PB
> here
> - 0x50fc <vMain+48>: mov r0, #1
> - 0x50fe <vMain+50>: mov r1, r3 (add r1, r3, #0)
> - 0x5100 <vMain+52>: bl 0x5048 <sDisplayPuts>
> ...
>
> At 0x50fa (the second ldr r3 [r3,#0]), I think that this instruction
> must be suppressed...
> When I modify the source code and create a global const char*, I think
> it works because with the debugger, I saw the address of this constant
> in the r3 register.
>
> Do you know if a correction exists (a patch for exemple before the 3.1.x
> release).
There are several quite serious bugs in the -mthumb -fpic code of
gcc-3.0.x, since this combination is not really supported yet (not least
is that switch tables are completely broken). I've fixed several in the
gcc-3.1 sources, but they are still largely untested. I don't really have
an OS to try them on.
R.