cvs commit: src/sys/i386/isa apic_vector.s clock.c src/sys/kern kern_intr.c kern_sig.c kern_slaballoc.c kern_switch.c kern_systimer.c kern_upcall.c lwkt_msgport.c lwkt_thread.c lwkt_token.c src/sys/sys slaballoc.h
YONETANI Tomokazu
qhwt+dragonfly-bugs at les.ath.cx
Fri Feb 20 06:30:24 PST 2004
On Thu, Feb 19, 2004 at 04:14:13PM -0800, Matthew Dillon wrote:
>
> :
> :On Thu, Feb 19, 2004 at 11:44:05AM -0800, Matthew Dillon wrote:
> :> :> Interestingly enough, on my dfly test box, recent kernels built with gcc2
> :> :> along with CPUTYPE=i686 set in make.conf yield broken kernels almost
> :> :> identical to what you are describing. Removing CPUTYPE from make.conf yields
> :> :> working kernel with gcc2. Is this reproducible on your end ?
> :> :
> :> :Yes, that did it.
> :>
> :> Umm.. you guys realize that setting CPUTYPE will generate specific
> :> instructions for that particular processor? If you do not actually
> :> have a pentium-pro cpu in your box, using CPUTYPE=i686 is likely to
> :> produce instructions that your cpu does not support.
> :>
> :> In particular, ppro optimizations will use the CMOV instruction.
> :> Is 'CMOV' in the Features line near the top of your dmesg?
> :>
> :> Post the first 25 lines of your dmesg output.
> :
> :Sure.
> :
> :As already mentioned in another message, if I compile kern_slaballoc.c
> :without -march=pentiumpro(by specifying NO_CPU_COPT_FLAGS=yes) and the
> :kernel boots OK. I've put the assembly outputs at for those who are
> :interested:
> : http://les.ath.cx/DragonFly/kern_slaballoc.c
> : http://les.ath.cx/DragonFly/kern_slaballoc.c.ppro
> :
> :Regards.
>
> I think you meant '.s' there. I'm looking at them...
Oops, I'm sorry. I was boiling water for a cup of coffee when I
typed that.
> .stabn 68,0,226,.LM33-malloc_init
> .LM33:
> movl %ebx,kmemstatistics
> .stabn 68,0,227,.LM34-malloc_init
> .LM34:
> .LBE3:
> .L291:
> movl -4(%ebp),%ebx
> movl %ebp,%esp
> popl %ebp
> <<<<<<<<<<<<<<<<<<<< RET instruction missing
> .Lfe2:
> .size malloc_init,.Lfe2-malloc_init
> .stabs "type:r(27,2)",64,0,208,3
> .stabs "limsize:r(11,12)",64,0,209,0
> .stabn 192,0,0,.LBB3-malloc_init
> .stabn 224,0,0,.LBE3-malloc_init
> .Lscope1:
>
> See the problem? I do... the 'RET' instruction is missing from the
> end of the malloc_init() procedure.
Duh! You're right. I did read the diff myself, but I didn't notice that.
> Your GCC2 is generating broken code. Very broken code.
>
> So, how did you compile your last buildworld? Did you compile it with
> GCC2 or GCC3? Did you use any special options when compiling it?
> Because whatever you did is causing your gcc2 to produce bad code.
CCVER=gcc3 with CPUTYPE=p3. No other 'fancy' flags except for -finline-limit
only when I build the kernel with gcc3. I've done installworld several times
this month, and sets of kernel and modules compiled with gcc2 and gcc3.
I can't remember the exact date on which the source tree was checked out,
but the build logs are dated 20040125, 20040207, 20040211, and 20040214.
> My GCC2 generates the 'RET' instruction. Yours doesn't. You need to
> rebuild your world without any fancy GCC options and pray that the GCC
> you currently have installed doesn't break itself again when it
> recompiles itself.
Actually I had another machine running DragonFly, did a buildworld and
installworld from it via NFS. After that, I could build a working kernel
with gcc2 and -march=pentiumpro.
Thanks.
More information about the Bugs
mailing list