mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [2.6.8] OOPS and SIGSEGV on altivec instruction on PowerPC 7540.
@ 2005-05-13 15:49 Pawel Sikora
  2005-05-13 16:03 ` Kumar Gala
  0 siblings, 1 reply; 2+ messages in thread
From: Pawel Sikora @ 2005-05-13 15:49 UTC (permalink / raw)
  To: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1395 bytes --]

Hi,

simple runtime altivec detection from userspace causes an oops
on the `vand` instruction. kernel was built *without* CONFIG_ALTIVEC.
i think kernel should return a SIGILL instead of an oops ;-)

Oops: kernel access of bad area, sig: 11 [#65]
NIP: C0008B84 LR: C0007F2C SP: CF373F20 REGS: cf373e70 TRAP: 0300 Not tainted
MSR: 00009032 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 11
DAR: 00000088, DSISR: 40000000
TASK = c81e04f0[12983] 'altivec' THREAD: cf372000Last syscall: 174
GPR00: C0007F2C CF373F20 C81E04F0 00000004 00000004 00030001 00000000 0FEE08D0
GPR08: 0000F932 C0007F2C 00009032 C0350000 081E0788 00000000 00000000 100A37D8
GPR16: 100A0000 00000000 100A0000 00000000 10070000 100A37C8 100AEF08 00000000
GPR24: 100A1108 00000000 100A59A8 3002AEF8 3002BB80 3002AE60 0FFEA6FC 00000004
Call trace: [c0007f2c]


processor       : 0
cpu             : 7450
clock           : 700MHz
revision        : 2.1 (pvr 8000 0201)
bogomips        : 696.32
machine         : PowerMac4,4
motherboard     : PowerMac4,4 MacRISC2 MacRISC Power Macintosh
detected as     : 80 (eMac)
pmac flags      : 00000001
L2 cache        : 256K unified
memory          : 384MB
pmac-generation : NewWorld

-- 
The only thing necessary for the triumph of evil
  is for good men to do nothing.
                                           - Edmund Burke

[-- Attachment #2: altivec.c --]
[-- Type: text/x-csrc, Size: 803 bytes --]

#include <setjmp.h>
#include <signal.h>

static sigjmp_buf jmpbuf;
static volatile sig_atomic_t canjump = 0;

void sigill_handler(int sig)
{
        if (!canjump)
        {
                signal(sig, SIG_DFL);
                raise(sig);
        }
        canjump = 0;
        siglongjmp(jmpbuf, 1);
}

int arch_accel()
{
        signal(SIGILL, sigill_handler);
        if (sigsetjmp(jmpbuf, 1))
        {
                signal(SIGILL, SIG_DFL);
                return 0;
        }
        canjump = 1;
        asm volatile
        (
                "mtspr 256, %0          \n\t"
                "vand %%v0, %%v0, %%v0  \n\t"
                :
                : "r" (-1)
        );
        signal(SIGILL, SIG_DFL);
        return 1;
}

int main(int argc, char** argv)
{
        return arch_accel();
}

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [2.6.8] OOPS and SIGSEGV on altivec instruction on PowerPC 7540.
  2005-05-13 15:49 [2.6.8] OOPS and SIGSEGV on altivec instruction on PowerPC 7540 Pawel Sikora
@ 2005-05-13 16:03 ` Kumar Gala
  0 siblings, 0 replies; 2+ messages in thread
From: Kumar Gala @ 2005-05-13 16:03 UTC (permalink / raw)
  To: Pawel Sikora; +Cc: Linux Kernel list, linuxppc-dev list

This is odd. the 2.6.8 kernel should have the code that causes a SIGILL 
if !CONFIG_ALTIVEC.  Can you enable CONFIG_KALLSYMS.

- kumar

On May 13, 2005, at 10:49 AM, Pawel Sikora wrote:

> Hi,
>
> simple runtime altivec detection from userspace causes an oops
>  on the `vand` instruction. kernel was built *without* CONFIG_ALTIVEC.
> i think kernel should return a SIGILL instead of an oops ;-)
>
> Oops: kernel access of bad area, sig: 11 [#65]
>  NIP: C0008B84 LR: C0007F2C SP: CF373F20 REGS: cf373e70 TRAP: 0300 Not 
> tainted
>  MSR: 00009032 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 11
>  DAR: 00000088, DSISR: 40000000
>  TASK = c81e04f0[12983] 'altivec' THREAD: cf372000Last syscall: 174
>  GPR00: C0007F2C CF373F20 C81E04F0 00000004 00000004 00030001 00000000 
> 0FEE08D0
>  GPR08: 0000F932 C0007F2C 00009032 C0350000 081E0788 00000000 00000000 
> 100A37D8
>  GPR16: 100A0000 00000000 100A0000 00000000 10070000 100A37C8 100AEF08 
> 00000000
>  GPR24: 100A1108 00000000 100A59A8 3002AEF8 3002BB80 3002AE60 0FFEA6FC 
> 00000004
>  Call trace: [c0007f2c]
>
>
>
> processor       : 0
>  cpu             : 7450
>  clock           : 700MHz
>  revision        : 2.1 (pvr 8000 0201)
>  bogomips        : 696.32
>  machine         : PowerMac4,4
>  motherboard     : PowerMac4,4 MacRISC2 MacRISC Power Macintosh
>  detected as     : 80 (eMac)
>  pmac flags      : 00000001
>  L2 cache        : 256K unified
> memory          : 384MB
>  pmac-generation : NewWorld
>
> -- 
> The only thing necessary for the triumph of evil
>    is for good men to do nothing.
>                                             - Edmund Burke
> <altivec.c>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-05-13 16:03 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-05-13 15:49 [2.6.8] OOPS and SIGSEGV on altivec instruction on PowerPC 7540 Pawel Sikora
2005-05-13 16:03 ` Kumar Gala

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®