lkml.org 
[lkml]   [2008]   [May]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: i387/FPU init issues...
jamal wrote:
>
> Indeed it does - thanks.
>
>> Please provide
>> also output of /proc/cpuinfo.
>
> mambo:~# cat /proc/cpuinfo
> processor : 0
> vendor_id : GenuineIntel
> cpu family : 6
> model : 3
> model name : Pentium II (Klamath)
> stepping : 3
> cpu MHz : 1063.771
> cache size : 128 KB
> fdiv_bug : no
> hlt_bug : no
> f00f_bug : no
> coma_bug : no
> fpu : yes
> fpu_exception : yes
> cpuid level : 2
> wp : yes
> flags : fpu de pse tsc msr pae mce cx8 sep pge cmov mmx fxsr
> sse sse2
> bogomips : 2160.92
> clflush size : 32
> power management:
>

This is very odd.

Could you try running the attached C program on this processor and
report the result? (Binary included for convenience.)

Arjan: this seems to directly contradict the Intel documentation. Do
you have any way to find out what the deal is with this?

-hpa
#include <setjmp.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define P6_NOP1 ".byte 0x90\n"
#define P6_NOP2 ".byte 0x66,0x90\n"
#define P6_NOP3 ".byte 0x0f,0x1f,0x00\n"
#define P6_NOP4 ".byte 0x0f,0x1f,0x40,0\n"
#define P6_NOP5 ".byte 0x0f,0x1f,0x44,0x00,0\n"
#define P6_NOP6 ".byte 0x66,0x0f,0x1f,0x44,0x00,0\n"
#define P6_NOP7 ".byte 0x0f,0x1f,0x80,0,0,0,0\n"
#define P6_NOP8 ".byte 0x0f,0x1f,0x84,0x00,0,0,0,0\n"

static sigjmp_buf bail_buf;

static void sigill(int sig)
{
(void)sig;
siglongjmp(bail_buf, 1);
}

static int do_test(int n)
{
struct sigaction old_sa, sa;
int err;

memset(&sa, 0, sizeof sa);
sa.sa_handler = sigill;
sigaction(SIGILL, &sa, &old_sa);

err = sigsetjmp(bail_buf, 1);
if (!err) {
switch (n) {
case -1:
asm volatile("ud2a"); /* Test the mechanism */
break;
case 0:
asm volatile("");
break;
case 1:
asm volatile(P6_NOP1);
break;
case 2:
asm volatile(P6_NOP2);
break;
case 3:
asm volatile(P6_NOP3);
break;
case 4:
asm volatile(P6_NOP4);
break;
case 5:
asm volatile(P6_NOP5);
break;
case 6:
asm volatile(P6_NOP6);
break;
case 7:
asm volatile(P6_NOP7);
break;
case 8:
asm volatile(P6_NOP8);
break;
default:
abort();
}
}

sigaction(SIGILL, &old_sa, NULL);
return err;
}

int main(void)
{
int i;
int test, err = 0;

if (!do_test(-1)) {
printf("Trap mechanism broken!\n");
return 2;
}

for (i = 0; i <= 8; i++) {
test = do_test(i);
err |= test;
printf("Test %d: %s\n", i, test ? "err" : "ok");
}

return err;
}
[unhandled content-type:application/octet-stream]
\
 
 \ /
  Last update: 2008-05-03 20:51    [W:0.609 / U:0.160 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site