Date: Sat, 22 Dec 2001 19:01:51 -0800 From: Jamey Wood <Jamey.Wood@Sun.COM> To: freebsd-sparc@freebsd.org Subject: compiling a sparc64 kernel? Message-ID: <1483c13c42.13c421483c@smi.sun.com>
next in thread | raw e-mail | index | archive | help
I've been trying for a few days to build the sparc64 kernel,
but kept running into compiler errors (detailed notes below).
I put in some hacks to get everything to compile, but the resulting
kernel doesn't look to get as far into a boot as the binary version I
downloaded per tmm's sparc64 README. Note that I've got an Ultra 1
(so I understand the boot won't get very far because of no sbus
support, which is where I'm hoping I might be able to help the port).
For me, tmm's kernel results in:
/kernel data=0x202fb8+0xdfdc0 syms=[0x8+0x36210+0x8+0x2887c]
Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [/kernel]...
calling autoload
nothing to autoload yet.
post autoload
jumping to kernel entry at 0xc0030000.
sparc64_init: mdp=0xc0344000 kmdp=0xc0344000 boothowto=0
envp=0xc0342000 end=0x0
panic: trap_dmmu_miss: vmspace NULL
Debugger("panic")
Stopped at 0xc018479c: ta %xcc, 1
And my custom-compiled version (with the potentially bogus hacks
I explain in detail below) gets:
/kernel data=0x134ab8+0x4d2b8 syms=[0x8+0x255c0+0x8+0x1b653]
Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [/kernel]...
calling autoload
nothing to autoload yet.
post autoload
jumping to kernel entry at 0xc0028000.
RED State Exception
TL=0000.0000.0000.0005 TT=0000.0000.0000.0080
TPC=0000.0000.c002.4200 TnPC=0000.0000.c002.4204
TSTATE=0000.0099.5800.1506
TL=0000.0000.0000.0004 TT=0000.0000.0000.0010
TPC=0000.0000.c002.4d50 TnPC=0000.0000.c002.4d54
TSTATE=0000.0099.5804.1406
TL=0000.0000.0000.0003 TT=0000.0000.0000.0068
TPC=0000.0000.c002.82a8 TnPC=0000.0000.c002.82ac
TSTATE=0000.0099.5800.1506
TL=0000.0000.0000.0002 TT=0000.0000.0000.0034
TPC=0000.0000.c00e.3dac TnPC=0000.0000.c00e.3db0
TSTATE=0000.0099.5800.1605
TL=0000.0000.0000.0001 TT=0000.0000.0000.004e
TPC=000
<note that this one never gets to the sparc64_init: printf>
I'm trying to compile from a 5.0-current system (updated buildworld
from yesterday), using tmm's toolchain.
I'm just looking for an understanding of how to cleanly compile a
kernel that'll get as far into the boot as the tmm version. Thanks in
advance for any help.
--Jamey
*** Detailed info on compiler errors and my hacks to get around them
/usr/local/bin/sparc64-elf-gcc -D__sparc64__ -D__FreeBSD__=5 -c -O
-pipe -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes
-Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -ansi -g
-nostdinc -I- -I. -I../../.. -I../../../dev
-I../../../contrib/dev/acpica -I../../../contrib/ipfilter
-I ../../../../include -D_KERNEL -ffreestanding
-include opt_global.h ../../../sparc64/sparc64/machdep.c
../../../sparc64/sparc64/machdep.c: In function `sparc64_init':
../../../sparc64/sparc64/machdep.c:223: `MODINFOMD_HOWTO' undeclared
(first use in this function)
../../../sparc64/sparc64/machdep.c:223: (Each undeclared identifier
is reported only once
../../../sparc64/sparc64/machdep.c:223: for each function it appears
in.)
../../../sparc64/sparc64/machdep.c:224: `MODINFOMD_ENVP' undeclared
(first use in this function)
../../../sparc64/sparc64/machdep.c:225: `MODINFOMD_KERNEND'
undeclared (first use in this function)
../../../sparc64/sparc64/machdep.c: In function `Debugger':
../../../sparc64/sparc64/machdep.c:642: void value not ignored as
it ought to be ../../../sparc64/sparc64/machdep.c:644: too many
arguments to function `critical_exit'
*** Error code 1
Stop in /usr/src/sys/sparc64/compile/sparc64.
I've tried hacking whatever seems obvious (defining the MODINFOMD_*
constants, and changing the critical_exit calls in machdep.c and
tick.c to have no arguments). That gets me a little further, but
it then dies on:
/usr/local/bin/sparc64-elf-gcc -D__sparc64__ -D__FreeBSD__=5 -c -O
-pipe -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes
-Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -ansi -g
-nostdinc -I- -I. -I../../.. -I../../../dev
-I../../../contrib/dev/acpica -I../../../contrib/ipfilter
-I../../../../include -D_KERNEL -ffreestanding -include
opt_global.h vers.c
linking kernel.debug
db_disasm.o: In function `db_disasm':
db_disasm.o(.text+0x464): undefined reference to `abs'
db_disasm.o(.text+0x668): undefined reference to `abs'
So I've tried hacking that one by defining my own abs() function in
db_disasm. That does get everything to finally compile and link:
linking kernel.debug
text data bss dec hex filename
985789 247584 316080 1549453 17a48d kernel.debug
/usr/local/bin/sparc64-elf-objcopy --strip-debug kernel.debug kernel
But, as I noted earlier, this kernel doesn't get very far into a boot
at all, and I'm worried about the hacks I used to get this far. Is the
-current tree just temporarily in a state that doesn't compile cleanly?
Or am I doing something fundamentally wrong?
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-sparc" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1483c13c42.13c421483c>
