From: Nikodemus S. <nik...@ra...> - 2007-09-07 09:42:10
|
On 9/6/07, Andreas Fuchs <as...@bo...> wrote: > I'm still getting the very same problem building 1.0.9.39 (the revision > with Nikodemus' fix) unithread on x86-64/linux. > > Have a gdb attached to an instance trying to load the cold core, can > assist debugging efforts tomorrow: *sigh* I cannot reproduce this on my boxes -- probably because I don't have a real 64bit setup: the best I can do is building a x86-64 SBCL in a 32bit environment,,, > Program received signal SIGSEGV, Segmentation fault. > create_initial_thread (initial_function=68759912201) at thread.c:423 > 423 th->os_address = spaces; > (gdb) bac > #0 create_initial_thread (initial_function=68759912201) at thread.c:423 > #1 0x0000000000412573 in main (argc=-187064080, argv=0x7ffff4d9a0c8, > envp=0x7ffff4d9a0f8) at runtime.c:425 > (gdb) print spaces > No symbol "spaces" in current context. > (gdb) print th > $1 = (struct thread *) 0xb88f9000 > (gdb) print th->os_address > Cannot access memory at address 0xb88f9010 Adding good old fashioned printf debugging for "spaces" and "aligned_spaces" might yield enlightenment. spaces=os_validate(0, THREAD_STRUCT_SIZE); if(!spaces) return NULL; /* Aligning up is safe as THREAD_STRUCT_SIZE has BACKEND_PAGE_SIZE * padding. */ aligned_spaces = (void *)((((unsigned long)(char *)spaces) + BACKEND_PAGE_SIZE - 1) & ~(BACKEND_PAGE_SIZE - 1)); I'm still working through my first cup of coffee for the day, but I suspect the casts here aren't 64-bit proof, causing us to lose the high bits from spaces. should probably be & ~(unsigned long)(BACKEND_PAGE_SIZE -1) there. Cheers, -- Nikodemus |