Hi Stephane,
Stéphane wrote:
ok no more SIGSEGV but with:
static long global_right_encoder;
static double VitR;
int init_module(void)
{
VitR = (double)global_right_encoder;
return 0;
}
insmod ucAsserv.o
Using ucAsserv.o
insmod: unresolved symbol __floatsidf
Don't use floating point math in the kernel.
Regards
greg
After the module was unloaded !
the compile line is now:
/opt/uClinux-m68k-elf/bin/m68k-elf-gcc -iwithprefix include
-DKBUILD_BASENAME=ucAsserv -fno-builtin -nostdinc -O2
-fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -D__ELF__
-DMAGIC_ROM_PTR -DNO_FORGET -DUTS_SYSNAME="uClinux" -DNO_MM -DNO_FPU
-DNO_CACHE -DNO_CACHE -DMODULE -D__KERNEL__ -isystem
../uClinux-dist-20060803/linux-2.4.x/include -m68000 -Dlinux
-D__linux__ -Dunix -D__uClinux__ -DEMBED -c -o ucAsserv.o ucAsserv.c
the cpu is
MC68vz328
thanks
stephane Germain
Greg Ungerer a écrit :
Hi Stephane,
Stéphane wrote:
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
What CPU are you running on?
What is the actual compile line?
From the ensuing discussion I would guess that you are not
compiling with the appropriate CPU class passed to gcc.
If you are using a ColdFire you should at least have an
-m5200 (or equivalent) gcc option. If a base 68k (like
68328 or similar) then -m68000. Otherwise you won't get
instructions generated appropriate to your CPU.
Regards
Greg
/************************/
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
_______________________________________________
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
--
------------------------------------------------------------------------
Greg Ungerer -- Chief Software Dude EMAIL: [EMAIL PROTECTED]
Secure Computing Corporation PHONE: +61 7 3435 2888
825 Stanley St, FAX: +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia WEB: http://www.SnapGear.com
_______________________________________________
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