This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Need help for modifying the format of debug
- From: stephen <chency666 at gmail dot com>
- To: gcc-help at gcc dot gnu dot org
- Date: Fri, 4 Mar 2011 12:33:23 +0800
- Subject: Need help for modifying the format of debug
Dear all,
? I met one problem when I tried to modify the debug format from gcc.
Supposing there is a program :
1:void main()
2:{
3: int i=1;
4: if (i>1)
5: {
6: ?i=2;
7: ?if(i == 2)
8: ?{
9: ? i=i+1;
10: ? i=3;
11: ?}
12: ?i=i-1;
13: }
14: i=i+1;
15:}
Using gcc-avr, part of the assembler code (statement 6,7 and 9) will be:
.stabn 68,0,6,.LM3-.LFBB1 ? --
.LM3: ? ? ? ? ? ? ? ? ? ? ? ? ? |
MOV A,2 ? ? ? ? ? ? ? ? ? ? ? |
MOV Y+1,A ? ? ? ? ? ? ? ? ? ? |- for statement 6
?MOV A,2 ? ? ? ? ? ? ? ? ? ? ?|
MOV Y+1,A ? ? ? ? ? ? ? ? ? --
.stabn 68,0,7,.LM4-.LFBB1 ?--
.LM4: ? ? ? ? ? ? ? ? ? ? ? ? ?|- for statement 7
? ? ? ?.... ? ? ? ? ? ? ? ? ? --
.stabn 68,0,9,.LM5-.LFBB1 --
.LM5: ? ? ? ? ? ? ? ? ? ? ? ? ? |
INC Y+1 ? ? ? ? ? ? ? ? ? ? ? |- for statement 9
SZ [0AH].2 ? ? ? ? ? ? ? ? ? ? |
INC Y+1 ? ? ? ? ? ? ? ? ? ? ? --
we want to set a scope id for each statement, for example,
void main()
{
int i=1; ? ? ? ? -------------------> ?scope = 1;
if (i>1)
{
?i=2; ? ? ? ? ? ?--------------------> scope =2; because it is inside a brace;
?if(i == 2)
?{
? i=i+1; ? ? ? ? --------------------> scope =3; because it is inside two brace;
? i=3; ? ? ? ? ? --------------------> scope =3; because it is inside two brace;
?}
?i=i-1; ? ? ? ? ?--------------------> scope =2; because it is inside a brace;
}
i=i+1; ? ? ? ? ? --------------------> scope =1;
}
And we want to add this scope information in the assembler code, like
this. (As soon as it reaches a "{", the scope will add "1" and the
scope will remove "1" when it reaches a "}" )
? ? ? ?scope 2 ?------------------------ we want to add this "scope" information
.stabn 68,0,6,.LM3-.LFBB1 ? --
.LM3: ? ? ? ? ? ? ? ? ? ? ? ? ? |
MOV A,2 ? ? ? ? ? ? ? ? ? ? ? |
MOV Y+1,A ? ? ? ? ? ? ? ? ? ? |- for statement 6
?MOV A,2 ? ? ? ? ? ? ? ? ? ? ? |
MOV Y+1,A ? ? ? ? ? ? ? ? ? ? --
.stabn 68,0,7,.LM4-.LFBB1 ?--
.LM4: ? ? ? ? ? ? ? ? ? ? ? ? ? |- for statement 7
? ? ? ?.... ? ? ? ? ? ? ? ? ? --
? ? ? ?scope 3 ? ---------------------- ? we want to add this "scope"
information
.stabn 68,0,9,.LM5-.LFBB1 ?--
.LM5: ? ? ? ? ? ? ? ? ? ? ? ? ? |
INC Y+1 ? ? ? ? ? ? ? ? ? ? ? |- for statement 9
SZ [0AH].2 ? ? ? ? ? ? ? ? ? ? |
INC Y+1 ? ? ? ? ? ? ? ? ? ? ? --
Gcc generates the assembler code from the RTL tree. There is not any
information for "{" and "}" in the RTL.
But I also found basic block struct has a variable "loop_depth", can I use it?
What is the easiest way to implement this.
Thank you very much.