Hi list,

I am still having the problems with instant reboots that I reported [1] a couple of weeks ago. I have a bit more info now and hope that someone can lead me in the right direction.

The problem is that setting CPUTYPE=pentium-m in make.conf leads to a corrupt boot loader and a corrupt kernel being generated. This setting for the CPUTYPE has been available on -STABLE since 16th December, when revision 1.40.2.1 of bsd.cpu.mk was committed. I have traced the start of my problems to that exact commit (the commiter is CC'd).

On -current, the setting has been available for a longer time and has led to the same problems for some people. Also, it seems that not only pentium-m is broken, but athlon-xp as well. The end of a thread on the -current mailing list discussing this issue is in [2]. Unfortunately, it provides no insight as to where the problem lies.

It seems to me that every other part of the world, including GCC itself, is built correctly when CPUTYPE is set to pentium-m. The issue only affects the boot loader and the kernel for some reason.

When I changed the CPUTYPE from pentium-m down to pentium3 (essentially just disabling SSE2) and recompiled the boot loader, I instantly got a working loader again. I have attached a diff of the .s files generated for the loader with CPUTYPE=pentium3 and CPUTYPE=pentium-m. I do not see any real changes except for the use of xmm registers when CPUTYPE=pentium-m is set.

Does anybody have an idea how to debug this further? I am totally out of ideas and really do not know where to continue looking. I have some time on my hands to go searching for the bug - all I need is some direction.

- Bartosz

[1] http://lists.freebsd.org/pipermail/freebsd-stable/2004-December/010594.html
[2] http://lists.freebsd.org/pipermail/freebsd-current/2004-November/042127.html
diff -u loader_dir_p3/bcache.s loader_dir_pm/bcache.s
--- loader_dir_p3/bcache.s      Wed Jan  5 21:56:29 2005
+++ loader_dir_pm/bcache.s      Wed Jan  5 21:56:29 2005
@@ -684,7 +684,7 @@
        pushl   %edi
        pushl   %esi
        pushl   %ebx
-       subl    $36, %esp
+       subl    $28, %esp
        movl    12(%ebp), %ebx
        movl    16(%ebp), %esi
        leal    -16(%ebp), %eax
@@ -692,21 +692,19 @@
        call    time
        movl    $0, -20(%ebp)
        movl    bcache_ctl, %eax
-       movl    12(%eax), %eax
-       movl    %eax, -24(%ebp)
+       movd    12(%eax), %xmm0
        movl    $1, %ecx
        cmpl    bcache_nblks, %ecx
        jae     .L99
-       movl    bcache_ctl, %eax
-       movl    %eax, -36(%ebp)
-       movl    %eax, -28(%ebp)
-       movl    bcache_nblks, %eax
-       movl    %eax, -32(%ebp)
+       movd    %eax, %xmm1
+       movl    %eax, -24(%ebp)
+       movl    bcache_nblks, %edi
+       movl    %edi, -28(%ebp)
        .p2align 4,,15
 .L103:
        movl    %ecx, %eax
        sall    $4, %eax
-       movl    -36(%ebp), %edi
+       movd    %xmm1, %edi
        movl    4(%eax,%edi), %edx
        xorl    %esi, %edx
        movl    (%eax,%edi), %eax
@@ -717,18 +715,17 @@
        jmp     .L99
        .p2align 4,,7
 .L101:
-       movl    -28(%ebp), %edx
+       movl    -24(%ebp), %edx
        movl    %ecx, %eax
        sall    $4, %eax
-       movl    -24(%ebp), %edi
+       movd    %xmm0, %edi
        cmpl    %edi, 12(%eax,%edx)
        jge     .L100
-       movl    12(%eax,%edx), %eax
-       movl    %eax, -24(%ebp)
+       movd    12(%eax,%edx), %xmm0
        movl    %ecx, -20(%ebp)
 .L100:
        incl    %ecx
-       cmpl    -32(%ebp), %ecx
+       cmpl    -28(%ebp), %ecx
        jb      .L103
 .L99:
        movl    bcache_blksize, %eax
@@ -753,7 +750,7 @@
        movl    %eax, bcache_bcount
        movl    bcache_ctl, %eax
        movl    %edx, 12(%ecx,%eax)
-       addl    $36, %esp
+       addl    $28, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
diff -u loader_dir_p3/interp_backslash.s loader_dir_pm/interp_backslash.s
--- loader_dir_p3/interp_backslash.s    Wed Jan  5 21:56:29 2005
+++ loader_dir_pm/interp_backslash.s    Wed Jan  5 21:56:29 2005
@@ -12,7 +12,7 @@
        pushl   %edi
        pushl   %esi
        pushl   %ebx
-       subl    $32, %esp
+       subl    $28, %esp
        movl    8(%ebp), %ebx
        movl    $0, %edi
        movl    $0, %esi
@@ -211,39 +211,39 @@
        subl    $55, %eax
        sall    $6, %eax
 .L31:
-       movl    %eax, -24(%ebp)
+       movd    %eax, %xmm0
        movsbl  1(%ebx),%eax
        leal    -48(%eax), %edx
-       movl    %edx, -40(%ebp)
-       movl    -24(%ebp), %edx
+       movl    %edx, -36(%ebp)
+       movd    %xmm0, %edx
        leal    -384(%edx,%eax,8), %eax
-       cmpl    $9, -40(%ebp)
+       cmpl    $9, -36(%ebp)
        jbe     .L37
        movsbl  1(%ebx),%eax
        leal    -97(%eax), %edx
-       movl    %edx, -40(%ebp)
-       movl    -24(%ebp), %edx
+       movl    %edx, -36(%ebp)
+       movd    %xmm0, %edx
        leal    -696(%edx,%eax,8), %eax
-       cmpl    $25, -40(%ebp)
+       cmpl    $25, -36(%ebp)
        jbe     .L37
        movsbl  1(%ebx),%eax
-       movl    -24(%ebp), %edx
+       movd    %xmm0, %edx
        leal    -440(%edx,%eax,8), %eax
 .L37:
        movl    %eax, -20(%ebp)
        movsbl  2(%ebx),%eax
        leal    -48(%eax), %edx
-       movl    %edx, -40(%ebp)
+       movl    %edx, -36(%ebp)
        movl    -20(%ebp), %edx
        leal    -48(%edx,%eax), %eax
-       cmpl    $9, -40(%ebp)
+       cmpl    $9, -36(%ebp)
        jbe     .L43
        movsbl  2(%ebx),%eax
        leal    -97(%eax), %edx
-       movl    %edx, -40(%ebp)
+       movl    %edx, -36(%ebp)
        movl    -20(%ebp), %edx
        leal    -87(%edx,%eax), %eax
-       cmpl    $25, -40(%ebp)
+       cmpl    $25, -36(%ebp)
        jbe     .L43
        movsbl  2(%ebx),%eax
        movl    -20(%ebp), %edx
@@ -266,7 +266,7 @@
        testb   $1, %al
        je      .L3
        movsbl  2(%ebx),%edx
-       movl    $0, -28(%ebp)
+       movl    $0, -24(%ebp)
        leal    -48(%edx), %eax
        cmpl    $9, %eax
        jbe     .L50
@@ -277,9 +277,9 @@
        cmpl    $5, %eax
        ja      .L49
 .L50:
-       movl    $1, -28(%ebp)
+       movl    $1, -24(%ebp)
 .L49:
-       cmpl    $0, -28(%ebp)
+       cmpl    $0, -24(%ebp)
        je      .L3
        movsbl  2(%ebx),%eax
        subl    $48, %eax
@@ -302,7 +302,7 @@
 .L54:
        movb    %al, -13(%ebp)
        movsbl  3(%ebx),%edx
-       movl    $0, -32(%ebp)
+       movl    $0, -28(%ebp)
        leal    -48(%edx), %eax
        cmpl    $9, %eax
        jbe     .L61
@@ -313,29 +313,29 @@
        cmpl    $5, %eax
        ja      .L60
 .L61:
-       movl    $1, -32(%ebp)
+       movl    $1, -28(%ebp)
 .L60:
-       cmpl    $0, -32(%ebp)
+       cmpl    $0, -28(%ebp)
        je      .L59
        movsbl  -13(%ebp),%eax
        sall    $4, %eax
-       movl    %eax, -36(%ebp)
+       movl    %eax, -32(%ebp)
        movsbl  3(%ebx),%eax
        leal    -48(%eax), %edx
-       movl    %edx, -40(%ebp)
-       movl    -36(%ebp), %edx
+       movl    %edx, -36(%ebp)
+       movl    -32(%ebp), %edx
        leal    -48(%edx,%eax), %eax
-       cmpl    $9, -40(%ebp)
+       cmpl    $9, -36(%ebp)
        jbe     .L65
        movsbl  3(%ebx),%eax
        leal    -97(%eax), %edx
-       movl    %edx, -40(%ebp)
-       movl    -36(%ebp), %edx
+       movl    %edx, -36(%ebp)
+       movl    -32(%ebp), %edx
        leal    -87(%edx,%eax), %eax
-       cmpl    $25, -40(%ebp)
+       cmpl    $25, -36(%ebp)
        jbe     .L65
        movsbl  3(%ebx),%eax
-       movl    -36(%ebp), %edx
+       movl    -32(%ebp), %edx
        leal    -55(%edx,%eax), %eax
 .L65:
        movb    %al, -13(%ebp)
@@ -380,7 +380,7 @@
        movb    $0, (%ecx,%esi)
        movl    %ecx, %eax
 .L1:
-       addl    $32, %esp
+       addl    $28, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
diff -u loader_dir_p3/load_elf32_obj.s loader_dir_pm/load_elf32_obj.s
--- loader_dir_p3/load_elf32_obj.s      Wed Jan  5 21:56:29 2005
+++ loader_dir_pm/load_elf32_obj.s      Wed Jan  5 21:56:29 2005
@@ -252,7 +252,7 @@
        pushl   %edi
        pushl   %esi
        pushl   %ebx
-       subl    $52, %esp
+       subl    $48, %esp
        movl    16(%ebp), %eax
        movl    $0, -24(%ebp)
        movl    %eax, %edi
@@ -311,16 +311,16 @@
 .L31:
        leal    (%ebx,%ebx,4), %eax
        sall    $3, %eax
-       movl    %eax, -44(%ebp)
+       movd    %eax, %xmm0
        movl    %edi, %edx
        addl    32(%eax,%esi), %edx
        decl    %edx
        movl    %edx, %eax
-       movl    -44(%ebp), %edi
+       movd    %xmm0, %edi
        movl    $0, %edx
        divl    32(%edi,%esi)
        movl    %eax, %edi
-       movl    -44(%ebp), %eax
+       movd    %xmm0, %eax
        imull   32(%eax,%esi), %edi
        movl    %edi, 12(%eax,%esi)
        addl    20(%eax,%esi), %edi
@@ -456,16 +456,16 @@
 .L49:
        leal    (%ebx,%ebx,4), %eax
        sall    $3, %eax
-       movl    %eax, -44(%ebp)
+       movd    %eax, %xmm0
        movl    %edi, %edx
        addl    32(%eax,%esi), %edx
        decl    %edx
        movl    %edx, %eax
-       movl    -44(%ebp), %edi
+       movd    %xmm0, %edi
        movl    $0, %edx
        divl    32(%edi,%esi)
        movl    %eax, %edi
-       movl    -44(%ebp), %eax
+       movd    %xmm0, %eax
        imull   32(%eax,%esi), %edi
        movl    %edi, 12(%eax,%esi)
        addl    20(%eax,%esi), %edi
@@ -541,7 +541,7 @@
        movl    $.LC13, (%esp)
        call    printf
        movl    -24(%ebp), %eax
-       addl    $52, %esp
+       addl    $48, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
diff -u loader_dir_p3/load_elf64.s loader_dir_pm/load_elf64.s
--- loader_dir_p3/load_elf64.s  Wed Jan  5 21:56:29 2005
+++ loader_dir_pm/load_elf64.s  Wed Jan  5 21:56:29 2005
@@ -325,7 +325,7 @@
        pushl   %edi
        pushl   %esi
        pushl   %ebx
-       subl    $140, %esp
+       subl    $136, %esp
        movl    $0, -68(%ebp)
        movl    $0, -52(%ebp)
        movl    $0, -56(%ebp)
@@ -519,18 +519,18 @@
        cmpl    $0, -60(%ebp)
        je      .L50
        movl    -60(%ebp), %eax
-       movl    %eax, -108(%ebp)
-       movl    $0, -104(%ebp)
+       movl    %eax, -104(%ebp)
+       movl    $0, -100(%ebp)
        leal    0(,%esi,8), %eax
        subl    %esi, %eax
        movl    16(%ebp), %ecx
        movl    20(%ebp), %ebx
        addl    16(%edi,%eax,8), %ecx
        adcl    20(%edi,%eax,8), %ebx
-       cmpl    %ebx, -104(%ebp)
+       cmpl    %ebx, -100(%ebp)
        ja      .L50
        jb      .L49
-       cmpl    %ecx, -108(%ebp)
+       cmpl    %ecx, -104(%ebp)
        jbe     .L49
        .p2align 4,,15
 .L50:
@@ -642,73 +642,81 @@
        movl    -52(%ebp), %ecx
        cmpl    $2, 4(%eax,%ecx)
        jne     .L62
-       movl    $0, -100(%ebp)
+       movl    $0, -96(%ebp)
        movl    -48(%ebp), %ebx
        cmpw    $0, 56(%ebx)
        je      .L65
        movl    %esi, %eax
        sall    $6, %eax
-       movl    %eax, -88(%ebp)
+       movd    %eax, %xmm0
        .p2align 4,,15
 .L71:
-       movl    -100(%ebp), %eax
+       movl    -96(%ebp), %eax
        sall    $3, %eax
-       subl    -100(%ebp), %eax
+       subl    -96(%ebp), %eax
        sall    $3, %eax
        cmpl    $1, (%eax,%edi)
        jne     .L66
-       movl    -88(%ebp), %ecx
+       movd    %xmm0, %ecx
        movl    -52(%ebp), %edx
        leal    24(%ecx,%edx), %ecx
        movl    (%ecx), %edx
        movl    4(%ecx), %ecx
-       movl    %edx, -116(%ebp)
-       movl    %ecx, -112(%ebp)
+       movl    %edx, -112(%ebp)
+       movl    %ecx, -108(%ebp)
        cmpl    12(%eax,%edi), %ecx
        jb      .L66
-       movl    -112(%ebp), %ecx
+       movl    -108(%ebp), %ecx
        cmpl    12(%eax,%edi), %ecx
        ja      .L69
        cmpl    8(%eax,%edi), %edx
        jb      .L66
 .L69:
-       movl    -88(%ebp), %edx
+       movd    %xmm0, %edx
        movl    -52(%ebp), %eax
        leal    24(%edx,%eax), %edx
        movl    (%edx), %eax
        movl    4(%edx), %edx
-       movl    -88(%ebp), %ecx
-       movl    -52(%ebp), %ebx
-       addl    32(%ecx,%ebx), %eax
-       adcl    36(%ecx,%ebx), %edx
-       movl    %eax, -96(%ebp)
-       movl    %edx, -92(%ebp)
-       movl    -100(%ebp), %ecx
+       movl    %eax, -120(%ebp)
+       movl    %edx, -116(%ebp)
+       movd    %xmm0, %eax
+       movl    -52(%ebp), %edx
+       movl    32(%eax,%edx), %ecx
+       movl    36(%eax,%edx), %ebx
+       addl    -120(%ebp), %ecx
+       adcl    -116(%ebp), %ebx
+       movl    %ecx, -92(%ebp)
+       movl    %ebx, -88(%ebp)
+       movl    -96(%ebp), %ecx
        sall    $3, %ecx
-       subl    -100(%ebp), %ecx
+       subl    -96(%ebp), %ecx
        movl    8(%edi,%ecx,8), %eax
        movl    12(%edi,%ecx,8), %edx
        addl    32(%edi,%ecx,8), %eax
        adcl    36(%edi,%ecx,8), %edx
-       cmpl    %edx, -92(%ebp)
+       cmpl    %edx, %ebx
        ja      .L66
+       cmpl    %edx, -88(%ebp)
        jb      .L70
-       cmpl    %eax, -96(%ebp)
+       cmpl    %eax, -92(%ebp)
        ja      .L66
 .L70:
-       movl    -88(%ebp), %eax
+       movl    $0, %ecx
+       movl    $0, %ebx
+       movd    %xmm0, %eax
        movl    -52(%ebp), %edx
-       movl    $0, 24(%eax,%edx)
-       movl    $0, 28(%eax,%edx)
-       movl    $0, 32(%eax,%edx)
-       movl    $0, 36(%eax,%edx)
+       movl    %ecx, 24(%eax,%edx)
+       movl    %ebx, 28(%eax,%edx)
+       movl    -52(%ebp), %edx
+       movl    %ecx, 32(%eax,%edx)
+       movl    %ebx, 36(%eax,%edx)
        jmp     .L65
        .p2align 4,,7
 .L66:
-       incl    -100(%ebp)
+       incl    -96(%ebp)
        movl    -48(%ebp), %ecx
        movzwl  56(%ecx), %eax
-       cmpl    -100(%ebp), %eax
+       cmpl    -96(%ebp), %eax
        ja      .L71
 .L65:
        movl    %esi, %edx
@@ -796,15 +804,15 @@
        call    *archsw+16
        testl   %eax, %eax
        js      .L82
-       movl    %eax, -132(%ebp)
-       movl    $0, -128(%ebp)
-       movl    -128(%ebp), %eax
+       movl    %eax, -128(%ebp)
+       movl    $0, -124(%ebp)
+       movl    -124(%ebp), %eax
        movl    -52(%ebp), %ecx
        xorl    36(%ebx,%ecx), %eax
-       movl    %eax, -108(%ebp)
-       movl    -132(%ebp), %eax
+       movl    %eax, -104(%ebp)
+       movl    -128(%ebp), %eax
        xorl    32(%ebx,%ecx), %eax
-       orl     -108(%ebp), %eax
+       orl     -104(%ebp), %eax
        je      .L81
 .L82:
        movl    $.LC21, (%esp)
@@ -1075,7 +1083,7 @@
        call    Free
 .L117:
        movl    -56(%ebp), %eax
-       addl    $140, %esp
+       addl    $136, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
diff -u loader_dir_p3/reloc_elf64.s loader_dir_pm/reloc_elf64.s
--- loader_dir_p3/reloc_elf64.s Wed Jan  5 21:56:29 2005
+++ loader_dir_pm/reloc_elf64.s Wed Jan  5 21:56:29 2005
@@ -14,7 +14,7 @@
 elf64_reloc:
        pushl   %ebp
        movl    %esp, %ebp
-       subl    $40, %esp
+       subl    $32, %esp
        movl    %ebx, -12(%ebp)
        movl    %esi, -8(%ebp)
        movl    %edi, -4(%ebp)
@@ -35,10 +35,7 @@
        movl    $0, -16(%ebp)
        movzbl  8(%eax), %edx
        movl    $0, %ecx
-       movl    12(%eax), %esi
-       movl    $0, %edi
-       movl    %esi, -28(%ebp)
-       movl    %edi, -24(%ebp)
+       movd    12(%eax), %xmm0
        jmp     .L2
        .p2align 4,,7
 .L4:
@@ -52,10 +49,7 @@
        movl    %ecx, -16(%ebp)
        movzbl  8(%eax), %edx
        movl    $0, %ecx
-       movl    12(%eax), %esi
-       movl    $0, %edi
-       movl    %esi, -28(%ebp)
-       movl    %edi, -24(%ebp)
+       movd    12(%eax), %xmm0
        jmp     .L2
 .L5:
        movl    $22, %eax
@@ -91,18 +85,15 @@
        je      .L12
        jmp     .L13
 .L10:
-       movl    -28(%ebp), %eax
-       movl    -24(%ebp), %edx
-       movl    %eax, 4(%esp)
-       movl    %edx, 8(%esp)
+       movq    %xmm0, 4(%esp)
        movl    8(%ebp), %eax
        movl    %eax, (%esp)
        call    *12(%ebp)
        movl    %edx, %ecx
        movl    %eax, %edx
        movl    $3, %eax
-       movl    %ecx, %esi
-       orl     %edx, %esi
+       movl    %ecx, %edi
+       orl     %edx, %edi
        je      .L1
        movl    -20(%ebp), %esi
        movl    -16(%ebp), %edi
diff -u loader_dir_p3/vers.c loader_dir_pm/vers.c
--- loader_dir_p3/vers.c        Wed Jan  5 21:56:29 2005
+++ loader_dir_pm/vers.c        Wed Jan  5 21:56:29 2005
@@ -1,4 +1,4 @@
 char bootprog_name[] = "FreeBSD/i386 bootstrap loader";
 char bootprog_rev[] = "1.1";
-char bootprog_date[] = "Wed Jan  5 21:27:50 CET 2005";
+char bootprog_date[] = "Wed Jan  5 21:28:41 CET 2005";
 char bootprog_maker[] = "[EMAIL PROTECTED]";
diff -u loader_dir_p3/vers.i loader_dir_pm/vers.i
--- loader_dir_p3/vers.i        Wed Jan  5 21:56:29 2005
+++ loader_dir_pm/vers.i        Wed Jan  5 21:56:29 2005
@@ -4,5 +4,5 @@
 # 1 "vers.c"
 char bootprog_name[] = "FreeBSD/i386 bootstrap loader";
 char bootprog_rev[] = "1.1";
-char bootprog_date[] = "Wed Jan  5 21:27:50 CET 2005";
+char bootprog_date[] = "Wed Jan  5 21:28:41 CET 2005";
 char bootprog_maker[] = "[EMAIL PROTECTED]";
diff -u loader_dir_p3/vers.s loader_dir_pm/vers.s
--- loader_dir_p3/vers.s        Wed Jan  5 21:56:29 2005
+++ loader_dir_pm/vers.s        Wed Jan  5 21:56:29 2005
@@ -14,7 +14,7 @@
        .type   bootprog_date, @object
        .size   bootprog_date, 29
 bootprog_date:
-       .string "Wed Jan  5 21:27:50 CET 2005"
+       .string "Wed Jan  5 21:28:41 CET 2005"
 .globl bootprog_maker
        .type   bootprog_maker, @object
        .size   bootprog_maker, 18
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to