[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Oskit-mach tests



Hi.

Jeff Bailey wrote:

Oskit doesn't currently claim to have SMP support - You've got a steep
curve ahead of you.


True, but I at least have a working SMP box to test things on.


Would perhaps sponsor me and I will start seriously hacking away at
OSKit-Mach again?


Being an advocate for a Developper is an exercise where I'm stating
that I've done some work with you and beleive that you've generally
got what it takes to help further the project.  I haven't done any
working actively with you, so I don't feel comfortable sponsoring you.


Hey thats cool. This is not a speed event and I'm not in any hurry here
but I have always used Debian and I just think I should get some kind
of official status. I want to be part of the team an in return I will
devote some extra time back to the project. I want you guys to know that
my main interest is in Hurd, not Linux. As an engineer, Hurd has *all
the right stuff* and Linux is just a bit too ephemeral for my likings.

Here is a debugging log I posted a while back to refresh your meory.

Script started on Sat Mar  9 01:37:33 2002
<1>(mirage)[/usr/src/gnu/hurd-20020103/oskit-mach/build]
# i686-linux-gdb GNU gdb 5.0
Copyright 2001 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=hppa1.1-unknown-linux-gnu --target=i686-linux".
(gdb) file kernel-ide Reading symbols from kernel-ide...done.
(gdb) target remote /dev/ttyS0
Remote debugging using /dev/ttyS0
0x0013d570 in main (argc=172448, argv=0x0) at ../oskit/x86/main.c:90
90	}
(gdb) l
85	      machine_slot[mycpu].cpu_type = CPU_TYPE_PENTIUMPRO;
86	      break;
87	    }
88	  machine_slot[mycpu].cpu_subtype = CPU_SUBTYPE_AT386;
89	  machine_slot[mycpu].is_cpu = TRUE;
90	}
91	
92	int
93	main (int argc, char **argv)
94	{
(gdb) s
main (argc=2, argv=0x1000000) at ../oskit/x86/main.c:95
95	  oskit_clientos_init ();
(gdb) n
97	  printf ("Welcome to %s!\r\n", version);
(gdb) Welcome to GNUmach 1.2.91-OSKit!

102	  picinit();
(gdb) 109 linear_base_va = -LINEAR_MIN_KERNEL_ADDRESS; (gdb) 112 pmap_bootstrap(); (gdb) 123 kernel_page_dir[lin2pdenum(0)] = (gdb) 125 paging_enable((oskit_addr_t) kernel_page_dir); (gdb) 126 set_cr0 (get_cr0 () | CR0_WP); (gdb) 128 if (base_cpuid.feature_flags & CPUF_PAGE_GLOBAL_EXT) { (gdb) 136 set_cr4 (get_cr4 () | CR4_PGE); (gdb) 142 base_gdt_init(); /* reinitialize with linear_base_va */ (gdb) 143 gdt_init(); (gdb) 144 idt_init();
(gdb) s
idt_init () at ../i386/i386/idt.c:33
33		gate_init(base_idt, idt_inittab, KERNEL_CS);
(gdb) gate_init (dest=0x1bf820, src=0x1a0350, entry_cs=16) at ../../kern/x86/gate_init.c:23
23	{
(gdb) 25 while (src->entrypoint) (gdb) 27 fill_gate(&dest[src->vector], src->entrypoint, (gdb) 210 { (gdb) 211 gate->offset_low = offset & 0xffff; (gdb) 212 gate->selector = selector; (gdb) 213 gate->word_count = word_count;
(gdb) display  /i $pc
1: x/i $eip  0x157fe7 <gate_init+39>:	movb   $0x0,0x4(%eax)
(gdb) ni  si
214		gate->access = access | ACC_P;
1: x/i $eip  0x157feb <gate_init+43>:	or     $0x80,%cl
(gdb) 0x00157fee 214 gate->access = access | ACC_P;
1: x/i $eip  0x157fee <gate_init+46>:	mov    %cl,0x5(%eax)
(gdb) 215 gate->offset_high = (offset >> 16) & 0xffff;
1: x/i $eip  0x157ff1 <gate_init+49>:	shr    $0x10,%edx
(gdb) 0x00157ff4 215 gate->offset_high = (offset >> 16) & 0xffff;
1: x/i $eip  0x157ff4 <gate_init+52>:	mov    %dx,0x6(%eax)
(gdb) 29 src++;
1: x/i $eip  0x157ff8 <gate_init+56>:	add    $0x8,%ebx
(gdb) 30 }
1: x/i $eip  0x157ffb <gate_init+59>:	cmpl   $0x0,(%ebx)
(gdb) 0x00157ffe 30 }
1: x/i $eip  0x157ffe <gate_init+62>:	jne    0x157fd4 <gate_init+20>
(gdb) 27 fill_gate(&dest[src->vector], src->entrypoint,
1: x/i $eip  0x157fd4 <gate_init+20>:	movzwl 0x4(%ebx),%eax
(gdb) 210 {
1: x/i $eip  0x157fd8 <gate_init+24>:	lea    (%edi,%eax,8),%eax
(gdb) 0x00157fdb 210 {
1: x/i $eip  0x157fdb <gate_init+27>:	mov    (%ebx),%edx
(gdb) 0x00157fdd 210 {
1: x/i $eip  0x157fdd <gate_init+29>:	mov    0x6(%ebx),%cl
(gdb) 211 gate->offset_low = offset & 0xffff;
1: x/i $eip  0x157fe0 <gate_init+32>:	mov    %dx,(%eax)
(gdb) bt full
#0  gate_init (dest=0x1bf820, src=0x1a0350, entry_cs=16) at ../../oskit/x86/seg.h:211
	dest = (struct x86_gate *) 0x1bf820
	src = (struct gate_init_entry *) 0x1a0358
	entry_cs = 16
#1  0x00151dae in idt_init () at ../i386/i386/idt.c:33
No locals.
#2  0x0013d5fe in main (argc=2, argv=0x1000000) at ../oskit/x86/main.c:144
No locals.
#3  0x001577d2 in multiboot_main (boot_info_pa=172448) at ../../kern/x86/pc/base_multiboot_main.c:96
	argc = 2
	argv = (char **) 0x1000000
	i = 1
(gdb) info reg
eax            0x1bf828	1833000
ecx            0xc00f	49167
edx            0x156094	1400980
ebx            0x1a0358	1704792
esp            0x1b5f5c	0x1b5f5c
ebp            0x1b5f68	0x1b5f68
esi            0x10	16
edi            0x1bf820	1832992
eip            0x157fe0	0x157fe0
eflags         0x10102	65794
cs             0x11	17
ss             0x19	25
ds             0x1b0018	1769496
es             0x150018	1376280
fs             0x150000	1376256
gs             0x1b0000	1769472
fctrl          0x0	0
fstat          0x0	0
ftag           0x0	0
fiseg          0x0	0
fioff          0x0	0
foseg          0x0	0
fooff          0x0	0
fop            0x0	0
xmm0           0x00000000000000000000000000000000
xmm1           0x00000000000000000000000000000000
xmm2           0x00000000000000000000000000000000
xmm3           0x00000000000000000000000000000000
xmm4           0x00000000000000000000000000000000
xmm5           0x00000000000000000000000000000000
xmm6           0x00000000000000000000000000000000
xmm7           0x00000000000000000000000000000000
mxcsr          0x0	0
(gdb) / x/40i
0x157fe3 <gate_init+35>:	mov    %si,0x2(%eax)
0x157fe7 <gate_init+39>:	movb   $0x0,0x4(%eax)
0x157feb <gate_init+43>:	or     $0x80,%cl
0x157fee <gate_init+46>:	mov    %cl,0x5(%eax)
0x157ff1 <gate_init+49>:	shr    $0x10,%edx
0x157ff4 <gate_init+52>:	mov    %dx,0x6(%eax)
0x157ff8 <gate_init+56>:	add    $0x8,%ebx
0x157ffb <gate_init+59>:	cmpl   $0x0,(%ebx)
0x157ffe <gate_init+62>:	jne    0x157fd4 <gate_init+20>
0x158000 <gate_init+64>:	pop    %ebx
0x158001 <gate_init+65>:	pop    %esi
0x158002 <gate_init+66>:	pop    %edi
0x158003 <gate_init+67>: leave 0x158004 <gate_init+68>: ret 0x158005 <Letext>: lea 0x0(%esi,1),%esi
0x158009 <Letext+4>:	lea    0x0(%edi,1),%edi
0x158010 <query>:	push   %ebp
0x158011 <query+1>:	mov    %esp,%ebp
0x158013 <query+3>:	push   %edi
0x158014 <query+4>:	push   %esi
0x158015 <query+5>:	push   %ebx
0x158016 <query+6>:	mov    0x8(%ebp),%edx
0x158019 <query+9>:	mov    0xc(%ebp),%eax
0x15801c <query+12>:	mov    0x10(%ebp),%ebx
0x15801f <query+15>:	mov    %eax,%esi
0x158021 <query+17>:	mov    $0x1906a0,%edi
0x158026 <query+22>:	mov    $0x10,%ecx
0x15802b <query+27>: cld 0x15802c <query+28>: test $0x0,%al
0x15802e <query+30>:	repz cmpsb %es:(%edi),%ds:(%esi)
0x158030 <query+32>:	je     0x158045 <query+53>
0x158032 <query+34>:	mov    %eax,%esi
0x158034 <query+36>:	mov    $0x190720,%edi
0x158039 <query+41>:	mov    $0x10,%ecx
0x15803e <query+46>: cld 0x15803f <query+47>: test $0x0,%al
0x158041 <query+49>:	repz cmpsb %es:(%edi),%ds:(%esi)
0x158043 <query+51>:	jne    0x158050 <query+64>
0x158045 <query+53>:	incl   0x4(%edx)
0x158048 <query+56>:	mov    %edx,(%ebx)
(gdb) l
206	/* Fill a gate with particular values.  */
207	OSKIT_INLINE void
208	fill_gate(struct x86_gate *gate, unsigned offset, unsigned short selector,
209		  unsigned char access, unsigned char word_count)
210	{
211		gate->offset_low = offset & 0xffff;
212		gate->selector = selector;
213		gate->word_count = word_count;
214		gate->access = access | ACC_P;
215		gate->offset_high = (offset >> 16) & 0xffff;
(gdb) si
Interrupted while waiting for the program.
Give up (and stop debugging it)? (y or n) y
(gdb) quit
<2>(mirage)[/usr/src/gnu/hurd-20020103/oskit-mach/build]
# 
Script done on Sat Mar  9 01:41:14 2002

... end of attachment.



Jeff Bailey wrote:
Further, being a developper is orthoganol to software development.  If
you have the skills to hack SMP support into OSKit-Mach, I would
rather see you focus your time on system stability.  Even having
someone provide quite detailed bug reports to Roland, Marcus et al.,
would probably go a long way to getting Gnumach 2 released.


Do I have the skills to hack SMP support? Probably not. I'm a degree'd
Mechanical Engineer, not a computer scientist. Sure I can solve differential
equations in my head, and I probably know enough high end calculus that
I'm not very human anymore, but I am not (yet) a complete CPU expert.
I have written assembly programs, am plenty comfortable with C/C++ and
I can slowly glean info from debugging logs and such, but I'm no Linus.

But I'm also a self proclaimed Debian wizard. I just hit this point a
few months back where it all clicked into place. Debian holds no mysteries
for me anymore. ...And I'm not likely to abandon it anytime soon.


I have already built an Arm -> X86 GDB serial cross debugger so I
can use my Netwinder to debug a running OSKit-Mach kernel and it
works nice.


Very cool.


I'd be happy to help out but I really think you should
upgrade me to a real developer.


Do you mean like Debian developer, or Hurd developer?  If you mean
Debian developper, your talent is wasted if you have the skills to fix
core Hurd problems.  If you mean Hurd developer, I suspect as soon as
you have a clever hack or two in the Hurd, you'll find that the title
has crept up on you unannounced. ;)

Tks,
Jeff Bailey



I already am a Hurd developer. I hacked GNU Pth to compile under Hurd
last spring providing the first ever pthread compatibility for Hurd.

- Doug



Reply to: