Messages in this thread | | | Date | Sat, 03 May 2008 11:48:36 -0700 | From | "H. Peter Anvin" <> | Subject | Re: 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] | |