Bug 6559 - Kernel oops with trigonometric functions on a 386 w/o fpu
Summary: Kernel oops with trigonometric functions on a 386 w/o fpu
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: kernel
Version: 6.0
Hardware: i386
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Michael K. Johnson
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 1999-10-31 04:12 UTC by donald
Modified: 2008-05-01 15:37 UTC (History)
0 users

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2000-01-04 22:27:49 UTC
Embargoed:


Attachments (Terms of Use)

Description donald 1999-10-31 04:12:58 UTC
I'm running RedHat 6.0 on a 386 without a math
co-processor.  The following code (compiled with 'gcc
tst.c -lm' always produces a kernel oops and generates a
segmentation fault.  (According to 'objdump --disassemble',
there are no 486 BSWAP instructions in the executable)

#include <stdio.h>
#include <math.h>

int
main()
{
        printf ("%f\n", sin(1.0));
        exit (0);
}

Similar behaviour results with the following perl script...

$ perl -e '{ print sin(1.0), "\n" }'
Segmentation fault

Curiously, though...

$ perl -e '{ print sin(3.0), "\n" }'
0.141120008059867

works fine.  For what it's worth, here's the oops
(sorry about the wrapping).

>Unable to handle kernel paging request at virtual address
8214aabf
>current->tss.cr3 = 00646000, %cr3 = 00646000
>*pde = 00000000
>Oops: 0000
>CPU:    0
>EIP:    0010:[poly_sine+945/1140]
>EFLAGS: 00010296
>eax: 8214aabb   ebx: 00000000   ecx: 07781a5c   edx:
1de06972
>esi: 8214aabb   edi: c03cff00   ebp: c03cff00   esp:
c03cfeac
>ds: 0018   es: 0018   ss: 0018
>Process perl (pid: 7036, process nr: 30,
stackpage=c03cf000)
>Stack: 00000000 c03cffb4 c03cfefc c03cfeec c03cfee8
00000000 c03cfed4 c03cfef4
>       8214aabb 2cd09e2b 42d18469 921fb544 c03cffb4
00000000 00000000 0013d0fa
>       9c6c0650 1b2cb8ab ab698587 4318c275 53682eaf
12ffb1d5 48677021 d76aa478
>Call Trace: [fsin+71/292] [FPU_trigb+62/76]
[math_emulate+2255/2388]
>       [do_no_page+179/192] [handle_mm_fault+198/352]
>       [device_not_available+55/60]
[ret_from_exception+0/16]
>       [startup_32+43/286]
>Code: f7 60 04 89 54 24 28 8b 54 24 5c 89 54 24 10 89 54 24
2c 89

Some futher notes:

Manually upgrading the kernel to 2.2.12 (w/
CONFIG_MATH_EMULATION=y and CONFIG_M386=y) didn't help.
However, I tried recompiling the kernel (v2.2.12) using
an older compiler (gcc version 2.7.2.3) and that seemed
to fix the problem.  It looks as though there may be some
issues with the C compiler that comes with RedHat 6.0
(egcs-2.91.66 / egcs-1.1.2) and Linux's math emulation.

Comment 1 Jim Kingdon 1999-11-01 00:08:59 UTC
The fact that changing the compiler helped _might_ mean it is a
compiler problem, but it might not be.

Comment 2 Cristian Gafton 2000-01-04 22:25:59 UTC
Assigned to dledford

Comment 3 Cristian Gafton 2000-01-04 22:27:59 UTC
Assigned to dledford

Comment 4 Alan Cox 2000-08-08 14:20:52 UTC
This should be fixed in 2.2.14 and higher


Note You need to log in before you can comment on or make changes to this bug.