aboutsummaryrefslogtreecommitdiff
path: root/cpu/mpc5xx/start.S
diff options
context:
space:
mode:
authorJoakim Tjernlund2009-10-08 02:03:51 +0200
committerWolfgang Denk2009-10-08 09:33:36 +0200
commitafc3ba0fc4195624e79e21244380ed7cc2fd6969 (patch)
tree1ac329f1981d1871a31d2e0d26d4f53193695a56 /cpu/mpc5xx/start.S
parent3beb40c2473f0dd373231c723d88c51e46ad96f7 (diff)
relocation: Do not relocate NULL pointers.
NULL is an absolute value and should not be relocated. After this correction code like: void weak_fun(void) __attribute__((weak)); printf("weak_fun:%p\n", weak_fun); will still print null after relocation. Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Diffstat (limited to 'cpu/mpc5xx/start.S')
-rw-r--r--cpu/mpc5xx/start.S6
1 files changed, 4 insertions, 2 deletions
diff --git a/cpu/mpc5xx/start.S b/cpu/mpc5xx/start.S
index 106935cb636..85ea7a88276 100644
--- a/cpu/mpc5xx/start.S
+++ b/cpu/mpc5xx/start.S
@@ -458,15 +458,17 @@ in_ram:
sub r11,r3,r11
addi r3,r3,-4
1: lwzu r0,4(r3)
+ cmpwi r0,0
+ beq- 2f
add r0,r0,r11
stw r0,0(r3)
- bdnz 1b
+2: bdnz 1b
/*
* Now adjust the fixups and the pointers to the fixups
* in case we need to move ourselves again.
*/
-2: li r0,__fixup_entries@sectoff@l
+ li r0,__fixup_entries@sectoff@l
lwz r3,GOT(_FIXUP_TABLE_)
cmpwi r0,0
mtctr r0