Paul wrote
[...]
> The assembler is having trouble with the series of .org directives at the
> end of head.S that look like this:
>
> .org 0x1000
> EXPORT(swapper_pg_dir)
>
> .org 0x2000
> EXPORT(empty_bad_page)
>
> etc.
Got it - in the head.s that I have, these are actually
.org . + 0x1000
and then there is a #ifndef CONFIG_MIPS_DECSTATION around the .org for
kernel_entry as follows:
#ifndef CONFIG_MIPS_DECSTATION
.org 0x8000
#else
.org . + 0x8000
#endif /* CONFIG_MIPS_DECSTATION */
So of course I was getting the .org 0x8000 rather than . + 0x8000, and since
the other entries used . +, I had gone over 0x8000 already. Changing them all
back to just .org 0x?000 allows me to assemble head.S. I note they are just
.org 0x?000 in the 2.1.36 version (which seems to have a radically different
head.S anyway).
However I now get a really weird error when linking:
mips-linux-ld -N -G 0 -Ttext 0x80100000 arch/mips/kernel/head.o init/main.o in
it/version.o \
arch/mips/mips1/mips.o arch/mips/kernel/kernel.o arch/mips/mm/mm.o kern
el/kernel.o mm/mm.o fs/fs.o ipc/ipc.o net/network.a \
fs/filesystems.a \
drivers/block/block.a drivers/char/char.a drivers/net/net.a \
arch/mips/lib/lib.a
/amd/milawa/root/u2/staff/davidm/mips/linux-2.1.1.dec/lib/lib.a
arch/mips/lib/lib.a -o vmlinux
mips-linux-ld: warning: cannot find entry symbol __start; defaulting to 0000000
080100000
mips-linux-ld: vmlinux: Not enough room for program headers (allocated 3, need
4)
mips-linux-ld: final link failed: Bad value
make: *** [vmlinux] Error 1
I'm not too worried about the 'can't find symbol start', but the other message
is very odd. This is using binutils-2.8 and gcc-2.7.2.2 with gcc-2.7.2-3.diffs
and float.h found on fnet, all compiled with --target=mips-linux. Anybody seen
this one?
David
|