On 6/27/06, David McCullough <[EMAIL PROTECTED]> wrote:
AFAIK, you need to drop the -FPIC in favour of -fpic everywhere.
From the GCC manual, -fpic vs. -fPIC `makes a difference on the m68k,
PowerPC and SPARC.' For my purposes, it makes no difference on the
ARM.
You could try some experiments using the older toolchain to see how it
puts binaries together etc. AFAIK, thumb and most archs are supported
by it, it provides at least a working reference for fixing a new
toolchain at least,
I have experimented with GCC 4.0.3, 4.1.0, and 4.1.1. I found that
4.1.x behave the same; however, GCC 4.0.3 does not emit GOTOFF32
relocations. Apparently these are a new feature and preferable in some
instances since they do reduce the number of instructions by one.
However, GOTOFF32 does not work when a the relocation is emitted for a
symbol in the .text segment. As far as I know, any XIP application
with a static callback function should fail if it's compiled with
arm-elf-gcc 4.1.x. If anyone else is using this toolchain, I'd
appreciate the confirmation. The following diff of the output from GCC
4.0.3 to GCC 4.1.1 illustrates the new behaviour.
Cheers,
Shaun
$ cat f.c
void g(void (*h)(void)) {}
static void f(void) { g(f); }
$ diff -u f.s-4.0.3 f.s-4.1.1
--- f.s-4.0.3 2006-06-28 09:32:54.044964568 -0600
+++ f.s-4.1.1 2006-06-28 08:55:49.880089024 -0600
@@ -8,11 +8,12 @@
.type g, %function
g:
push {r7, lr}
- mov r7, sp
sub sp, sp, #4
- sub r3, r7, #4
+ add r7, sp, #0
+ mov r3, r7
str r0, [r3]
mov sp, r7
+ add sp, sp, #4
@ sp needed for prologue
pop {r7, pc}
.size g, .-g
@@ -22,10 +23,9 @@
.type f, %function
f:
push {r7, lr}
- mov r7, sp
+ add r7, sp, #0
ldr r3, .L5
add r3, r3, sl
- ldr r3, [r3]
mov r0, r3
bl g
mov sp, r7
@@ -34,6 +34,6 @@
.L6:
.align 2
.L5:
- .word f(GOT)
+ .word f(GOTOFF)
.size f, .-f
- .ident "GCC: (GNU) 4.0.3"
+ .ident "GCC: (GNU) 4.1.1"