From: SourceForge.net <no...@so...> - 2011-02-22 05:41:08
|
Bugs item #3188899, was opened at 2011-02-22 11:11 Message generated for change (Tracker Item Submitted) made by kchat79 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: assembler Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Krishnendu Chatterjee (kchat79) Assigned to: Nobody/Anonymous (nobody) Summary: Bug in static local variable Initial Comment: Consider the following code: struct S1 { char a, b, c; }; struct S2 { __xdata struct S1 *s1; }; void main (void) { static __xdata struct S1 s1; static __code struct S2 s2 = { &s1 }; } It is compiled with sdcc --model-large --stack-auto --std-c99 options. However it give the following link error: ?ASlink-Warning-Undefined Global '_s1' referenced by module 'main' I opened the assmebly code and found the source of the error. ;------------------------------------------------------------ ;Allocation info for local variables in function 'main' ;------------------------------------------------------------ ;s1 Allocated with name '_main_s1_1_1' ;------------------------------------------------------------ ; main.c:11: void main (void) ; ----------------------------------------- ; function main ; ----------------------------------------- _main: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ret .area CSEG (CODE) .area CONST (CODE) _main_s2_1_1: .byte _s1,(_s1 >> 8) ; should be _main_s1_1_1 .area XINIT (CODE) .area CABS (ABS,CODE) I have reproduced this error repeatedly with sdcc version 2.9.0 and 3.0.0. I have not tested the earlier versions. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-02-22 05:43:59
|
Bugs item #3188899, was opened at 2011-02-22 11:11 Message generated for change (Settings changed) made by kchat79 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: assembler Group: None Status: Open Resolution: None >Priority: 9 Private: No Submitted By: Krishnendu Chatterjee (kchat79) Assigned to: Nobody/Anonymous (nobody) Summary: Bug in static local variable Initial Comment: Consider the following code: struct S1 { char a, b, c; }; struct S2 { __xdata struct S1 *s1; }; void main (void) { static __xdata struct S1 s1; static __code struct S2 s2 = { &s1 }; } It is compiled with sdcc --model-large --stack-auto --std-c99 options. However it give the following link error: ?ASlink-Warning-Undefined Global '_s1' referenced by module 'main' I opened the assmebly code and found the source of the error. ;------------------------------------------------------------ ;Allocation info for local variables in function 'main' ;------------------------------------------------------------ ;s1 Allocated with name '_main_s1_1_1' ;------------------------------------------------------------ ; main.c:11: void main (void) ; ----------------------------------------- ; function main ; ----------------------------------------- _main: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ret .area CSEG (CODE) .area CONST (CODE) _main_s2_1_1: .byte _s1,(_s1 >> 8) ; should be _main_s1_1_1 .area XINIT (CODE) .area CABS (ABS,CODE) I have reproduced this error repeatedly with sdcc version 2.9.0 and 3.0.0. I have not tested the earlier versions. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-02-22 09:26:45
|
Bugs item #3188899, was opened at 2011-02-22 06:41 Message generated for change (Comment added) made by wek_ You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: assembler Group: None Status: Open Resolution: None Priority: 9 Private: No Submitted By: Krishnendu Chatterjee (kchat79) Assigned to: Nobody/Anonymous (nobody) Summary: Bug in static local variable Initial Comment: Consider the following code: struct S1 { char a, b, c; }; struct S2 { __xdata struct S1 *s1; }; void main (void) { static __xdata struct S1 s1; static __code struct S2 s2 = { &s1 }; } It is compiled with sdcc --model-large --stack-auto --std-c99 options. However it give the following link error: ?ASlink-Warning-Undefined Global '_s1' referenced by module 'main' I opened the assmebly code and found the source of the error. ;------------------------------------------------------------ ;Allocation info for local variables in function 'main' ;------------------------------------------------------------ ;s1 Allocated with name '_main_s1_1_1' ;------------------------------------------------------------ ; main.c:11: void main (void) ; ----------------------------------------- ; function main ; ----------------------------------------- _main: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ret .area CSEG (CODE) .area CONST (CODE) _main_s2_1_1: .byte _s1,(_s1 >> 8) ; should be _main_s1_1_1 .area XINIT (CODE) .area CABS (ABS,CODE) I have reproduced this error repeatedly with sdcc version 2.9.0 and 3.0.0. I have not tested the earlier versions. ---------------------------------------------------------------------- Comment By: wek (wek_) Date: 2011-02-22 10:26 Message: The offending code can be simplified to: void main (void) { char s1; void * __code s2 = &s1; } Both variables have to be local (not necessarily static), s1 may be located in any memory class but the pointer has to be located in __code . JW ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-02-22 10:28:45
|
Bugs item #3188899, was opened at 2011-02-22 11:11 Message generated for change (Comment added) made by kchat79 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: assembler Group: None Status: Open Resolution: None Priority: 9 Private: No Submitted By: Krishnendu Chatterjee (kchat79) Assigned to: Nobody/Anonymous (nobody) Summary: Bug in static local variable Initial Comment: Consider the following code: struct S1 { char a, b, c; }; struct S2 { __xdata struct S1 *s1; }; void main (void) { static __xdata struct S1 s1; static __code struct S2 s2 = { &s1 }; } It is compiled with sdcc --model-large --stack-auto --std-c99 options. However it give the following link error: ?ASlink-Warning-Undefined Global '_s1' referenced by module 'main' I opened the assmebly code and found the source of the error. ;------------------------------------------------------------ ;Allocation info for local variables in function 'main' ;------------------------------------------------------------ ;s1 Allocated with name '_main_s1_1_1' ;------------------------------------------------------------ ; main.c:11: void main (void) ; ----------------------------------------- ; function main ; ----------------------------------------- _main: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ret .area CSEG (CODE) .area CONST (CODE) _main_s2_1_1: .byte _s1,(_s1 >> 8) ; should be _main_s1_1_1 .area XINIT (CODE) .area CABS (ABS,CODE) I have reproduced this error repeatedly with sdcc version 2.9.0 and 3.0.0. I have not tested the earlier versions. ---------------------------------------------------------------------- >Comment By: Krishnendu Chatterjee (kchat79) Date: 2011-02-22 15:58 Message: wek_'s example is simple and good. But I prefer to add static with "char s1". This is because, without --stack-auto option, s1 may be given a specific location in memory, i.e. some specific address in __data in model-small or in __xdata in model-large. However, with stack-auto, you cannot predict the location of s1. Thus &s1 will be a variable and cannot be used to initialize a __code. Making it static, freezes its location in the memory without any ambiguity. Thus void main (void) { static char s1; void * __code s2 = &s1; } Of course, if you are using --stack-auto option, s2 has to be declared 'static' as '__code' is explicitly mentioned. ---------------------------------------------------------------------- Comment By: wek (wek_) Date: 2011-02-22 14:56 Message: The offending code can be simplified to: void main (void) { char s1; void * __code s2 = &s1; } Both variables have to be local (not necessarily static), s1 may be located in any memory class but the pointer has to be located in __code . JW ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-04-17 15:29:00
|
Bugs item #3188899, was opened at 2011-02-22 06:41 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: assembler Group: None Status: Open Resolution: None >Priority: 6 Private: No Submitted By: Krishnendu Chatterjee (kchat79) Assigned to: Nobody/Anonymous (nobody) Summary: Bug in static local variable Initial Comment: Consider the following code: struct S1 { char a, b, c; }; struct S2 { __xdata struct S1 *s1; }; void main (void) { static __xdata struct S1 s1; static __code struct S2 s2 = { &s1 }; } It is compiled with sdcc --model-large --stack-auto --std-c99 options. However it give the following link error: ?ASlink-Warning-Undefined Global '_s1' referenced by module 'main' I opened the assmebly code and found the source of the error. ;------------------------------------------------------------ ;Allocation info for local variables in function 'main' ;------------------------------------------------------------ ;s1 Allocated with name '_main_s1_1_1' ;------------------------------------------------------------ ; main.c:11: void main (void) ; ----------------------------------------- ; function main ; ----------------------------------------- _main: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ret .area CSEG (CODE) .area CONST (CODE) _main_s2_1_1: .byte _s1,(_s1 >> 8) ; should be _main_s1_1_1 .area XINIT (CODE) .area CABS (ABS,CODE) I have reproduced this error repeatedly with sdcc version 2.9.0 and 3.0.0. I have not tested the earlier versions. ---------------------------------------------------------------------- >Comment By: Philipp Klaus Krause (spth) Date: 2011-04-17 17:29 Message: Reducing priority, since the problem is visible to the user (unlike bugs that cause bad code to be generated silently). Philipp ---------------------------------------------------------------------- Comment By: Krishnendu Chatterjee (kchat79) Date: 2011-02-22 11:28 Message: wek_'s example is simple and good. But I prefer to add static with "char s1". This is because, without --stack-auto option, s1 may be given a specific location in memory, i.e. some specific address in __data in model-small or in __xdata in model-large. However, with stack-auto, you cannot predict the location of s1. Thus &s1 will be a variable and cannot be used to initialize a __code. Making it static, freezes its location in the memory without any ambiguity. Thus void main (void) { static char s1; void * __code s2 = &s1; } Of course, if you are using --stack-auto option, s2 has to be declared 'static' as '__code' is explicitly mentioned. ---------------------------------------------------------------------- Comment By: wek (wek_) Date: 2011-02-22 10:26 Message: The offending code can be simplified to: void main (void) { char s1; void * __code s2 = &s1; } Both variables have to be local (not necessarily static), s1 may be located in any memory class but the pointer has to be located in __code . JW ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-05-03 11:33:46
|
Bugs item #3188899, was opened at 2011-02-22 06:41 Message generated for change (Settings changed) made by maartenbrock You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. >Category: C-Front End Group: None Status: Open Resolution: None Priority: 6 Private: No Submitted By: Krishnendu Chatterjee (kchat79) >Assigned to: Maarten Brock (maartenbrock) Summary: Bug in static local variable Initial Comment: Consider the following code: struct S1 { char a, b, c; }; struct S2 { __xdata struct S1 *s1; }; void main (void) { static __xdata struct S1 s1; static __code struct S2 s2 = { &s1 }; } It is compiled with sdcc --model-large --stack-auto --std-c99 options. However it give the following link error: ?ASlink-Warning-Undefined Global '_s1' referenced by module 'main' I opened the assmebly code and found the source of the error. ;------------------------------------------------------------ ;Allocation info for local variables in function 'main' ;------------------------------------------------------------ ;s1 Allocated with name '_main_s1_1_1' ;------------------------------------------------------------ ; main.c:11: void main (void) ; ----------------------------------------- ; function main ; ----------------------------------------- _main: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ret .area CSEG (CODE) .area CONST (CODE) _main_s2_1_1: .byte _s1,(_s1 >> 8) ; should be _main_s1_1_1 .area XINIT (CODE) .area CABS (ABS,CODE) I have reproduced this error repeatedly with sdcc version 2.9.0 and 3.0.0. I have not tested the earlier versions. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-04-17 17:29 Message: Reducing priority, since the problem is visible to the user (unlike bugs that cause bad code to be generated silently). Philipp ---------------------------------------------------------------------- Comment By: Krishnendu Chatterjee (kchat79) Date: 2011-02-22 11:28 Message: wek_'s example is simple and good. But I prefer to add static with "char s1". This is because, without --stack-auto option, s1 may be given a specific location in memory, i.e. some specific address in __data in model-small or in __xdata in model-large. However, with stack-auto, you cannot predict the location of s1. Thus &s1 will be a variable and cannot be used to initialize a __code. Making it static, freezes its location in the memory without any ambiguity. Thus void main (void) { static char s1; void * __code s2 = &s1; } Of course, if you are using --stack-auto option, s2 has to be declared 'static' as '__code' is explicitly mentioned. ---------------------------------------------------------------------- Comment By: wek (wek_) Date: 2011-02-22 10:26 Message: The offending code can be simplified to: void main (void) { char s1; void * __code s2 = &s1; } Both variables have to be local (not necessarily static), s1 may be located in any memory class but the pointer has to be located in __code . JW ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-05-03 21:16:30
|
Bugs item #3188899, was opened at 2011-02-22 06:41 Message generated for change (Comment added) made by maartenbrock You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: C-Front End >Group: fixed >Status: Closed >Resolution: Fixed Priority: 6 Private: No Submitted By: Krishnendu Chatterjee (kchat79) Assigned to: Maarten Brock (maartenbrock) Summary: Bug in static local variable Initial Comment: Consider the following code: struct S1 { char a, b, c; }; struct S2 { __xdata struct S1 *s1; }; void main (void) { static __xdata struct S1 s1; static __code struct S2 s2 = { &s1 }; } It is compiled with sdcc --model-large --stack-auto --std-c99 options. However it give the following link error: ?ASlink-Warning-Undefined Global '_s1' referenced by module 'main' I opened the assmebly code and found the source of the error. ;------------------------------------------------------------ ;Allocation info for local variables in function 'main' ;------------------------------------------------------------ ;s1 Allocated with name '_main_s1_1_1' ;------------------------------------------------------------ ; main.c:11: void main (void) ; ----------------------------------------- ; function main ; ----------------------------------------- _main: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ret .area CSEG (CODE) .area CONST (CODE) _main_s2_1_1: .byte _s1,(_s1 >> 8) ; should be _main_s1_1_1 .area XINIT (CODE) .area CABS (ABS,CODE) I have reproduced this error repeatedly with sdcc version 2.9.0 and 3.0.0. I have not tested the earlier versions. ---------------------------------------------------------------------- >Comment By: Maarten Brock (maartenbrock) Date: 2011-05-03 23:16 Message: Fixed in SDCC 3.0.2 #6481. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-04-17 17:29 Message: Reducing priority, since the problem is visible to the user (unlike bugs that cause bad code to be generated silently). Philipp ---------------------------------------------------------------------- Comment By: Krishnendu Chatterjee (kchat79) Date: 2011-02-22 11:28 Message: wek_'s example is simple and good. But I prefer to add static with "char s1". This is because, without --stack-auto option, s1 may be given a specific location in memory, i.e. some specific address in __data in model-small or in __xdata in model-large. However, with stack-auto, you cannot predict the location of s1. Thus &s1 will be a variable and cannot be used to initialize a __code. Making it static, freezes its location in the memory without any ambiguity. Thus void main (void) { static char s1; void * __code s2 = &s1; } Of course, if you are using --stack-auto option, s2 has to be declared 'static' as '__code' is explicitly mentioned. ---------------------------------------------------------------------- Comment By: wek (wek_) Date: 2011-02-22 10:26 Message: The offending code can be simplified to: void main (void) { char s1; void * __code s2 = &s1; } Both variables have to be local (not necessarily static), s1 may be located in any memory class but the pointer has to be located in __code . JW ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3188899&group_id=599 |