* as/hc08/lkaomf51.c (OutputName),
[fw/sdcc] / as / mcs51 / lkaomf51.c
index 69878c052d3a20ca1742bea125bc8f2c25887380..7e6503177c03f09a5ad32888e43d073f4be411ac 100644 (file)
@@ -26,7 +26,7 @@
 
 #define EQ(A,B) !strcmp((A),(B))
 #define MEMSIZE 0x10000
-#define DODUMP 1
+//#define DODUMP 1
 
 typedef struct
 {
@@ -74,7 +74,7 @@ typedef struct
 
 int numlinenum=0;
 _linenum * linenum=NULL;
-
+#if 0
 typedef struct
 {
        char * name;
@@ -86,6 +86,12 @@ _UsageType UsageType[]=
 {
        {"CSEG",                0},
        {"GSINIT",              0},
+       {"GSINIT0",             0},
+       {"GSINIT1",             0},
+       {"GSINIT2",             0},
+       {"GSINIT3",             0},
+       {"GSINIT4",             0},
+       {"GSINIT5",             0},
        {"GSFINAL",             0},
        {"HOME",                0},
        {"XINIT",               0},
@@ -102,7 +108,7 @@ _UsageType UsageType[]=
        {"BSEG",                4},
        {"",                    5} /*A typeless number?*/
 };
-
+#endif
 char * UsageTypeName[]={"CODE", "XDATA", "DATA", "IDATA", "BIT", "NUMBER"};
 int AddNumber;
 unsigned char * ihxBuff=NULL;
@@ -378,6 +384,7 @@ void OutputAOEMF51(void)
 
                                /*Content Record*/
                                OutputByte(0x06);/*REC TYPE*/
+                               if(procedure[k].EndAdd==-1) procedure[k].EndAdd=HexSize;
                                recsize=procedure[k].EndAdd-procedure[k].BeginAdd+1+4;
                                OutputWord(recsize);/*Record Length*/
                                OutputByte(0x00);/*SEG ID*/
@@ -634,6 +641,7 @@ void CollectInfoFromCDB(void)
                                        {
                                                case 'C': /*Code*/ 
                                                case 'D': /*Code/static segment*/ 
+                                               case 'Z': /*Functions and undefined code space*/ 
                                                        symbol[numsym].UsageType=0x40;
                                                break;
 
@@ -659,7 +667,7 @@ void CollectInfoFromCDB(void)
                                                break;
                                                
                                                default:
-                                                       printf("Name: %s, AddressSpace:%c\n", symbol[numsym].name, AddressSpace);
+                                                       printf("Unknown scope information for: %s, AddressSpace:%c\n", symbol[numsym].name, AddressSpace);
                                                break;
                                        }
                                        numsym++;
@@ -700,6 +708,7 @@ void CollectInfoFromCDB(void)
                                        symbol[numsym].UsageType=0x00;/*A procedure name symbol*/
                                        symbol[numsym].Procedure=-1; /*Global symbol*/
                                        symbol[numsym].Address=-1;/*Collected later*/
+                                       symbol[numsym].Static=-1; // o_gloom
                                        numsym++;
                                }
                        break;
@@ -867,12 +876,12 @@ void CollectInfoFromCDB(void)
        fclose(CDBin);
 }
 
-int hex2dec (char hex_digit)
+int hex2dec (unsigned char hex_digit)
 {
-   int j;
-   j=toupper(hex_digit)-'0';
-   if (j>9) j -= 7;
-   return j;
+   if (isdigit (hex_digit))
+      return hex_digit-'0';
+   else
+      return toupper (hex_digit)-'A'+10;
 }
 
 unsigned char GetByte(char * buffer)