mpc8xx and ld.so problem
Anton Wöllert
a.woellert at gmail.com
Thu Jul 14 15:44:31 EST 2005
Theo Gjaltema wrote:
> Has anyone an idea why only this large application failed? busybox_1.0
> and more applications work fine.
> system is a: mcp862/32Mb SDRAM started from u-boot 0.4.1,
> kernel enhanced with atm/utopia driver.
>
> This driver causes the CPM sometimes to hang when performing a memset,
> can this be caused by the same problem?
> (CPM stops responding, console buffers are not flused anymore and
> kernel stops waiting for buffers)
>
> Greetings,
> Theo Gjaltema
>
the problem ( so i think ) is, that larger applications will need more
space, which in turn is satisfied by malloc (or mmap with fd = -1).
these allocated pages are not real initialized after malloc ( they will
be initialized completely, if a write on it is done, which will cause
the page fault handler, that does the hardware mmu-stuff, so that a
write can be done). so they will cause a page fault on a first access.
no problem so long, but when the memset.S routine in libc tries to set
all to zero, it uses the dcbz instructions. this instruction then causes
a page fault or better a TLB miss (if i'm right). after the exception is
raised, the address where the write to was done is looked up in the DAR
(data address register), which could be bogus on the dcb* instruction
(on 8xx, where is the errata for that?).
to sum up, the chance, that a memset( .., '\0', ..) with dcbz is done on
a page (that has just registered structures in the kernel, and not
cached in the tlb or even marked as writeable) is bigger :)
that's my opinion. if someone has more knowledge about that, or if i'm
wrong - please! correct me.
anton
More information about the Linuxppc-embedded
mailing list