I use the athlon-xp switch on 3 boxes with no problems all of them running 5.3
On Wed, 05 Jan 2005 22:00:04 +0100, Bartosz Fabianowski
<freebsd@chillt.de> wrote:> 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[] = "root@takahe.local";
> 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[] = "root@takahe.local";
> 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
"freebsd-stable-unsubscribe@freebsd.org"
>
>
>