Corrected a bug when the CDB file does not propperly mark a function end.
authorjesusc <jesusc@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 12 Dec 2002 01:16:50 +0000 (01:16 +0000)
committerjesusc <jesusc@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 12 Dec 2002 01:16:50 +0000 (01:16 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2116 4a8a32a2-be11-0410-ad9d-d568d2c75423

as/mcs51/lkaomf51.c

index d100081a4f7037992d4381f752ae4b5bc99dfa9d..e7933fe962a5afe237a9a6c9819835e7bb1825f4 100644 (file)
@@ -25,7 +25,7 @@
 
 #define EQ(A,B) !strcmp((A),(B))
 #define MEMSIZE 0x10000
-//#define DODUMP 1
+#define DODUMP 1
 
 typedef struct
 {
@@ -308,7 +308,7 @@ void OutputAOEMF51(void)
                /*Public symbols defined in this module*/
                recsize=2;
                for(k=0; k<numsym; k++)/*Compute the record length*/
-                       if ( (symbol[k].FileNameNumber==j) &&
+                       if ( (symbol[k].FileNameNumber==j) && (symbol[k].Address!=-1) &&
                                 (symbol[k].Procedure==-1) &&
                                 (symbol[k].Static==-1) ) recsize+=((strlen(symbol[k].name)+1)+5);
 
@@ -319,7 +319,7 @@ void OutputAOEMF51(void)
                        OutputByte(0x01);       /*DEF TYPE: Public symbols*/
                        for(k=0; k<numsym; k++)
                        {
-                               if ( (symbol[k].FileNameNumber==j) &&
+                               if ( (symbol[k].FileNameNumber==j) && (symbol[k].Address!=-1) &&
                                         (symbol[k].Procedure==-1) &&
                                         (symbol[k].Static==-1) )
                                {
@@ -336,7 +336,7 @@ void OutputAOEMF51(void)
                /*Local symbols defined in this module*/
                recsize=2;
                for(k=0; k<numsym; k++)/*Compute the record length*/
-                       if ( (symbol[k].FileNameNumber==j) &&
+                       if ( (symbol[k].FileNameNumber==j) && (symbol[k].Address!=-1) &&
                                 (symbol[k].Procedure==-1) &&
                                 (symbol[k].Static==j) ) recsize+=((strlen(symbol[k].name)+1)+5);
 
@@ -347,7 +347,7 @@ void OutputAOEMF51(void)
                        OutputByte(0x00);       /*DEF TYPE: Local symbols*/
                        for(k=0; k<numsym; k++)
                        {
-                               if ( (symbol[k].FileNameNumber==j) && 
+                               if ( (symbol[k].FileNameNumber==j) && (symbol[k].Address!=-1) &&
                                         (symbol[k].Procedure==-1) &&
                                         (symbol[k].Static==j) )
                                {
@@ -827,6 +827,11 @@ void CollectInfoFromCDB(void)
                }
        }
 
+       /*Make sure each procedure has an end*/
+       for(k=0; k<(numproc-1); k++)
+       {
+               if (procedure[k].EndAdd==-1) procedure[k].EndAdd=procedure[k+1].BeginAdd-1;
+       }
        /*Asign each line number to a procedure*/
        for(j=0; j<numlinenum; j++)
        {