From: Albert ARIBAUD <albert.aribaud@free.fr>
To: u-boot@lists.denx.de
Subject: [U-Boot] arm: wrong Relocation and not cleared BSS
Date: Sat, 30 Oct 2010 15:36:44 +0200 [thread overview]
Message-ID: <4CCC1F6C.7040603@free.fr> (raw)
In-Reply-To: <4CCC18E7.8080708@ahsoftware.de>
Le 30/10/2010 15:08, Alexander Holler a ?crit :
> Hello,
>
> to give the topic a better meaning and to summarize what I think is
> currently happening along with some "pictures" for a better understanding:
You may be right, but for now this is not necessarily what really
happens, so the subjet is still somewhat of a misnomer.
> We are starting with code (c) and data (d) somewhere in the memory:
>
> ----------
> |cd |
> ----------
>
> The relocation in start.S should achieve this:
>
> ----------
> | cd|
> ----------
>
> That means code and data should be moved upwards. What
> currently is happening is the following:
>
> ----------
> | d c |
> ----------
>
> The code is moved upwards, but that code still uses the data at d.
> This results another problem: Some parts in the code are assuming that d
> is cleared (set to zero in start.S). But what start.S does it to clear
> the new location (z in the picture below).
Wait a minute. No parts of the code assume BSS is *cleared*, or at least
no pat of the should *should ever* assume that. BSS is not "zeroed
data", it is "uninitialized data".
Which leads to another question: you found an issue according to which
values put in nand_chip[] were not read back correctly later on, with
both the writing and reading occurring after relocation.
But -- stop me if I'm wrong -- there is no reason that only one of the
reading or writing used the "right" address and one used the "wrong"
address, right? Both use the same address. Even if BSS does not end up
where it should, it would still be at the same address for all code, so
that does not explain the issue you're seeing.
> ----------
> | d cz|
> ----------
>
> Because the code (c) still uses the data (bss) in d and not in z, some
> hard to find errors might occur because the used data isn't set to zero
> as required.
BSS is not *required* to be zero. It is zeroed out as a courtesy, but
code is expected not to depend on BSS being zeroed. Besides, in your
case, the fact that it is zeroed out does not matter since you're
(correctly) trying to read a BSS variable that is assumed to have been
properly filled in earlier.
> I have almost no knowledge about how gcc and the binutils are handling
> relocation, therfore I can't help much further here. What I think is
> part of the problem, is that -fPIC was removed. Using -pie in LDFLAGS
> might be used to get relocatable code, but the data will not be
> relocated. And I would wonder if that is possible without instructing
> the compiler to build stuff for relocation (-fPIC).
>
> I hope that brings some light into the problem.
Again, when -fPIC was replace with -pie, it was because it actually
relocated much better that GOT relocation, including on NAND devices IIRC.
Could people with ARM NAND-based boards on the list test their own board
with Alexander's DEBUG and printf() added, and see what this gives on
their board?
> Regards,
>
> Alexander
Amicalement,
--
Albert.
next prev parent reply other threads:[~2010-10-30 13:36 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-30 13:08 [U-Boot] arm: wrong Relocation and not cleared BSS Alexander Holler
2010-10-30 13:36 ` Albert ARIBAUD [this message]
2010-10-30 13:45 ` Alexander Holler
2010-10-30 13:57 ` Albert ARIBAUD
2010-10-30 14:07 ` Alexander Holler
2010-10-30 14:39 ` Wolfgang Denk
2010-10-30 16:01 ` Albert ARIBAUD
2010-10-30 16:10 ` Wolfgang Denk
2010-10-30 14:37 ` Wolfgang Denk
2010-10-30 14:36 ` Wolfgang Denk
2010-10-31 10:59 ` Alexander Holler
2010-10-31 11:58 ` Wolfgang Denk
2010-10-31 12:21 ` Albert ARIBAUD
2010-10-31 16:18 ` Alexander Holler
2010-10-30 15:00 ` Wolfgang Denk
2010-10-30 17:21 ` Albert ARIBAUD
2010-10-30 18:01 ` Wolfgang Denk
2010-10-31 7:44 ` Heiko Schocher
2010-10-30 15:15 ` Darius Augulis
2010-10-30 16:44 ` Albert ARIBAUD
2010-10-30 20:03 ` Alexander Holler
2010-10-30 20:51 ` Alexander Holler
2010-10-31 7:47 ` Heiko Schocher
2010-11-02 5:39 ` V, Aneesh
2010-11-02 5:58 ` V, Aneesh
2010-11-02 6:32 ` Albert ARIBAUD
2010-11-02 7:18 ` V, Aneesh
2010-11-02 7:37 ` [U-Boot] Bad page state in process 'swapper' sywang
2010-11-02 7:44 ` Albert ARIBAUD
2010-11-02 8:13 ` sywang
2010-11-02 8:44 ` Wolfgang Denk
2010-11-02 8:40 ` Wolfgang Denk
2010-11-03 2:29 ` sywang
2010-11-02 7:41 ` [U-Boot] arm: wrong Relocation and not cleared BSS Albert ARIBAUD
2010-11-02 8:53 ` V, Aneesh
2010-11-02 9:04 ` Albert ARIBAUD
2010-10-31 7:43 ` Heiko Schocher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4CCC1F6C.7040603@free.fr \
--to=albert.aribaud@free.fr \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox