Hmm,

In Makefile:

/********************/

INCLUDE := -isystem ../uClinux-dist-20060803/linux-2.4.x/include
CFLAGS  := -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
CC      := /opt/uClinux-m68k-elf/bin/m68k-elf-gcc
   
${TARGET}.o: ${TARGET}.c

/************************/

and with -S  :

/*****************************************/

        .file   "ucAsserv.c"
gcc2_compiled.:
.section        .modinfo,"a",@progbits
        .type    __module_kernel_version,@object
        .size    __module_kernel_version,33
__module_kernel_version:
        .string "kernel_version=2.4.31-uc0-ANI-10"
.section        .rodata
.LC0:
        .string "<6>Bug:\n"
.LC1:
        .string "<6>Never Reach\n"
.text
        .align  2
.globl init_module
        .type    init_module,@function
init_module:
        link.w %a6,#0
        clr.l VitL
        clr.l global_left_encoder
        clr.l global_right_encoder
        pea .LC0
        jsr printk
        addq.l #4,%sp
        move.l global_left_encoder,%d0
        muls.l global_right_encoder,%d0
        move.l %d0,VitL
        pea .LC1
        jsr printk
        addq.l #4,%sp
        clr.l %d0
        jbra .L95
        .align  2
.L95:
        unlk %a6
        rts
.Lfe1:
        .size    init_module,.Lfe1-init_module
        .align  2
.globl cleanup_module
        .type    cleanup_module,@function
cleanup_module:
        link.w %a6,#0
.L96:
        unlk %a6
        rts
.Lfe2:
        .size    cleanup_module,.Lfe2-cleanup_module
.globl __module_author
.section        .modinfo
        .type    __module_author,@object
        .size    __module_author,24
__module_author:
        .string "author=Stephane Germain"
        .type    __module_license,@object
        .size    __module_license,12
__module_license:
        .string "license=GPL"
        .local  global_right_encoder
        .comm   global_right_encoder,4,2
        .local  global_left_encoder
        .comm   global_left_encoder,4,2
        .local  VitL
        .comm   VitL,4,2
        .ident  "GCC: (GNU) 2.95.3 20010315 (release)(ColdFire patches -
20010318 from
http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from
http://www.snapgear.com/)"

/***************************************************/


I use the default toolchain

/opt/uClinux-m68k-elf/bin/m68k-elf-gcc -v :
Reading specs from /opt/uClinux-m68k-elf/lib/gcc-lib/m68k-elf/2.95.3/specs
gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from
http://fiddes.net/coldfire/)(uClinux XIP
and shared lib patches from http://www.snapgear.com/)

thanks


Wolfgang Reissnegger a écrit :
> Hi Stéphane,
>
> looks like you are compiling your code with compiler flags that
> generate instructions that the processor does not support. That's why
> you see the illegal instruction trap.
>
> The reason that it all works if the variables are local is probably
> that you also use an optimization flag (e.g. -O3) that causes the
> compiler to optimize the whole multiplication away in main because it
> has no effect on the function's result and is local to the function.
>
> You should try to compile the code with gcc -S to generate assembler
> output. Then you can identify the instruction that causes the problem.
>
> Cheers,
>    Wolfgang
>
> Stéphane wrote:
>> Hi,
>>
>> I have a bug that I can be resume as:
>>
>> /***************************/
>> #include <linux/module.h>    // Needed by all modules
>> #include <linux/kernel.h>    // Needed for KERN_INFO
>>
>> static long global_right_encoder;
>> static long global_left_encoder;
>> static long VitL;
>>
>> int init_module(void)
>> {
>>     VitL = 0;
>>     global_left_encoder = 0;
>>     global_right_encoder = 0;
>>
>>     printk(KERN_INFO "Bug:\n");
>>        VitL = global_left_encoder*global_right_encoder;
>>        printk(KERN_INFO "Never Reach\n");
>>        return 0;
>> }
>>
>>
>> void cleanup_module(void)
>> {
>> }
>>
>> MODULE_AUTHOR("Stephane Germain");
>> MODULE_LICENSE("GPL");
>> /**********************************/
>>
>> result:
>>
>> insmod xxx.o:
>> SIGSEGV
>>
>> dmesg:
>> Bug:
>> *** ILLEGAL INSTRUCTION ***   FORMAT=0
>> Current process id is 47
>> BAD KERNEL TRAP: 00000000
>> PC: [<000a8bec>]
>> SR: 2014  SP: 007dbee8  a2: 10c16b34
>> d0: 00000000    d1: 00000991    d2: 00000000    d3: ffffffea
>> d4: 00000060    d5: 00000008    a0: 0003dc8c    a1: 0003dca8
>> Process insmod (pid: 47, stackpage=007db000)
>> Frame format=0
>> Stack from 007dbf1c:
>>         000a8c14 007d3000 007dbfc4 10c17856 007c5348 00102428 007c5348
>> 000000e8
>>         00000002 00000001 007da000 00192e00 007c51c0 00190004 00140560
>> 0015fae0
>>         007d3000 007d4000 00000060 0003dd58 000a8bc0 000000e8 00000000
>> 00000000
>>         00000000 00000000 00000000 00000000 00000000 00000000 00000000
>> 00000000
>>         00000000 00000000 00000000 00000000 00000000 00000000 00000000
>> 00000000
>>         00000000 00000000 0019fdc8 10c127d2 00192e00 007c5348 00102428
>> 007c5348
>> Call Trace:
>>         [<10c17856>] [<10c127d2>]
>> Code: 4c39 0800 000a 8c3c 23c0 000a 8c44 4879 000a 8c1d
>>
>> /*****************************/
>>
>>
>> if the variables are local, all work!
>>
>> Somebody know something that I don't  about that?
>>
>> Thanks
>>
>> Stephane Germain
>>
>>
>>
>> _______________________________________________
>> uClinux-dev mailing list
>> uClinux-dev@uclinux.org
>> http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
>> This message was resent by uclinux-dev@uclinux.org
>> To unsubscribe see:
>> http://mailman.uclinux.org/mailman/options/uclinux-dev
>
> _______________________________________________
> uClinux-dev mailing list
> uClinux-dev@uclinux.org
> http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
> This message was resent by uclinux-dev@uclinux.org
> To unsubscribe see:
> http://mailman.uclinux.org/mailman/options/uclinux-dev
>
>

_______________________________________________
uClinux-dev mailing list
uClinux-dev@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-dev@uclinux.org
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

Reply via email to