From: Alexander Holler <holler@ahsoftware.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] Most ARM CPU's have buggy clear_bss?
Date: Fri, 29 Oct 2010 14:31:43 +0200 [thread overview]
Message-ID: <4CCABEAF.40305@ahsoftware.de> (raw)
In-Reply-To: <4CCAB954.5050506@free.fr>
Am 29.10.2010 14:08, schrieb Albert ARIBAUD:
>>>> with -pie in LDFLAGS, which I don't understand (does not mean I have
>>>> much experience how the compiler and linker are working in regard to
>>>> relocatable code).
>>>>
>>
>>> That needs some more analysis.
>>>
>>> -fPIC without GOT relocation does nothing good, and with it, does not
>>> enough -- hence the ELF relocation patches replacing -fPIC with -pie,
>>> which is *intended* for relocating executables. these two machanisms are
>>> not meant to be used together.
>>>
>>> Can you be more specific about this:
>>
>> Adding
>>
>> printf("nand_chip: %p\n",&nand_chip[0]);
>>
>> to nand_init() in drivers/mtd/nand.c
>>
>> a non relocated address will be printed without -fPIC. After adding
>> -fPIC to the CFLAGS the address is relocated. U-Boot fails there first
>> because nand_chip[0] contains function pointers which are used while
>> scanning the NAND.
>
> Weird: I introduced -pie precisely because it relocates pointers in data
> structures while -fPIC does not -- I'd hit the issue myself. I assume I
> can test this with an OpenRD board, which has NAND also.
>
>> And because they aren't relocated, but only the
>> relocated BSS will be cleared, the following code in nand_set_defaults()
>> in drivers/mtd/nand/nand_base.c will not initialize cmdfunc
>>
>> if (chip->cmdfunc == NULL)
>> chip->cmdfunc = nand_command;
>>
>> with the result that chip->cmdfunc is called later which just points to
>> somewhere (because the not relocated BSS isn't cleared).
>
> Hmm... What do you mean by "a non relocated BSS ins't cleared" ? AFAICT,
> the start.S code clears the relocated BSS. Are we in a case where you
> prevent part of the relocation process, such as by using
> CONFIG_SKIP_RELOCATE_UBOOT?
The (wrong, not relocated) location of nand_chip (building without
-fPIC) is inside the BSS before relocation through sta?t.S. This part of
RAM will not be cleared because it shouldn't be used.
>> I'm having this problem with both gcc 4.3.4 and gcc 4.5.1 (along with
>> binutils 2.20.1). I'm compiling native.
>>
>> I've got the idea to add -fPIC while staring add the assembler output of
>> nand.c, trying to understand whats happening.
>>
>> I could send another mail to the list, when I've checked what happens
>> when I'm cross-compiling using the ELDK (I think the ELDK uses 4.2.x),
>> attaching 4 times nand.s (4.3.4.non-working, 4.5.1.non-working,
>> 4.5.1.fPIC.working, 4.2.x.currently_unknown).
>>
>> nand.s is about 55kB, don't know if I should send about 200k in one mail
>> to ml.
>
> Providing the location on the Net of the toolchains will be enough,
> (along with which version of nand.c you're using if that matters).
I'm using Gentoo where it's easy to swith the compiler (on a DockStar ~
Sheevaplug = Kirkwood Feroceon 88FR131) to compile the current HEAD of
the master
Regards,
Alexander
next prev parent reply other threads:[~2010-10-29 12:31 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-27 7:26 [U-Boot] Most ARM CPU's have buggy clear_bss? Darius Augulis
2010-10-27 8:01 ` Sughosh Ganu
2010-10-27 8:22 ` Darius Augulis
2010-10-27 8:54 ` Sughosh Ganu
2010-10-27 8:58 ` Darius Augulis
2010-10-27 9:09 ` Sughosh Ganu
2010-10-27 10:10 ` Darius Augulis
2010-10-27 10:40 ` Wolfgang Denk
2010-10-27 10:59 ` Darius Augulis
2010-10-27 11:41 ` Wolfgang Denk
2010-10-27 15:12 ` Eric Cooper
2010-10-27 18:11 ` Darius Augulis
2010-10-28 5:50 ` Heiko Schocher
2010-10-28 6:09 ` Reinhard Meyer
2010-10-28 6:17 ` Heiko Schocher
2010-10-28 6:20 ` Reinhard Meyer
2010-10-28 6:23 ` Reinhard Meyer
2010-10-28 6:35 ` Heiko Schocher
2010-10-28 6:14 ` Heiko Schocher
2010-10-28 6:36 ` Reinhard Meyer
2010-10-28 6:56 ` Darius Augulis
2010-10-28 8:36 ` Wolfgang Denk
2010-10-28 8:31 ` Wolfgang Denk
2010-10-28 8:39 ` Wolfgang Denk
2010-10-28 8:53 ` Heiko Schocher
2010-10-28 10:23 ` Alexander Holler
2010-10-28 11:16 ` Reinhard Meyer
2010-10-28 11:38 ` Wolfgang Denk
2010-10-28 11:55 ` Reinhard Meyer
2010-10-29 9:29 ` Albert ARIBAUD
2010-10-28 11:46 ` [U-Boot] CONFIG_SKIP_RELOCATE_UBOOT still used? Alexander Holler
2010-10-29 9:32 ` Albert ARIBAUD
2010-10-29 11:32 ` Alexander Holler
2010-10-29 11:43 ` Albert ARIBAUD
2010-10-29 11:48 ` Wolfgang Denk
2010-10-28 9:03 ` [U-Boot] Most ARM CPU's have buggy clear_bss? Alexander Holler
2010-10-28 9:31 ` Alexander Holler
2010-10-29 8:50 ` Alexander Holler
2010-10-29 9:19 ` Albert ARIBAUD
2010-10-29 11:56 ` Alexander Holler
2010-10-29 12:08 ` Albert ARIBAUD
2010-10-29 12:31 ` Alexander Holler [this message]
2010-10-29 13:37 ` Albert ARIBAUD
2010-10-29 13:50 ` Alexander Holler
2010-10-29 14:04 ` Albert ARIBAUD
2010-10-29 14:37 ` Alexander Holler
2010-10-29 14:44 ` Wolfgang Denk
2010-10-29 14:50 ` Alexander Holler
2010-10-29 14:50 ` Reinhard Meyer
2010-10-29 14:58 ` Alexander Holler
2010-10-29 14:54 ` Albert ARIBAUD
2010-10-29 15:05 ` Alexander Holler
2010-10-29 15:23 ` Albert ARIBAUD
2010-10-29 15:32 ` Alexander Holler
2010-10-29 15:38 ` Albert ARIBAUD
2010-10-29 16:56 ` Alexander Holler
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=4CCABEAF.40305@ahsoftware.de \
--to=holler@ahsoftware.de \
--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