public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
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.

  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