Changeset 285
- Timestamp:
- 06/17/07 22:24:47 (1 year ago)
- Files:
-
- trunk/ddl/DefaultRegistry.d (modified) (2 diffs)
- trunk/ddl/Linker.d (modified) (8 diffs)
- trunk/ddl/ar/ArchiveLibrary.d (modified) (2 diffs)
- trunk/ddl/coff/COFFBinary.d (modified) (2 diffs)
- trunk/ddl/coff/CodeViewParser.d (modified) (1 diff)
- trunk/ddl/elf/ELFBinary.d (modified) (1 diff)
- trunk/ddl/insitu/InSituLibrary.d (modified) (2 diffs)
- trunk/ddl/insitu/InSituLoader.d (modified) (2 diffs)
- trunk/ddl/insitu/InSituMapBinary.d (modified) (3 diffs)
- trunk/ddl/omf/OMFBinary.d (modified) (18 diffs)
- trunk/ddl/omf/OMFLibrary.d (modified) (1 diff)
- trunk/ddl/omf/OMFModule.d (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ddl/DefaultRegistry.d
r271 r285 58 58 register(new OMFObjLoader()); 59 59 register(new DDLLoader()); 60 register(new InSituLibLoader());60 // register(new InSituLibLoader()); 61 61 register(new InSituMapLoader()); 62 62 register(new ArchiveLoader()); … … 68 68 register(new ELFObjLoader()); 69 69 register(new DDLLoader()); 70 register(new InSituLibLoader());70 // register(new InSituLibLoader()); 71 71 register(new OMFLibLoader()); 72 72 register(new OMFObjLoader()); trunk/ddl/Linker.d
r281 r285 218 218 mod.isLinking = true; 219 219 220 debug debugLog("Linking module: %s",mod.getName);220 debug debugLog("Linking module: {0}",mod.getName); 221 221 222 222 auto moduleSymbols = mod.getSymbols(); … … 237 237 auto otherSymbol = libMod.getSymbol(symbol.name); 238 238 if(otherSymbol.type == SymbolType.Strong){ 239 debug debugLog("[Linker] found %s at %0.8X",otherSymbol.name,otherSymbol.address);239 debug debugLog("[Linker] found {0} at {1:8X}",otherSymbol.name,otherSymbol.address); 240 240 symbol.address = otherSymbol.address; 241 241 symbol.type = SymbolType.Strong; … … 244 244 goto nextSymbol; 245 245 } 246 debug debugLog("symbol is not strong ( %s -> %0.8X)",symbol.getTypeName,symbol.address);246 debug debugLog("symbol is not strong ({0} -> {1:8X})",symbol.getTypeName,symbol.address); 247 247 } 248 248 } … … 254 254 char[] ext = symbol.isExternal ? "external" : "local"; 255 255 char[] self = canSelfResolve ? "can Self Resolve" : "cannot Self Resolve"; 256 throw new DDLException("cannot resolve symbol: ( %s) [%0.8X] %s %s %s\n",self,cast(uint)symbol.address,symbol.getTypeName(),ext,symbol.name);256 throw new DDLException("cannot resolve symbol: ({0}) [{1:8X}] {2} {3} {4}\n",self,cast(uint)symbol.address,symbol.getTypeName(),ext,symbol.name); 257 257 } 258 258 … … 268 268 } 269 269 270 debug debugLog("mod is resolved: %s",mod.toString());270 debug debugLog("mod is resolved: {0}",mod.toString()); 271 271 272 272 auto allSymbols = mod.getSymbols(); … … 284 284 char[] suffix = `__ModuleInfoZ`; 285 285 if (symbol.name.length > suffix.length && symbol.name[$ - suffix.length .. $] == suffix) { 286 debug debugLog("Found moduleinfo for %s at [%0.8X] %s",mod.getName,symbol.address,symbol.name);286 debug debugLog("Found moduleinfo for {0} at [{1:8X}] {2}",mod.getName,symbol.address,symbol.name); 287 287 moduleSet[symbol.name] = cast(ModuleInfo)(symbol.address); 288 288 } … … 326 326 // init - run whatever initalizers are pending 327 327 foreach(mod,moduleInfo; moduleSet){ 328 debug debugLog("running %s init at [%0.8X]",mod,cast(void*)moduleInfo);328 debug debugLog("running {0} init at [{1:8X}]",mod,cast(void*)moduleInfo); 329 329 this.initModule(moduleInfo,0); 330 330 } … … 355 355 public void register(DynamicLibrary lib){ 356 356 debug foreach(DynamicModule mod; lib.getModules){ 357 debugLog("[Linker.register]: %s",mod.getName);357 debugLog("[Linker.register]: {0}",mod.getName); 358 358 } 359 359 libraries ~= lib; trunk/ddl/ar/ArchiveLibrary.d
r279 r285 80 80 offset += 4; 81 81 } 82 debug debugLog("* Found %s symbol offsets in symbol table,latest offset was {0} ", offsets.length, offset);82 debug debugLog("* Found {0} symbol offsets in symbol table,latest offset was {1} ", offsets.length, offset); 83 83 84 84 uint offsetIdx = 0; … … 135 135 } 136 136 137 debug debugLog("* Iterating over files, current is %s", fName);137 debug debugLog("* Iterating over files, current is {0}", fName); 138 138 switch(fName){ 139 139 case "/": trunk/ddl/coff/COFFBinary.d
r279 r285 149 149 char[] toString() 150 150 { 151 return format( " %s (%s)", name, filename );151 return format( "{0} ({1:8X})", name, filename ); 152 152 } 153 153 ======= … … 161 161 char[] toString() 162 162 { 163 return format( " %s (%s)", name, filename );163 return format( "{0} ({1:8X})", name, filename ); 164 164 } 165 165 >>>>>>> .r278 trunk/ddl/coff/CodeViewParser.d
r264 r285 132 132 char sigStr[4]; 133 133 memcpy( sigStr.ptr, &sig.Signature, 4 ); 134 writefln( "\t\tCodeView Signature: %08X (%s)", sig.Signature, sigStr );135 writefln( "\t\tFile offset: %08X", sig.Filepos );134 writefln( "\t\tCodeView Signature: {0:8X} ({1})", sig.Signature, sigStr ); 135 writefln( "\t\tFile offset: {0:8X}", sig.Filepos ); 136 136 } 137 137 trunk/ddl/elf/ELFBinary.d
r279 r285 187 187 debug{ 188 188 foreach(sym; symbols){ 189 debugLog("sym: %d %s %s %s",sym.st_name,toDString(&stringTable[sym.st_name]),sym.getTypeName,sym.getBindName);189 debugLog("sym: {0} {1} {2} {3}",sym.st_name,toDString(&stringTable[sym.st_name]),sym.getTypeName,sym.getBindName); 190 190 } 191 191 } trunk/ddl/insitu/InSituLibrary.d
r279 r285 1 1 /+ 2 Copyright (c) 2005 Eric Anderton2 Copyright (c) 2005-2007 Eric Anderton 3 3 4 4 Permission is hereby granted, free of charge, to any person … … 60 60 61 61 public ExportSymbolPtr getSymbol(char[] name){ 62 return dictionary[name]; 62 ExportSymbolPtr* value = name in dictionary; 63 if(value) return *value; 64 return null; 63 65 } 64 66 trunk/ddl/insitu/InSituLoader.d
r279 r285 34 34 35 35 private import ddl.insitu.InSituMapBinary; 36 private import ddl.insitu.InSituLibBinary;36 //private import ddl.insitu.InSituLibBinary; 37 37 private import ddl.insitu.InSituLibrary; 38 38 39 /* 39 40 class InSituLibLoader : DynamicLibraryLoader{ 40 41 static char[] typeName = "SITU"; … … 58 59 return new InSituLibrary(binary); 59 60 } 60 } 61 }*/ 61 62 62 63 class InSituMapLoader : DynamicLibraryLoader{ trunk/ddl/insitu/InSituMapBinary.d
r279 r285 98 98 } 99 99 100 protected void parseSegmentDefinitions( LineIterator iter){100 protected void parseSegmentDefinitions(inout LineIterator iter){ 101 101 char[] line; 102 102 line = iter.getNext(); // throw away the first line (blank) … … 110 110 } 111 111 112 protected void parseExports( LineIterator iter){112 protected void parseExports(inout LineIterator iter){ 113 113 char[] line; 114 114 115 115 // parse exports section if the header matches correctly 116 116 line = iter.getNext(); 117 117 118 118 //HACK: the difference between the presence of an exports section in the .map 119 119 // file is determined by the token " Address" at the start of the line. … … 131 131 } 132 132 133 protected void parsePublicsByName( LineIterator iter){133 protected void parsePublicsByName(inout LineIterator iter){ 134 134 char[] line; 135 135 trunk/ddl/omf/OMFBinary.d
r279 r285 627 627 628 628 if(dataType < 0x51){ 629 throw new FeatureNotSupportedException("COMDEF segment number only for %sis not supported",communalName,dataType);629 throw new FeatureNotSupportedException("COMDEF segment number only for {0} is not supported",communalName,dataType); 630 630 } 631 631 else if(dataType == 0x61){ … … 639 639 } 640 640 else{ 641 throw new FeatureNotSupportedException("COMDEF type %0.2X is not supported for %s",dataType,communalName);641 throw new FeatureNotSupportedException("COMDEF type {0:2X} is not supported for {1}",dataType,communalName); 642 642 } 643 643 } … … 1014 1014 default: //??? 1015 1015 char[] recordName = recordNameLookup[thisRecord.recordType]; 1016 throw new FeatureNotSupportedException("Unsupported Record: %s",recordName);1016 throw new FeatureNotSupportedException("Unsupported Record: {0}",recordName); 1017 1017 } 1018 1018 } … … 1081 1081 foreach(idx,name; names){ 1082 1082 if(idx == 0) continue; 1083 result ~= sprint(" %d: %s\n",idx,cast(char[])name);1083 result ~= sprint(" {0}: {1}\n",idx,cast(char[])name); 1084 1084 } 1085 1085 … … 1090 1090 char[] mod = moduleName; 1091 1091 if(entryName){ 1092 result ~= sprint(" %d: %s in %s as %s\n",idx,internal,mod,cast(char[])entryName);1092 result ~= sprint(" {0}: {1} in {2} as {3}\n",idx,internal,mod,cast(char[])entryName); 1093 1093 } 1094 1094 else{ 1095 result ~= sprint(" %d: %s in %s as #%d\n",idx,internal,mod,entryOrdinal);1095 result ~= sprint(" {0}: {1} in {2} as #{3}\n",idx,internal,mod,entryOrdinal); 1096 1096 } 1097 1097 } … … 1106 1106 uint cextedfsLength = communalExterns.length; 1107 1107 1108 result ~= sprint(" %d: (%d) %s --> (%d) %s\n",idx,cast(uint)weakIndex,weakName,cast(uint)resolutionIndex,defaultName);1108 result ~= sprint(" {0}: ({1}) {2} --> ({3}) {4}\n",idx,cast(uint)weakIndex,weakName,cast(uint)resolutionIndex,defaultName); 1109 1109 } 1110 1110 } … … 1114 1114 with(ext){ 1115 1115 char[] name = cast(char[])name; 1116 result ~= sprint(" %d: %s\n",idx,name);1116 result ~= sprint(" {0}: {1}\n",idx,name); 1117 1117 } 1118 1118 } … … 1126 1126 uint ofs = cast(uint)offset; 1127 1127 1128 result ~= sprint(" %d: %s %s:%s:%0.8X\n",idx,thisName,group,segment,ofs);1128 result ~= sprint(" {0}: {1} {2}:{3}:{4:8X}\n",idx,thisName,group,segment,ofs); 1129 1129 } 1130 1130 } … … 1140 1140 char[] combination = getCombination(); 1141 1141 1142 result ~= sprint(" %d: %s %s %s %s %d bytes align:%d\n",idx,name,className,overlayName,combination,length,byteAlignment);1142 result ~= sprint(" {0}: {1} {2} {3} {4} {5} bytes align:{6}\n",idx,name,className,overlayName,combination,length,byteAlignment); 1143 1143 } 1144 1144 } … … 1149 1149 with(grp){ 1150 1150 char[] name = names[nameIndex]; 1151 result ~= sprint(" %d: %s",idx,name);1151 result ~= sprint(" {0}: {1}",idx,name); 1152 1152 1153 1153 foreach(segmentIndex; segments){ … … 1176 1176 } 1177 1177 1178 result ~= sprint(" %d: %s:%s%d rel: %s | %d %s\n",idx,segment,destName,destOffset,rel,targetIndex,targetName);1178 result ~= sprint(" {0}: {1}:{2}{3} rel: {4} | {5} {6}\n",idx,segment,destName,destOffset,rel,targetIndex,targetName); 1179 1179 } 1180 1180 } … … 1185 1185 char[] segment = names[segments[segmentIndex].nameIndex]; 1186 1186 uint ofs = offset; 1187 result ~= sprint(" %d: %s %d bytes at offset %d\n",idx,segment,data.length,ofs);1187 result ~= sprint(" {0}: {1} {2} bytes at offset {3}\n",idx,segment,data.length,ofs); 1188 1188 } 1189 1189 } … … 1194 1194 char[] segment = names[segments[segmentIndex].nameIndex]; 1195 1195 uint ofs = offset; 1196 result ~= sprint(" %d: %s %d bytes at offset %d\n",idx,segment,data.length,ofs);1196 result ~= sprint(" {0}: {1} {2} bytes at offset {3}\n",idx,segment,data.length,ofs); 1197 1197 } 1198 1198 } … … 1202 1202 with(comdef){ 1203 1203 char[] name = communalName; 1204 result ~= sprint(" %d: %s %dbytes\n",idx,name,length);1204 result ~= sprint(" {0}: {1} {2} bytes\n",idx,name,length); 1205 1205 } 1206 1206 } … … 1210 1210 with(cextdef){ 1211 1211 char[] name = names[nameIndex]; 1212 result ~= sprint(" %d: %s\n",idx,name);1212 result ~= sprint(" {0}: {1}\n",idx,name); 1213 1213 } 1214 1214 } … … 1223 1223 uint offset = enumDataOffset; 1224 1224 1225 result ~= sprint(" %d: %s%s:%s:%0.8X %d bytes %s\n",1225 result ~= sprint(" {0}: {1}{2}:{3}:{4:8X} {5} bytes {6}\n", 1226 1226 idx,cont,group,segment,offset,data.length,name); 1227 1227 } … … 1234 1234 char[] name = names[nameIndex]; 1235 1235 1236 result ~= sprint(" %d: Line %d --> %s%s %0.8X\n",1236 result ~= sprint(" {0}: Line {1} --> {2}{3} {4:8X}\n", 1237 1237 idx,lineNumber,cont,name,cast(uint)baseOffset); 1238 1238 } … … 1246 1246 uint offset = segmentOffset; 1247 1247 1248 result ~= sprint(" %d: Line %d --> %s:%s:%0.8X\n",1248 result ~= sprint(" {0}: Line {1} --> {2}:{3}:{4:8X}\n", 1249 1249 idx,lineNumber,group,segment,offset); 1250 1250 } trunk/ddl/omf/OMFLibrary.d
r279 r285 80 80 81 81 public DynamicModule getModuleForSymbol(char[] name){ 82 debug debugLog("[OMF] looking for %s in %s",name,attributes["omf.filename"]);82 debug debugLog("[OMF] looking for {0} in {1}",name,attributes["omf.filename"]); 83 83 DynamicModule* mod = name in crossReference; 84 debug debugLog("[OMF] Result: %0.8X",mod);84 debug debugLog("[OMF] Result: {0:8X}",mod); 85 85 if(mod) return *mod; 86 86 return null; trunk/ddl/omf/OMFModule.d
r279 r285 113 113 if(destSymbol.isExternal){ 114 114 // discard this fixup - it references a non-local symbol 115 debug debugLog("Discarded Fixup dest %s:%s [%0.8X] rel:%d",destSymbol.name,destSymbol.getTypeName(),destAddress,cast(uint)isSegmentRelative);115 debug debugLog("Discarded Fixup dest {0}:{1} [{2:8X}] rel:{3}",destSymbol.name,destSymbol.getTypeName(),destAddress,cast(uint)isSegmentRelative); 116 116 continue; 117 117 } 118 118 else{ 119 debug debugLog("Fixup dest symbol: %s [%0.8X] %d",destSymbol.name,destSymbol.address,destSymbolOffset);119 debug debugLog("Fixup dest symbol: {0} [{1:8X}] {2}",destSymbol.name,destSymbol.address,destSymbolOffset); 120 120 destAddress = cast(uint)destSymbol.address + destSymbolOffset; 121 121 } … … 126 126 127 127 if(!containsAddress(cast(void*)destAddress)){ 128 debug debugLog("Module does not contain the destination address for fixup. [ %0.8X]",destAddress);129 debug debugLog("dump: %s",this.toString());128 debug debugLog("Module does not contain the destination address for fixup. [{0:8X}]",destAddress); 129 debug debugLog("dump: {0}",this.toString()); 130 130 assert(false); 131 131 } … … 146 146 147 147 debug if(destSymbol){ 148 debugLog("fixup dest %s:%s [%0.8X] (%0.8X) = fixupValue [%0.8X] rel:%d",destSymbol.name,destSymbol.getTypeName(),destAddress,*cast(uint*)destAddress,fixupValue,cast(uint)isSegmentRelative);148 debugLog("fixup dest {0}:{1} [{2:8X}] ({3:8X}) = fixupValue [{4:8X}] rel:{5}",destSymbol.name,destSymbol.getTypeName(),destAddress,*cast(uint*)destAddress,fixupValue,cast(uint)isSegmentRelative); 149 149 } 150 150 else{ 151 debugLog("fixup dest (null) [ %0.8X] (%0.8X) = fixupValue [%0.8X] rel:%d",destAddress,*cast(uint*)destAddress,fixupValue,cast(uint)isSegmentRelative);151 debugLog("fixup dest (null) [{0:8X}] ({1:8X}) = fixupValue [{2:8X}] rel:{3}",destAddress,*cast(uint*)destAddress,fixupValue,cast(uint)isSegmentRelative); 152 152 } 153 153 … … 166 166 } 167 167 168 debug debugLog("\tfixed to: [ %0.8X]",*cast(uint*)destAddress);168 debug debugLog("\tfixed to: [{0:8X}]",*cast(uint*)destAddress); 169 169 } 170 170 this.fixups = remainingFixups; … … 363 363 // Thankfully, these symbols exist at runtime, so naming them as Extern here won't 364 364 // affect runtime linking. 365 debug debugLog("Cannot resolve segment address for public ' %s'.",cast(char[])pub.name);365 debug debugLog("Cannot resolve segment address for public '{0}'.",cast(char[])pub.name); 366 366 sym.isExternal = true; 367 367 sym.type = SymbolType.Unresolved; // doesn't exist here … … 471 471 if(idx == 0) continue; 472 472 char[] name = binary.names[binary.segments[idx].nameIndex]; 473 result ~= sprint(" %d: %s %d bytes [%0.8X]\n",idx,name,seg.data.length,seg.data.ptr);473 result ~= sprint(" {0}: {1} {2} bytes [{3:8X}]\n",idx,name,seg.data.length,seg.data.ptr); 474 474 } 475 475 } … … 478 478 foreach(idx,sym; symbols){ 479 479 char[] ext = sym.isExternal ? "external" : "local"; 480 result ~= sprint(" %d: [%0.8X] %s %s %s\n",idx,cast(uint)sym.address,sym.getTypeName(),ext,sym.name);481 } 482 483 result ~= sprint("Fixups ( %d):\n",fixups.length);480 result ~= sprint(" {0}: [{1:8X}] {2} {3} {4}\n",idx,cast(uint)sym.address,sym.getTypeName(),ext,sym.name); 481 } 482 483 result ~= sprint("Fixups ({0}):\n",fixups.length); 484 484 if(fixups.length > 0){ 485 485 foreach(idx,fix; fixups){ … … 488 488 char[] ext = isExternStyleFixup ? "externStyle" : "segmentStyle"; 489 489 490 result ~= sprint(" %d: %s %s",idx,rel,ext);490 result ~= sprint(" {0}: {1} {2}",idx,rel,ext); 491 491 492 492 if(destSymbol){ 493 result ~= sprint(" | %s [%0.8X]",destSymbol.name,cast(uint)destSymbol.address+destSymbolOffset);493 result ~= sprint(" | {0} [{1:8X}]",destSymbol.name,cast(uint)destSymbol.address+destSymbolOffset); 494 494 } 495 495 else{ 496 result ~= sprint(" | [ %0.8X]",cast(uint)destSegmentAddress);496 result ~= sprint(" | [{0:8X}]",cast(uint)destSegmentAddress); 497 497 } 498 498 499 499 if(isExternStyleFixup){ 500 result ~= sprint(" | %s [%0.8X]",targetSymbol.name,targetSymbol.address);500 result ~= sprint(" | {0} [{1:8X}]",targetSymbol.name,targetSymbol.address); 501 501 } 502 502 else{ 503 result ~= sprint(" | segment # %d [%0.8X]",targetSegmentIndex,segmentImages[targetSegmentIndex].data.ptr);503 result ~= sprint(" | segment #{0} [{1:8X}]",targetSegmentIndex,segmentImages[targetSegmentIndex].data.ptr); 504 504 } 505 505 result ~= "\n"; … … 511 511 foreach(idx,segdef; segmentImages){ 512 512 char[] buf2 = ""; 513 result ~= sprint("segment %d data (%dbytes): ",idx,segdef.data.length);513 result ~= sprint("segment {0} data ({1} bytes): ",idx,segdef.data.length); 514 514 foreach(byteidx,b; cast(ubyte[])(segdef.data)){ 515 515 if(byteidx % 16 == 0){ 516 result ~= sprint(" | %s\n [%0.8X] ",buf2,segdef.data.ptr+byteidx);516 result ~= sprint(" | {0}\n [{1:8X}] ",buf2,segdef.data.ptr+byteidx); 517 517 buf2 = ""; 518 518 } 519 519 if(b < 16) result ~= "0"; //HACK: sprint doesn't left-pad correctly 520 result ~= sprint(" %0.2X",b);520 result ~= sprint("{0:2X} ",b); 521 521 if(b >= 32 && b <= 126){ 522 522 buf2 ~= cast(char)b;
