From: SourceForge.net <no...@so...> - 2004-01-02 04:21:26
|
Bugs item #869095, was opened at 2004-01-01 23:15 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id=599 Category: pic target Group: None Status: Open Resolution: None Priority: 5 Submitted By: Albert den Haan (albertdh) Assigned to: Nobody/Anonymous (nobody) Summary: pic16 _CONFIG addresses causes segfault Initial Comment: {a fix patch that worked for me is included below} I have been playing around with the current CVS version (the last one that compiles as of Dec 28) and sdcc crashes in the emit*Map stage when the hardware config bits are set with the following minimal code. $ cat > configCrash.c << EOF #include "p18f252.h" typedef unsigned int cword; cword at _CONFIG1H CONFIG1H = _HS_OSC_1H; void main () {} EOF I've been using a very focussed build :) $~/testzone/sdcc/bin/sdcc --version SDCC : pic16/pic14 2.3.6 (Jan 1 2004) (UNIX) $ Here is the output of a minimal run $ ~/testzone/sdcc/bin/sdcc -mpic16 -p18f252 configCrash.c Processor: 18f252 Caught signal 11: SIGSEGV $ gdb gives this backtrace. (gdb) bt #0 adjustIChain (ebbs=0x82aefb0, count=1) at SDCClrange.c:632 #1 0x0809ba7a in computeLiveRanges (ebbs=0x82aefb0, count=0) at SDCClrange.c:651 #2 0x0809bba4 in recomputeLiveRanges (ebbs=0x82aefb0, count=1) at SDCClrange.c:700 #3 0x080f35b4 in pic16_assignRegisters (ebbs=0x82aefb0, count=1) at ralloc.c:3849 #4 0x080631a8 in eBBlockFromiCode (ic=0x0) at SDCCopt.c:1105 #5 0x08113af9 in pic16emitRegularMap (map=0x8149690, addPublics=1, arFlag=1) at glue.c:204 #6 0x08114d65 in pic16emitMaps () at glue.c:532 #7 0x081156b3 in pic16glue () at glue.c:799 #8 0x0805441d in main (argc=4, argv=0x0, envp=0xbffff9e8) at SDCCmain.c:2122 (gdb) The problem seems to be that the CONFIG1H variable is never explicitly referenced in any excutable code, so there is no code for adjustIChain to work with. / *-----------------------------------------------------------------*/ /* adjustIChain - correct the sch and ech pointers */ / *-----------------------------------------------------------------*/ void adjustIChain (eBBlock ** ebbs, int count) { int i; for (i = 0; i < count; i++) { iCode *ic; if (ebbs[i]->noPath) continue; ic = ebbs[i]->sch; while (ic->prev) // *crash*happens*here* ic = ic->prev; ebbs[i]->sch = ic; ic = ebbs[i]->ech; while (ic->next) ic = ic->next; ebbs[i]->ech = ic; } } My quick fix blindly allows this situation, It works for me. The .hex output looks fine but gpdasm is screwing up the printed addresses for the config bits. $cat configCrash.diff Index: src/SDCClrange.c =================================================================== RCS file: /cvsroot/sdcc/sdcc/src/SDCClrange.c,v retrieving revision 1.32 diff -u -r1.32 SDCClrange.c --- src/SDCClrange.c 27 Nov 2003 09:14:51 -0000 1.32 +++ src/SDCClrange.c 2 Jan 2004 03:55:30 -0000 @@ -629,6 +629,9 @@ continue; ic = ebbs[i]->sch; + /* is there any code for this BBlock? (e.g. ROM assignment) */ + if (!ic) + continue; while (ic->prev) ic = ic->prev; ebbs[i]->sch = ic; $ ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id=599 |
From: SourceForge.net <no...@so...> - 2004-01-02 10:36:05
|
Bugs item #869095, was opened at 2004-01-02 06:15 Message generated for change (Settings changed) made by vrokas You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id=599 Category: pic target Group: None Status: Open Resolution: None Priority: 5 Submitted By: Albert den Haan (albertdh) >Assigned to: Vangelis Rokas (vrokas) Summary: pic16 _CONFIG addresses causes segfault Initial Comment: {a fix patch that worked for me is included below} I have been playing around with the current CVS version (the last one that compiles as of Dec 28) and sdcc crashes in the emit*Map stage when the hardware config bits are set with the following minimal code. $ cat > configCrash.c << EOF #include "p18f252.h" typedef unsigned int cword; cword at _CONFIG1H CONFIG1H = _HS_OSC_1H; void main () {} EOF I've been using a very focussed build :) $~/testzone/sdcc/bin/sdcc --version SDCC : pic16/pic14 2.3.6 (Jan 1 2004) (UNIX) $ Here is the output of a minimal run $ ~/testzone/sdcc/bin/sdcc -mpic16 -p18f252 configCrash.c Processor: 18f252 Caught signal 11: SIGSEGV $ gdb gives this backtrace. (gdb) bt #0 adjustIChain (ebbs=0x82aefb0, count=1) at SDCClrange.c:632 #1 0x0809ba7a in computeLiveRanges (ebbs=0x82aefb0, count=0) at SDCClrange.c:651 #2 0x0809bba4 in recomputeLiveRanges (ebbs=0x82aefb0, count=1) at SDCClrange.c:700 #3 0x080f35b4 in pic16_assignRegisters (ebbs=0x82aefb0, count=1) at ralloc.c:3849 #4 0x080631a8 in eBBlockFromiCode (ic=0x0) at SDCCopt.c:1105 #5 0x08113af9 in pic16emitRegularMap (map=0x8149690, addPublics=1, arFlag=1) at glue.c:204 #6 0x08114d65 in pic16emitMaps () at glue.c:532 #7 0x081156b3 in pic16glue () at glue.c:799 #8 0x0805441d in main (argc=4, argv=0x0, envp=0xbffff9e8) at SDCCmain.c:2122 (gdb) The problem seems to be that the CONFIG1H variable is never explicitly referenced in any excutable code, so there is no code for adjustIChain to work with. / *-----------------------------------------------------------------*/ /* adjustIChain - correct the sch and ech pointers */ / *-----------------------------------------------------------------*/ void adjustIChain (eBBlock ** ebbs, int count) { int i; for (i = 0; i < count; i++) { iCode *ic; if (ebbs[i]->noPath) continue; ic = ebbs[i]->sch; while (ic->prev) // *crash*happens*here* ic = ic->prev; ebbs[i]->sch = ic; ic = ebbs[i]->ech; while (ic->next) ic = ic->next; ebbs[i]->ech = ic; } } My quick fix blindly allows this situation, It works for me. The .hex output looks fine but gpdasm is screwing up the printed addresses for the config bits. $cat configCrash.diff Index: src/SDCClrange.c =================================================================== RCS file: /cvsroot/sdcc/sdcc/src/SDCClrange.c,v retrieving revision 1.32 diff -u -r1.32 SDCClrange.c --- src/SDCClrange.c 27 Nov 2003 09:14:51 -0000 1.32 +++ src/SDCClrange.c 2 Jan 2004 03:55:30 -0000 @@ -629,6 +629,9 @@ continue; ic = ebbs[i]->sch; + /* is there any code for this BBlock? (e.g. ROM assignment) */ + if (!ic) + continue; while (ic->prev) ic = ic->prev; ebbs[i]->sch = ic; $ ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id=599 |
From: SourceForge.net <no...@so...> - 2004-01-02 11:21:28
|
Bugs item #869095, was opened at 2004-01-02 06:15 Message generated for change (Comment added) made by vrokas You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id=599 Category: pic target Group: None >Status: Closed Resolution: None Priority: 5 Submitted By: Albert den Haan (albertdh) Assigned to: Vangelis Rokas (vrokas) Summary: pic16 _CONFIG addresses causes segfault Initial Comment: {a fix patch that worked for me is included below} I have been playing around with the current CVS version (the last one that compiles as of Dec 28) and sdcc crashes in the emit*Map stage when the hardware config bits are set with the following minimal code. $ cat > configCrash.c << EOF #include "p18f252.h" typedef unsigned int cword; cword at _CONFIG1H CONFIG1H = _HS_OSC_1H; void main () {} EOF I've been using a very focussed build :) $~/testzone/sdcc/bin/sdcc --version SDCC : pic16/pic14 2.3.6 (Jan 1 2004) (UNIX) $ Here is the output of a minimal run $ ~/testzone/sdcc/bin/sdcc -mpic16 -p18f252 configCrash.c Processor: 18f252 Caught signal 11: SIGSEGV $ gdb gives this backtrace. (gdb) bt #0 adjustIChain (ebbs=0x82aefb0, count=1) at SDCClrange.c:632 #1 0x0809ba7a in computeLiveRanges (ebbs=0x82aefb0, count=0) at SDCClrange.c:651 #2 0x0809bba4 in recomputeLiveRanges (ebbs=0x82aefb0, count=1) at SDCClrange.c:700 #3 0x080f35b4 in pic16_assignRegisters (ebbs=0x82aefb0, count=1) at ralloc.c:3849 #4 0x080631a8 in eBBlockFromiCode (ic=0x0) at SDCCopt.c:1105 #5 0x08113af9 in pic16emitRegularMap (map=0x8149690, addPublics=1, arFlag=1) at glue.c:204 #6 0x08114d65 in pic16emitMaps () at glue.c:532 #7 0x081156b3 in pic16glue () at glue.c:799 #8 0x0805441d in main (argc=4, argv=0x0, envp=0xbffff9e8) at SDCCmain.c:2122 (gdb) The problem seems to be that the CONFIG1H variable is never explicitly referenced in any excutable code, so there is no code for adjustIChain to work with. / *-----------------------------------------------------------------*/ /* adjustIChain - correct the sch and ech pointers */ / *-----------------------------------------------------------------*/ void adjustIChain (eBBlock ** ebbs, int count) { int i; for (i = 0; i < count; i++) { iCode *ic; if (ebbs[i]->noPath) continue; ic = ebbs[i]->sch; while (ic->prev) // *crash*happens*here* ic = ic->prev; ebbs[i]->sch = ic; ic = ebbs[i]->ech; while (ic->next) ic = ic->next; ebbs[i]->ech = ic; } } My quick fix blindly allows this situation, It works for me. The .hex output looks fine but gpdasm is screwing up the printed addresses for the config bits. $cat configCrash.diff Index: src/SDCClrange.c =================================================================== RCS file: /cvsroot/sdcc/sdcc/src/SDCClrange.c,v retrieving revision 1.32 diff -u -r1.32 SDCClrange.c --- src/SDCClrange.c 27 Nov 2003 09:14:51 -0000 1.32 +++ src/SDCClrange.c 2 Jan 2004 03:55:30 -0000 @@ -629,6 +629,9 @@ continue; ic = ebbs[i]->sch; + /* is there any code for this BBlock? (e.g. ROM assignment) */ + if (!ic) + continue; while (ic->prev) ic = ic->prev; ebbs[i]->sch = ic; $ ---------------------------------------------------------------------- >Comment By: Vangelis Rokas (vrokas) Date: 2004-01-02 13:21 Message: Logged In: YES user_id=770505 Fixed in SDCClrange.c 1.33 Thanks for the patch Albert, I have found the same bug earlier but I haven't traced it to fix it. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id=599 |
From: SourceForge.net <no...@so...> - 2004-01-03 02:49:06
|
Bugs item #869095, was opened at 2004-01-01 23:15 Message generated for change (Comment added) made by albertdh You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id=599 Category: pic target Group: None Status: Closed Resolution: None Priority: 5 Submitted By: Albert den Haan (albertdh) Assigned to: Vangelis Rokas (vrokas) Summary: pic16 _CONFIG addresses causes segfault Initial Comment: {a fix patch that worked for me is included below} I have been playing around with the current CVS version (the last one that compiles as of Dec 28) and sdcc crashes in the emit*Map stage when the hardware config bits are set with the following minimal code. $ cat > configCrash.c << EOF #include "p18f252.h" typedef unsigned int cword; cword at _CONFIG1H CONFIG1H = _HS_OSC_1H; void main () {} EOF I've been using a very focussed build :) $~/testzone/sdcc/bin/sdcc --version SDCC : pic16/pic14 2.3.6 (Jan 1 2004) (UNIX) $ Here is the output of a minimal run $ ~/testzone/sdcc/bin/sdcc -mpic16 -p18f252 configCrash.c Processor: 18f252 Caught signal 11: SIGSEGV $ gdb gives this backtrace. (gdb) bt #0 adjustIChain (ebbs=0x82aefb0, count=1) at SDCClrange.c:632 #1 0x0809ba7a in computeLiveRanges (ebbs=0x82aefb0, count=0) at SDCClrange.c:651 #2 0x0809bba4 in recomputeLiveRanges (ebbs=0x82aefb0, count=1) at SDCClrange.c:700 #3 0x080f35b4 in pic16_assignRegisters (ebbs=0x82aefb0, count=1) at ralloc.c:3849 #4 0x080631a8 in eBBlockFromiCode (ic=0x0) at SDCCopt.c:1105 #5 0x08113af9 in pic16emitRegularMap (map=0x8149690, addPublics=1, arFlag=1) at glue.c:204 #6 0x08114d65 in pic16emitMaps () at glue.c:532 #7 0x081156b3 in pic16glue () at glue.c:799 #8 0x0805441d in main (argc=4, argv=0x0, envp=0xbffff9e8) at SDCCmain.c:2122 (gdb) The problem seems to be that the CONFIG1H variable is never explicitly referenced in any excutable code, so there is no code for adjustIChain to work with. / *-----------------------------------------------------------------*/ /* adjustIChain - correct the sch and ech pointers */ / *-----------------------------------------------------------------*/ void adjustIChain (eBBlock ** ebbs, int count) { int i; for (i = 0; i < count; i++) { iCode *ic; if (ebbs[i]->noPath) continue; ic = ebbs[i]->sch; while (ic->prev) // *crash*happens*here* ic = ic->prev; ebbs[i]->sch = ic; ic = ebbs[i]->ech; while (ic->next) ic = ic->next; ebbs[i]->ech = ic; } } My quick fix blindly allows this situation, It works for me. The .hex output looks fine but gpdasm is screwing up the printed addresses for the config bits. $cat configCrash.diff Index: src/SDCClrange.c =================================================================== RCS file: /cvsroot/sdcc/sdcc/src/SDCClrange.c,v retrieving revision 1.32 diff -u -r1.32 SDCClrange.c --- src/SDCClrange.c 27 Nov 2003 09:14:51 -0000 1.32 +++ src/SDCClrange.c 2 Jan 2004 03:55:30 -0000 @@ -629,6 +629,9 @@ continue; ic = ebbs[i]->sch; + /* is there any code for this BBlock? (e.g. ROM assignment) */ + if (!ic) + continue; while (ic->prev) ic = ic->prev; ebbs[i]->sch = ic; $ ---------------------------------------------------------------------- >Comment By: Albert den Haan (albertdh) Date: 2004-01-02 21:49 Message: Logged In: YES user_id=117442 I'm glad the patch looked sane. I'll be looking deeper into the problem RSN. I wonder if the preceeding noPath check is the one I should have really used. The semantics of the eBBlock fields are a bit of a mystery :) Albert. ---------------------------------------------------------------------- Comment By: Vangelis Rokas (vrokas) Date: 2004-01-02 06:21 Message: Logged In: YES user_id=770505 Fixed in SDCClrange.c 1.33 Thanks for the patch Albert, I have found the same bug earlier but I haven't traced it to fix it. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id=599 |
From: Vangelis R. <vr...@ot...> - 2004-01-04 10:55:26
|
----- Original Message ----- From: "SourceForge.net" <no...@so...> To: <no...@so...> Sent: Saturday, January 03, 2004 4:49 AM Subject: [sdcc-devel] [ sdcc-Bugs-869095 ] pic16 _CONFIG addresses causes segfault > Bugs item #869095, was opened at 2004-01-01 23:15 > Message generated for change (Comment added) made by albertdh > You can respond by visiting: > https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id =599 > > Category: pic target > Group: None > Status: Closed > Resolution: None > Priority: 5 > Submitted By: Albert den Haan (albertdh) > Assigned to: Vangelis Rokas (vrokas) > Summary: pic16 _CONFIG addresses causes segfault > > Initial Comment: > {a fix patch that worked for me is included below} > .... > ---------------------------------------------------------------------- > > >Comment By: Albert den Haan (albertdh) > Date: 2004-01-02 21:49 > > Message: > Logged In: YES > user_id=117442 > > I'm glad the patch looked sane. > > I'll be looking deeper into the problem RSN. I wonder if > the preceeding noPath check is the one I should have > really used. > > The semantics of the eBBlock fields are a bit of a > mystery :) Like to many of us!:-) Your patch surely seems like an adhoc, but its better to fix it temporarly and place a FIXME bookmark there, than leaving it until you already know every detail. This may take too long, and until then noone will use the port! Vangelis |
From: SourceForge.net <no...@so...> - 2004-01-08 16:20:39
|
Bugs item #869095, was opened at 2004-01-02 06:15 Message generated for change (Settings changed) made by vrokas You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id=599 Category: pic target >Group: fixed Status: Closed >Resolution: Fixed Priority: 5 Submitted By: Albert den Haan (albertdh) Assigned to: Vangelis Rokas (vrokas) Summary: pic16 _CONFIG addresses causes segfault Initial Comment: {a fix patch that worked for me is included below} I have been playing around with the current CVS version (the last one that compiles as of Dec 28) and sdcc crashes in the emit*Map stage when the hardware config bits are set with the following minimal code. $ cat > configCrash.c << EOF #include "p18f252.h" typedef unsigned int cword; cword at _CONFIG1H CONFIG1H = _HS_OSC_1H; void main () {} EOF I've been using a very focussed build :) $~/testzone/sdcc/bin/sdcc --version SDCC : pic16/pic14 2.3.6 (Jan 1 2004) (UNIX) $ Here is the output of a minimal run $ ~/testzone/sdcc/bin/sdcc -mpic16 -p18f252 configCrash.c Processor: 18f252 Caught signal 11: SIGSEGV $ gdb gives this backtrace. (gdb) bt #0 adjustIChain (ebbs=0x82aefb0, count=1) at SDCClrange.c:632 #1 0x0809ba7a in computeLiveRanges (ebbs=0x82aefb0, count=0) at SDCClrange.c:651 #2 0x0809bba4 in recomputeLiveRanges (ebbs=0x82aefb0, count=1) at SDCClrange.c:700 #3 0x080f35b4 in pic16_assignRegisters (ebbs=0x82aefb0, count=1) at ralloc.c:3849 #4 0x080631a8 in eBBlockFromiCode (ic=0x0) at SDCCopt.c:1105 #5 0x08113af9 in pic16emitRegularMap (map=0x8149690, addPublics=1, arFlag=1) at glue.c:204 #6 0x08114d65 in pic16emitMaps () at glue.c:532 #7 0x081156b3 in pic16glue () at glue.c:799 #8 0x0805441d in main (argc=4, argv=0x0, envp=0xbffff9e8) at SDCCmain.c:2122 (gdb) The problem seems to be that the CONFIG1H variable is never explicitly referenced in any excutable code, so there is no code for adjustIChain to work with. / *-----------------------------------------------------------------*/ /* adjustIChain - correct the sch and ech pointers */ / *-----------------------------------------------------------------*/ void adjustIChain (eBBlock ** ebbs, int count) { int i; for (i = 0; i < count; i++) { iCode *ic; if (ebbs[i]->noPath) continue; ic = ebbs[i]->sch; while (ic->prev) // *crash*happens*here* ic = ic->prev; ebbs[i]->sch = ic; ic = ebbs[i]->ech; while (ic->next) ic = ic->next; ebbs[i]->ech = ic; } } My quick fix blindly allows this situation, It works for me. The .hex output looks fine but gpdasm is screwing up the printed addresses for the config bits. $cat configCrash.diff Index: src/SDCClrange.c =================================================================== RCS file: /cvsroot/sdcc/sdcc/src/SDCClrange.c,v retrieving revision 1.32 diff -u -r1.32 SDCClrange.c --- src/SDCClrange.c 27 Nov 2003 09:14:51 -0000 1.32 +++ src/SDCClrange.c 2 Jan 2004 03:55:30 -0000 @@ -629,6 +629,9 @@ continue; ic = ebbs[i]->sch; + /* is there any code for this BBlock? (e.g. ROM assignment) */ + if (!ic) + continue; while (ic->prev) ic = ic->prev; ebbs[i]->sch = ic; $ ---------------------------------------------------------------------- Comment By: Albert den Haan (albertdh) Date: 2004-01-03 04:49 Message: Logged In: YES user_id=117442 I'm glad the patch looked sane. I'll be looking deeper into the problem RSN. I wonder if the preceeding noPath check is the one I should have really used. The semantics of the eBBlock fields are a bit of a mystery :) Albert. ---------------------------------------------------------------------- Comment By: Vangelis Rokas (vrokas) Date: 2004-01-02 13:21 Message: Logged In: YES user_id=770505 Fixed in SDCClrange.c 1.33 Thanks for the patch Albert, I have found the same bug earlier but I haven't traced it to fix it. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=869095&group_id=599 |