OK, I'm currently attempting to build Pistachio for x86 32-bit. I've built a pretty standard kernel (Pentium 2/3, KDB, spinwheels and tracing are the only things I've enabled for now). My aim is an AMD64 kernel with more features, but it's always best to start with a smaller base and get that working first.
I've then built the usermode tasks, and built a grub disk using the included grubdisk.img. Problem is, the kernel crashes on both emulators I've tried it with (Bochs and QEMU). The last message I get from the kernel before it crashes is "Initializing GDT (Preliminary)". The Bochslog preceding this is > 00128039070e[CPU0 ] LTR: doesn't point to an available TSS descriptor! > 00128039070e[CPU0 ] interrupt(): gate descriptor is not valid sys seg > (vector=0x0d) 00128039070e[CPU0 ] interrupt(): gate descriptor is not valid sys seg > (vector=0x08) 00128039070i[CPU0 ] CPU is in protected mode (active) > 00128039070i[CPU0 ] CS.d_b = 32 bit > 00128039070i[CPU0 ] SS.d_b = 32 bit > 00128039070i[CPU0 ] EFER = 0x00000000 > 00128039070i[CPU0 ] | RAX=000000000000f012 RBX=00000000000000f0 > 00128039070i[CPU0 ] | RCX=0000000000000f00 RDX=0000000000000000 > 00128039070i[CPU0 ] | RSP=000000000015648c RBP=0000000000802028 > 00128039070i[CPU0 ] | RSI=000000000000df00 RDI=000000000003eaa0 > 00128039070i[CPU0 ] | R8=0000000000000000 R9=0000000000000000 > 00128039070i[CPU0 ] | R10=0000000000000000 R11=0000000000000000 > 00128039070i[CPU0 ] | R12=0000000000000000 R13=0000000000000000 > 00128039070i[CPU0 ] | R14=0000000000000000 R15=0000000000000000 > 00128039070i[CPU0 ] | IOPL=0 ID vip vif ac vm RF nt of df if tf sf zf af PF > cf 00128039070i[CPU0 ] | SEG selector base limit G D > 00128039070i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D > 00128039070i[CPU0 ] | CS:0008( 0001| 0| 0) 00000000 ffffffff 1 1 > 00128039070i[CPU0 ] | DS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 > 00128039070i[CPU0 ] | SS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 > 00128039070i[CPU0 ] | ES:0010( 0002| 0| 0) 00000000 ffffffff 1 1 > 00128039070i[CPU0 ] | FS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 > 00128039070i[CPU0 ] | GS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 > 00128039070i[CPU0 ] | MSR_FS_BASE:0000000000000000 > 00128039070i[CPU0 ] | MSR_GS_BASE:0000000000000000 > 00128039070i[CPU0 ] | RIP=00000000001532dc (00000000001532dc) > 00128039070i[CPU0 ] | CR0=0xe0010011 CR2=0x0000000000000000 > 00128039070i[CPU0 ] | CR3=0x00134000 CR4=0x00000090 > (0).[128039070] [0x001532dc] 0008:00000000001532dc (unk. ctxt): ltr word ptr > ss:[esp+0x10] ; 0f005c2410 00128039070e[CPU0 ] exception(): 3rd (13) exception with no resolution, > shutdown status is 00h, resetting I think we can safely assume that something has gone wrong loading the TSS, a general protection fault has been raised during the LTR, then a double fault has followed that. Is this a bug in the L4 sources, or an issue with my build environment? The important information is > $ uname -a Linux sidewinder 2.6.31-15-generic #50-Ubuntu SMP Tue Nov 10 14:53:52 UTC > 2009 x86_64 GNU/Linux $ gcc -v Using built-in specs. Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu > 4.4.1-4ubuntu8' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs > --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared > --enable-multiarch --enable-linker-build-id --with-system-zlib > --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix > --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 > --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc > --disable-werror --with-arch-32=i486 --with-tune=generic > --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu > --target=x86_64-linux-gnu Thread model: posix gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu8) $ ld -v GNU ld (GNU Binutils for Ubuntu) 2.20