Initially, booting a straight git checkout on an IP32 will cause it to
prom crash, usually somewhere in between init_bootmem() and
init_bootmem_core(). I bisected git to trace this back to one of the
inital __pa() introduction patches from commit d4df6d4 (get ride of
CPHYSADDR()). It actually appears that the actual commit that broke
things was 620a480 (Make __pa() aware of XKPHYS/CKSEG0 address mix for
64 bit kernels).
The [short-term] fix highlighted by Ilya is to make __pa()
unconditionally be defined to "((unsigned long)(x) < CKSEG0 ?
PAGE_OFFSET : CKSEG0)"; Discovered by building IP32 with
Well, it means that you previously used CONFIG_BUILD_ELF64=y (this
implied that PAGE_OFFSET is in XKPHYS) whereas your kernel has CKSEG
load address (symbols need PAGE_OFFSET in CKSEG for address
So the question is why can't you use CONFIG_BUILD_ELF64=n (and
reagarding the current definition of CONFIG_BUILD_ELF64).
Normally, this shouldn't be possible, as CONFIG_BUILD_ELF64=n was
originally only allowed by using the old o64 hack, which has
subsequently died and been replaced with the newer -msym32 form. As far
as I know, CONFIG_BUILD_ELF64 is apparently supposed to be removed at
some point in the future, since I believe it existed only for quirky
It makes me think that I posted a patch for that a couple of weeks ago:
Basically this patch removes CONFIG_BUILD_ELF64 and makes Kbuild to use
'-msym32' switch if you really need it. Kbuild makes its choice according
the load address of your kernel image.
Could you give it a try ? This patch was based on 2.6.20 but it should
apply fine on a 2.6.21-rc.