Forráskód Böngészése

* Output sizes in map files without truncation and without leading zeros, plus a few more tweaks to make it look more like map files generated by ld. Resolves #24747.

git-svn-id: trunk@25127 -
sergei 12 éve
szülő
commit
dffe9cbc55
1 módosított fájl, 42 hozzáadás és 8 törlés
  1. 42 8
      compiler/ogmap.pas

+ 42 - 8
compiler/ogmap.pas

@@ -61,6 +61,40 @@ implementation
       globals,verbose;
 
 
+    const
+      HexTbl : array[0..15] of char='0123456789abcdef';
+
+    function sizestr(v:aword):string;
+      var
+        tmp:array [0..19] of char;
+        i:longint;
+      begin
+        if v=0 then
+          result:='0x0'
+        else
+          begin
+            i:=high(tmp);
+            while (v>0) do
+              begin
+                tmp[i]:=hextbl[v and $f];
+                v:=v shr 4;
+                dec(i);
+              end;
+            tmp[i]:='x';
+            tmp[i-1]:='0';
+            setstring(result,@tmp[i-1],high(tmp)+2-i);
+          end;
+      end;
+
+    function PadSpaceLeft(const s:string;len:longint):string;
+      begin
+        if length(s)<len then
+          result:=Space(len-length(s))+s
+        else
+          result:=s;
+      end;
+
+
 {****************************************************************************
                                   TExeMap
 ****************************************************************************}
@@ -111,7 +145,7 @@ implementation
             writeln(t,p.name);
             s:='';
           end;
-         Add(PadSpace(s,20)+'0x'+PadSpace(hexstr(p.size,1),16)+p.objsection.objdata.name);
+         Add(PadSpace(s,20)+'0x'+PadSpace(sizestr(p.size),16)+p.objsection.objdata.name);
        end;
 
 
@@ -121,7 +155,7 @@ implementation
        begin
          FImageBase:=abase;
          if FImageBase<>0 then
-           imagebasestr:=' (ImageBase='+HexStr(FImageBase,sizeof(pint)*2)+')'
+           imagebasestr:=' (ImageBase=0x'+HexStr(FImageBase,sizeof(pint)*2)+')'
          else
            imagebasestr:='';
          AddHeader('Memory map'+imagebasestr);
@@ -132,8 +166,8 @@ implementation
      procedure TExeMap.AddMemoryMapExeSection(p:texesection);
        begin
          { .text           0x000018a8     0xd958 }
-         Add(PadSpace(p.name,19)+PadSpace(' 0x'+HexStr(p.mempos+Fimagebase,sizeof(pint)*2),12)+
-             ' 0x'+HexStr(p.size,sizeof(pint)));
+         Add(PadSpace(p.name,15)+PadSpace(' 0x'+HexStr(p.mempos+Fimagebase,sizeof(pint)*2),12)+
+             ' '+PadSpaceLeft(sizestr(p.size),9));
        end;
 
 
@@ -143,20 +177,20 @@ implementation
        begin
          { .text           0x000018a8     0xd958     object.o }
          secname:=p.name;
-         if Length(secname)>18 then
+         if Length(secname)>14 then
            begin
              Add(' '+secname);
              secname:='';
            end;
-         Add(' '+PadSpace(secname,18)+PadSpace(' 0x'+HexStr(p.mempos+FImageBase,sizeof(pint)*2),12)+
-             ' 0x'+HexStr(p.size,sizeof(pint))+' '+p.objdata.name);
+         Add(' '+PadSpace(secname,14)+PadSpace(' 0x'+HexStr(p.mempos+FImageBase,sizeof(pint)*2),12)+
+             ' '+PadSpaceLeft(sizestr(p.size),9)+' '+p.objdata.name);
        end;
 
 
      procedure TExeMap.AddMemoryMapSymbol(p:TObjSymbol);
        begin
          {                 0x00001e30                setup_screens }
-         Add(Space(20)+PadSpace('0x'+HexStr(p.address+Fimagebase,sizeof(pint)*2),25)+' '+p.name);
+         Add(Space(16)+PadSpace('0x'+HexStr(p.address+Fimagebase,sizeof(pint)*2),25)+' '+p.name);
        end;
 
 end.