Browse Source

+ additional extdebug check for wrong add_reg_instructions added
* too long manglednames are cut off at 200 chars using a crc

florian 21 years ago
parent
commit
42e14b6825
4 changed files with 47 additions and 8 deletions
  1. 6 2
      compiler/arm/agarmgas.pas
  2. 7 2
      compiler/arm/cpupara.pas
  3. 11 2
      compiler/rgobj.pas
  4. 23 2
      compiler/symdef.pas

+ 6 - 2
compiler/arm/agarmgas.pas

@@ -224,7 +224,7 @@ unit agarmgas;
                    end;
                  end
                else
-                  s:=s+sep+getopstr(taicpu(hp).oper[i]^);
+                 s:=s+sep+getopstr(taicpu(hp).oper[i]^);
 
                sep:=',';
             end;
@@ -238,7 +238,11 @@ begin
 end.
 {
   $Log$
-  Revision 1.22  2004-11-01 17:41:28  florian
+  Revision 1.23  2004-11-06 17:44:47  florian
+    + additional extdebug check for wrong add_reg_instructions added
+    * too long manglednames are cut off at 200 chars using a crc
+
+  Revision 1.22  2004/11/01 17:41:28  florian
     * fixed arm compilation with cgutils
     * ...
 

+ 7 - 2
compiler/arm/cpupara.pas

@@ -206,7 +206,7 @@ unit cpupara;
 
       procedure assignintreg;
         begin
-           if nextintreg<=ord(NR_R3) then
+           if nextintreg<=RS_R3 then
              begin
                paraloc^.loc:=LOC_REGISTER;
                paraloc^.register:=newreg(R_INTREGISTER,nextintreg,R_SUBWHOLE);
@@ -424,6 +424,7 @@ unit cpupara;
         else
           begin
             paraloc^.loc:=LOC_REFERENCE;
+            paraloc^.size:=retcgsize;
           end;
      end;
 
@@ -471,7 +472,11 @@ begin
 end.
 {
   $Log$
-  Revision 1.24  2004-11-01 09:23:01  florian
+  Revision 1.25  2004-11-06 17:44:47  florian
+    + additional extdebug check for wrong add_reg_instructions added
+    * too long manglednames are cut off at 200 chars using a crc
+
+  Revision 1.24  2004/11/01 09:23:01  florian
     * fixed handling of stack parameters on the arm
 
   Revision 1.23  2004/10/31 12:37:11  florian

+ 11 - 2
compiler/rgobj.pas

@@ -656,6 +656,10 @@ unit rgobj;
         supreg : tsuperregister;
       begin
         supreg:=getsupreg(r);
+{$ifdef extdebug}
+        if supreg>=maxreginfo then
+          internalerror(200411061);
+{$endif extdebug}
         if supreg>=first_imaginary then
           with reginfo[supreg] do
             begin
@@ -1993,11 +1997,16 @@ unit rgobj;
           end;
       end;
 
-
+begin
+  writeln(sizeof(Treginfo));
 end.
 {
   $Log$
-  Revision 1.149  2004-11-01 10:34:08  peter
+  Revision 1.150  2004-11-06 17:44:47  florian
+    + additional extdebug check for wrong add_reg_instructions added
+    * too long manglednames are cut off at 200 chars using a crc
+
+  Revision 1.149  2004/11/01 10:34:08  peter
     * regalloc bind to instructions need to get real ait_instruction
 
   Revision 1.148  2004/10/31 23:18:29  jonas

+ 23 - 2
compiler/symdef.pas

@@ -840,7 +840,8 @@ implementation
 {$endif GDB}
        fmodule,
        { other }
-       gendef
+       gendef,
+       crc
        ;
 
 
@@ -870,6 +871,7 @@ implementation
       var
         s,
         prefix : string;
+        crc : dword;
       begin
         prefix:='';
         if not assigned(st) then
@@ -914,6 +916,12 @@ implementation
         if (target_info.system = system_powerpc_darwin) and
            (result[1] = 'L') then
           result := '_' + result;
+        if length(result)>200 then
+          begin
+            s:=copy(result,1,200);
+            crc:=UpdateCrc32(0,result[201],length(result)-200);
+            result:=s+'_$crc$_$'+hexstr(crc,8);
+          end;
       end;
 
 
@@ -4362,6 +4370,8 @@ implementation
     function tprocdef.mangledname : string;
       var
         hp : TParaItem;
+        s : string;
+        crc : dword;
       begin
         if assigned(_mangledname) then
          begin
@@ -4385,6 +4395,13 @@ implementation
              mangledname:=mangledname+'$'+hp.paratype.def.mangledparaname;
            hp:=TParaItem(hp.next);
          end;
+        { cut off too long strings using a crc }
+        if length(result)>200 then
+          begin
+            s:=copy(result,1,200);
+            crc:=UpdateCrc32(0,result[201],length(result)-200);
+            result:=s+'_$crc$_$'+hexstr(crc,8);
+          end;
        {$ifdef compress}
         _mangledname:=stringdup(minilzw_encode(mangledname));
        {$else}
@@ -6219,7 +6236,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.267  2004-11-05 21:07:13  florian
+  Revision 1.268  2004-11-06 17:44:47  florian
+    + additional extdebug check for wrong add_reg_instructions added
+    * too long manglednames are cut off at 200 chars using a crc
+
+  Revision 1.267  2004/11/05 21:07:13  florian
     * vmt offset of objects is no properly aligned when necessary
 
   Revision 1.266  2004/11/04 17:58:48  peter