The following example is a test case showing the problem. The jump table is placed in .data on gcc-4.0.0 instead of flash memory.
Gcc-4.0.0 was configured that way: ./configure --prefix=/home/avrdev --target=avr --enable-languages=c,c++ --disable-nls [EMAIL PROTECTED] stk500]$ cat testbug.c unsigned long TestBug(int p) { unsigned long x=200; unsigned long y=1; switch(p){ case 0: x=1; y++; break; case 1: x=2; y++; break; case 2: x=3; y=2; break; case 3: x=4; y=34; break; case 4: x=5; y=38; break; case 5: x=6; y=9; break; case 6: x=7; y=71; break; case 7: x=8; y=712; break; case 8: x=9; y=-1; break; case 9: x=10; y=10; break; case 10: x=11; y=12; break; case 11: x=12; y=123; break; case 12: x=13; y=124; break; case 13: x=14; y=122; break; case 14: x=15; y=121; break; case 15: x=1; y++; break; case 16: x=2; y++; break; case 17: x=3; y=2; break; case 18: x=4; y=34; break; case 19: x=5; y=38; break; case 20: x=6; y=9; break; case 21: x=7; y=71; break; case 22: x=8; y=712; break; case 23: x=9; y=-1; break; case 24: x=10; y=10; break; case 25: x=11; y=12; break; case 26: x=12; y=123; break; case 27: x=13; y=124; break; case 28: x=14; y=122; break; case 29: x=15; y=121; break; } return x*y; } [EMAIL PROTECTED] stk500]$ avr-gcc --version avr-gcc (GCC) 3.4.3 Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [EMAIL PROTECTED] stk500]$ avr-gcc -Os -Wall -c testbug.c [EMAIL PROTECTED] stk500]$ avr-objdump -s testbug.o testbug.o: file format elf32-avr Contents of section .text: 0000 cf93df93 c8ecd0e0 e0e0f0e0 21e030e0 ............!.0. 0010 40e050e0 aa2797fd a095ba2f 8e319105 @.P..'...../.1.. 0020 08f083c0 80509040 8f939f93 0895c1e0 [EMAIL PROTECTED] 0030 d0e0e0e0 f0e009c0 c2e0d0e0 e0e0f0e0 ................ 0040 43c0c3e0 d0e0e0e0 f0e022e0 30e040e0 C........."[EMAIL PROTECTED] 0050 50e06bc0 c4e0d0e0 e0e0f0e0 22e230e0 P.k.........".0. 0060 40e050e0 62c0c5e0 d0e0e0e0 f0e026e2 @.P.b.........&. 0070 30e040e0 50e059c0 c6e0d0e0 e0e0f0e0 [EMAIL PROTECTED] 0080 29e030e0 40e050e0 50c0c7e0 d0e0e0e0 )[EMAIL PROTECTED] 0090 f0e027e4 30e040e0 50e047c0 c8e0d0e0 ..'[EMAIL PROTECTED] 00a0 e0e0f0e0 28ec32e0 40e050e0 3ec0c9e0 ....([EMAIL PROTECTED]>... 00b0 d0e0e0e0 f0e02fef 3fef4fef 5fef35c0 ....../.?.O._.5. 00c0 cae0d0e0 e0e0f0e0 2c2f3d2f 4e2f5f2f ........,/=/N/_/ 00d0 2cc0cbe0 d0e0e0e0 f0e02ce0 30e040e0 ,.........,[EMAIL PROTECTED] 00e0 50e023c0 cce0d0e0 e0e0f0e0 2be730e0 P.#.........+.0. 00f0 40e050e0 1ac0cde0 d0e0e0e0 f0e02ce7 @.P...........,. 0100 30e040e0 50e011c0 cee0d0e0 e0e0f0e0 [EMAIL PROTECTED] 0110 2ae730e0 40e050e0 08c0cfe0 d0e0e0e0 [EMAIL PROTECTED] 0120 f0e029e7 30e040e0 50e06c2f 7d2f8e2f ..)[EMAIL PROTECTED]/}/./ 0130 9f2f00d0 b92fa82f 972f862f 682f792f ./..././././h/y/ 0140 8a2f9b2f df91cf91 0895 ././...... Contents of section .progmem.gcc_sw_table: 0000 00c000c0 00c000c0 00c000c0 00c000c0 ................ 0010 00c000c0 00c000c0 00c000c0 00c000c0 ................ 0020 00c000c0 00c000c0 00c000c0 00c000c0 ................ 0030 00c000c0 00c000c0 00c000c0 ............ [EMAIL PROTECTED] stk500]$ avr-gcc --version avr-gcc (GCC) 4.0.0 Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [EMAIL PROTECTED] stk500]$ avr-gcc -Os -Wall -c testbug.c [EMAIL PROTECTED] stk500]$ avr-objdump -s testbug.o testbug.o: file format elf32-avr Contents of section .text: 0000 f92fe82f 4e9760f4 e050f040 09946fe0 ././[EMAIL PROTECTED] 0010 70e080e0 90e029e7 30e040e0 50e07ec0 p.....)[EMAIL PROTECTED] 0020 68ec70e0 80e090e0 21e030e0 40e050e0 [EMAIL PROTECTED] 0030 75c061e0 70e080e0 90e004c0 62e070e0 u.a.p.......b.p. 0040 80e090e0 22e030e0 40e050e0 67c063e0 ...."[EMAIL PROTECTED] 0050 70e080e0 90e0f6cf 64e070e0 80e090e0 p.......d.p..... 0060 22e230e0 40e050e0 59c065e0 70e080e0 "[EMAIL PROTECTED] 0070 90e026e2 30e040e0 50e050c0 66e070e0 ..&[EMAIL PROTECTED] 0080 80e090e0 29e030e0 40e050e0 47c067e0 ....)[EMAIL PROTECTED] 0090 70e080e0 90e027e4 30e040e0 50e03ec0 p.....'[EMAIL PROTECTED]>. 00a0 68e070e0 80e090e0 28ec32e0 40e050e0 h.p.....([EMAIL PROTECTED] 00b0 35c069e0 70e080e0 90e02fef 3fef4fef 5.i.p...../.?.O. 00c0 5fef2cc0 6ae070e0 80e090e0 2ae030e0 _.,.j.p.....*.0. 00d0 40e050e0 23c06be0 70e080e0 90e02ce0 @.P.#.k.p.....,. 00e0 30e040e0 50e01ac0 6ce070e0 80e090e0 [EMAIL PROTECTED] 00f0 2be730e0 40e050e0 11c06de0 70e080e0 [EMAIL PROTECTED] 0100 90e02ce7 30e040e0 50e008c0 6ee070e0 ..,[EMAIL PROTECTED] 0110 80e090e0 2ae730e0 40e050e0 00d00895 [EMAIL PROTECTED] Contents of section .data: 0000 00c000c0 00c000c0 00c000c0 00c000c0 ................ 0010 00c000c0 00c000c0 00c000c0 00c000c0 ................ 0020 00c000c0 00c000c0 00c000c0 00c000c0 ................ 0030 00c000c0 00c000c0 00c000c0 ............ [EMAIL PROTECTED] stk500]$ -- Summary: AVR target: switch/case jump table is placed in .data instead of .progmem.gcc_sw_table Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: critical Priority: P2 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bernard dot fouche at kuantic dot com CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21284