* [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation
@ 2010-12-15 13:57 Jason Liu
2010-12-15 17:06 ` Albert ARIBAUD
0 siblings, 1 reply; 10+ messages in thread
From: Jason Liu @ 2010-12-15 13:57 UTC (permalink / raw)
To: u-boot
There will have issue if the _start not equal TEXT_BASE
when enable relocation. The reason is as the followings,
The _dynsym_start_ofs and _rel_dyn_start_ofs is the
offset from _start, so, need use _start address instead
of _TEXT_BASE to caculate the rel dyn start and sym table
address. This patch also correct the board_init_r function
address caculation in relocation area. The addr of board_init_r
after relocation is: _board_init_r_offs + relocation start address.
This patch also make code cleanup by removing some useless code
Signed-off-by: Jason Liu <r64343@freescale.com>
---
arch/arm/cpu/armv7/start.S | 8 ++------
1 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
index 684f2d2..08902b0 100644
--- a/arch/arm/cpu/armv7/start.S
+++ b/arch/arm/cpu/armv7/start.S
@@ -171,7 +171,6 @@ stack_setup:
beq clear_bss /* skip relocation */
#endif
mov r1, r6 /* r1 <- scratch for copy_loop */
- ldr r2, _TEXT_BASE
ldr r3, _bss_start_ofs
add r2, r0, r3 /* r2 <- source end address */
@@ -185,7 +184,7 @@ copy_loop:
/*
* fix .rel.dyn relocations
*/
- ldr r0, _TEXT_BASE /* r0 <- Text base */
+ adr r0, _start
sub r9, r6, r0 /* r9 <- relocation offset */
ldr r10, _dynsym_start_ofs /* r10 <- sym table ofs */
add r10, r10, r0 /* r10 <- sym table in FLASH */
@@ -224,7 +223,6 @@ fixnext:
clear_bss:
ldr r0, _bss_start_ofs
ldr r1, _bss_end_ofs
- ldr r3, _TEXT_BASE /* Text base */
mov r4, r6 /* reloc addr */
add r0, r0, r4
add r1, r1, r4
@@ -242,9 +240,7 @@ clbss_l:str r2, [r0] /* clear loop... */
*/
jump_2_ram:
ldr r0, _board_init_r_ofs
- adr r1, _start
- add lr, r0, r1
- add lr, lr, r9
+ add lr, r0, r4
/* setup parameters for board_init_r */
mov r0, r5 /* gd_t */
mov r1, r6 /* dest_addr */
--
1.7.0.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation
2010-12-15 13:57 [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation Jason Liu
@ 2010-12-15 17:06 ` Albert ARIBAUD
2010-12-16 3:04 ` Jason Liu
0 siblings, 1 reply; 10+ messages in thread
From: Albert ARIBAUD @ 2010-12-15 17:06 UTC (permalink / raw)
To: u-boot
Hi Jason,
Le 15/12/2010 14:57, Jason Liu a ?crit :
> There will have issue if the _start not equal TEXT_BASE
> when enable relocation.
In what case does this happen?
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation
2010-12-15 17:06 ` Albert ARIBAUD
@ 2010-12-16 3:04 ` Jason Liu
2010-12-16 9:04 ` Albert ARIBAUD
2010-12-16 9:53 ` Wolfgang Denk
0 siblings, 2 replies; 10+ messages in thread
From: Jason Liu @ 2010-12-16 3:04 UTC (permalink / raw)
To: u-boot
Hi, Albert,
2010/12/16 Albert ARIBAUD <albert.aribaud@free.fr>:
> Hi Jason,
>
> Le 15/12/2010 14:57, Jason Liu a ?crit :
>> There will have issue if the _start not equal TEXT_BASE
>> when enable relocation.
>
> In what case does this happen?
Some ARM SOC ROM need run the plug-in code first in IRAM and the
plugin-in code need appear at the beginning of the u-boot. ROM will
check the plugin-in header to do security check and run the plug-in
code to init the DDR etc. In this case the _start will be not the same
as TEXT_BASE.
Thanks for your comments. Cheers,
>
> Amicalement,
> --
> Albert.
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation
2010-12-16 3:04 ` Jason Liu
@ 2010-12-16 9:04 ` Albert ARIBAUD
2010-12-16 9:18 ` Jason Liu
2010-12-16 9:53 ` Wolfgang Denk
1 sibling, 1 reply; 10+ messages in thread
From: Albert ARIBAUD @ 2010-12-16 9:04 UTC (permalink / raw)
To: u-boot
Le 16/12/2010 04:04, Jason Liu a ?crit :
> Hi, Albert,
>
> 2010/12/16 Albert ARIBAUD<albert.aribaud@free.fr>:
>> Hi Jason,
>>
>> Le 15/12/2010 14:57, Jason Liu a ?crit :
>>> There will have issue if the _start not equal TEXT_BASE
>>> when enable relocation.
>>
>> In what case does this happen?
>
> Some ARM SOC ROM need run the plug-in code first in IRAM and the
> plugin-in code need appear at the beginning of the u-boot. ROM will
> check the plugin-in header to do security check and run the plug-in
> code to init the DDR etc. In this case the _start will be not the same
> as TEXT_BASE.
I still don't see why u-boot would not end up where specified.
The fact that there is a "plug-in" (I assume it's what I would call an
IPL) does not change the fact that its payload (u-boot) can and will be
loaded where specified, i.e. at TEXT_BASE -- and if it is loaded
elsewhere, it is at a fixed address, so TEXT_BASE can be adjusted) All
IPLs that I know of put their payload where specified.
> Thanks for your comments. Cheers,
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation
2010-12-16 9:04 ` Albert ARIBAUD
@ 2010-12-16 9:18 ` Jason Liu
2010-12-16 9:58 ` Albert ARIBAUD
0 siblings, 1 reply; 10+ messages in thread
From: Jason Liu @ 2010-12-16 9:18 UTC (permalink / raw)
To: u-boot
Hi, Albert,
2010/12/16 Albert ARIBAUD <albert.aribaud@free.fr>:
> Le 16/12/2010 04:04, Jason Liu a ?crit :
>>
>> Hi, Albert,
>>
>> 2010/12/16 Albert ARIBAUD<albert.aribaud@free.fr>:
>>>
>>> Hi Jason,
>>>
>>> Le 15/12/2010 14:57, Jason Liu a ?crit :
>>>>
>>>> There will have issue if the _start not equal TEXT_BASE
>>>> when enable relocation.
>>>
>>> In what case does this happen?
>>
>> Some ARM SOC ROM need run the plug-in code first in IRAM and the
>> plugin-in code need appear at the beginning of the u-boot. ROM will
>> check the plugin-in header to do security check and run the plug-in
>> code to init the DDR etc. In this case the _start will be not the same
>> as TEXT_BASE.
>
> I still don't see why u-boot would not end up where specified.
>
> The fact that there is a "plug-in" (I assume it's what I would call an IPL)
> does not change the fact that its payload (u-boot) can and will be loaded
> where specified, i.e. at TEXT_BASE -- and if it is loaded elsewhere, it is
> at a fixed address, so TEXT_BASE can be adjusted) All IPLs that I know of
> put their payload where specified.
It's not an IPL. The layout is that as the following,
---- ----- TEXT_BASE
plug-in
---------- _start
---------- _end
No matter what you adjusted the TEXT_BASE, the _star is not equal to it.
The fix doe not affect the original functionality but just make it
more flexible.
>
>> Thanks for your comments. Cheers,
>
> Amicalement,
> --
> Albert.
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation
2010-12-16 3:04 ` Jason Liu
2010-12-16 9:04 ` Albert ARIBAUD
@ 2010-12-16 9:53 ` Wolfgang Denk
1 sibling, 0 replies; 10+ messages in thread
From: Wolfgang Denk @ 2010-12-16 9:53 UTC (permalink / raw)
To: u-boot
Dear Jason Liu,
In message <AANLkTimMct8TKe7k-0LA4Gob1mJZnCw0f9xbbp9VKMoz@mail.gmail.com> you wrote:
>
> > In what case does this happen?
>
> Some ARM SOC ROM need run the plug-in code first in IRAM and the
> plugin-in code need appear at the beginning of the u-boot. ROM will
> check the plugin-in header to do security check and run the plug-in
> code to init the DDR etc. In this case the _start will be not the same
> as TEXT_BASE.
So we are talking about aSoC that is not supported yet in U-Boot.
Let's talk about this when such support gets added to U-Boot.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Mistakes are often the stepping stones to utter failure.
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation
2010-12-16 9:18 ` Jason Liu
@ 2010-12-16 9:58 ` Albert ARIBAUD
2010-12-16 10:09 ` Wolfgang Denk
0 siblings, 1 reply; 10+ messages in thread
From: Albert ARIBAUD @ 2010-12-16 9:58 UTC (permalink / raw)
To: u-boot
Le 16/12/2010 10:18, Jason Liu a ?crit :
> Hi, Albert,
>
> 2010/12/16 Albert ARIBAUD<albert.aribaud@free.fr>:
>> Le 16/12/2010 04:04, Jason Liu a ?crit :
>>>
>>> Hi, Albert,
>>>
>>> 2010/12/16 Albert ARIBAUD<albert.aribaud@free.fr>:
>>>>
>>>> Hi Jason,
>>>>
>>>> Le 15/12/2010 14:57, Jason Liu a ?crit :
>>>>>
>>>>> There will have issue if the _start not equal TEXT_BASE
>>>>> when enable relocation.
>>>>
>>>> In what case does this happen?
>>>
>>> Some ARM SOC ROM need run the plug-in code first in IRAM and the
>>> plugin-in code need appear at the beginning of the u-boot. ROM will
>>> check the plugin-in header to do security check and run the plug-in
>>> code to init the DDR etc. In this case the _start will be not the same
>>> as TEXT_BASE.
>>
>> I still don't see why u-boot would not end up where specified.
>>
>> The fact that there is a "plug-in" (I assume it's what I would call an IPL)
>> does not change the fact that its payload (u-boot) can and will be loaded
>> where specified, i.e. at TEXT_BASE -- and if it is loaded elsewhere, it is
>> at a fixed address, so TEXT_BASE can be adjusted) All IPLs that I know of
>> put their payload where specified.
>
> It's not an IPL. The layout is that as the following,
>
> ---- ----- TEXT_BASE
> plug-in
> ---------- _start
>
> ---------- _end
>
> No matter what you adjusted the TEXT_BASE, the _star is not equal to it.
>
> The fix doe not affect the original functionality but just make it
> more flexible.
This layout is not that of u-boot for ARM; the fix thus corrects a fault
not inherent to u-boot but introduced by inserting this "plug-in" where
it should not be.
Why must you modify the original layout?
Also, what is this 'plug-in' if it is not an IPL?
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation
2010-12-16 9:58 ` Albert ARIBAUD
@ 2010-12-16 10:09 ` Wolfgang Denk
2010-12-16 10:22 ` Jason Liu
0 siblings, 1 reply; 10+ messages in thread
From: Wolfgang Denk @ 2010-12-16 10:09 UTC (permalink / raw)
To: u-boot
Dear Albert ARIBAUD,
In message <4D09E2B9.5030405@free.fr> you wrote:
>
> Why must you modify the original layout?
right!
> Also, what is this 'plug-in' if it is not an IPL?
Yes, and why must it be linked at TEXT_BASE?
Let's stop this here.
Let's wait until any code is submitted or proposed that actually
needs such a feature. Then we can discuss the design and try to find
a solution that makes sense.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
History is only a confused heap of facts.
-- Philip Earl of Chesterfield
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation
2010-12-16 10:09 ` Wolfgang Denk
@ 2010-12-16 10:22 ` Jason Liu
2010-12-16 12:20 ` Wolfgang Denk
0 siblings, 1 reply; 10+ messages in thread
From: Jason Liu @ 2010-12-16 10:22 UTC (permalink / raw)
To: u-boot
Hi, Wolfgang,
2010/12/16 Wolfgang Denk <wd@denx.de>:
> Dear Albert ARIBAUD,
>
> In message <4D09E2B9.5030405@free.fr> you wrote:
>>
>> Why must you modify the original layout?
>
> right!
>
>> Also, what is this 'plug-in' if it is not an IPL?
>
> Yes, and why must it be linked at TEXT_BASE?
>
> Let's stop this here.
>
> Let's wait until any code is submitted or proposed that actually
> needs such a feature. ?Then we can discuss the design and try to find
> a solution that makes sense.
In fact, this is indeed one bug in the code as I said in the comit log:
"the _dynsym_start_ofs and _rel_dyn_start_ofs is the
offset from _start, so, need use _start address instead
of _TEXT_BASE to caculate the rel dyn start and sym table
address. This patch also correct the board_init_r function
address caculation in relocation area. The addr of board_init_r
after relocation is: _board_init_r_offs + relocation start address."
Is there any thing wrong with my patch?
The case I met just make the bug show up.
>
> Best regards,
>
> Wolfgang Denk
>
> --
> DENX Software Engineering GmbH, ? ? MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
> History is only a confused heap of facts.
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- Philip Earl of Chesterfield
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation
2010-12-16 10:22 ` Jason Liu
@ 2010-12-16 12:20 ` Wolfgang Denk
0 siblings, 0 replies; 10+ messages in thread
From: Wolfgang Denk @ 2010-12-16 12:20 UTC (permalink / raw)
To: u-boot
Dear Jason Liu,
In message <AANLkTik=BSaBbV-NOJYg2QXx0Q-YYK4=Ox3iF8dWR5re@mail.gmail.com> you wrote:
>
> In fact, this is indeed one bug in the code as I said in the comit log:
>
> "the _dynsym_start_ofs and _rel_dyn_start_ofs is the
> offset from _start, so, need use _start address instead
> of _TEXT_BASE to caculate the rel dyn start and sym table
> address. This patch also correct the board_init_r function
> address caculation in relocation area. The addr of board_init_r
> after relocation is: _board_init_r_offs + relocation start address."
If there are really two different bugs, then please split your patch
into to separate commits, and explain the respective problem in the
commit messages.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
A modem is a baudy house.
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2010-12-16 12:20 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-15 13:57 [U-Boot] [PATCH 1/1] armv7: start.S: Fix relocation address caculation Jason Liu
2010-12-15 17:06 ` Albert ARIBAUD
2010-12-16 3:04 ` Jason Liu
2010-12-16 9:04 ` Albert ARIBAUD
2010-12-16 9:18 ` Jason Liu
2010-12-16 9:58 ` Albert ARIBAUD
2010-12-16 10:09 ` Wolfgang Denk
2010-12-16 10:22 ` Jason Liu
2010-12-16 12:20 ` Wolfgang Denk
2010-12-16 9:53 ` Wolfgang Denk
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.