public override void EncodeData(ref ObjectDataBuilder dataBuilder, NodeFactory factory, bool relocsOnly) { _definitionOffset = dataBuilder.CountBytes; // This needs to be an empty target pointer since it will be filled in with the string pointer // when loaded by CoreCLR dataBuilder.EmitZeroPointer(); }
public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { ObjectDataBuilder objData = new ObjectDataBuilder(factory); objData.RequirePointerAlignment(); objData.DefinedSymbols.Add(this); ObjectAndOffsetSymbolNode startNode = new ObjectAndOffsetSymbolNode(this, 0, "__modules_a"); ObjectAndOffsetSymbolNode endNode = new ObjectAndOffsetSymbolNode(this, 0, "__modules_z"); if (factory.Target.OperatingSystem != Internal.TypeSystem.TargetOS.Windows) { // Temporary work-around for Linux / OSX until CLI is updated objData.DefinedSymbols.Add(startNode); } objData.EmitPointerReloc(factory.ReadyToRunHeader); if (factory.Target.OperatingSystem != Internal.TypeSystem.TargetOS.Windows) { // Temporary work-around for Linux / OSX until CLI is updated endNode.SetSymbolOffset(objData.CountBytes); objData.DefinedSymbols.Add(endNode); objData.EmitZeroPointer(); } return objData.ToObjectData(); }
public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { ObjectDataBuilder objData = new ObjectDataBuilder(factory); objData.RequirePointerAlignment(); objData.DefinedSymbols.Add(this); ObjectAndOffsetSymbolNode startNode = new ObjectAndOffsetSymbolNode(this, 0, "__modules_a"); ObjectAndOffsetSymbolNode endNode = new ObjectAndOffsetSymbolNode(this, 0, "__modules_z"); if (factory.Target.OperatingSystem != Internal.TypeSystem.TargetOS.Windows) { // Temporary work-around for Linux / OSX until CLI is updated objData.DefinedSymbols.Add(startNode); } objData.EmitPointerReloc(factory.ReadyToRunHeader); if (factory.Target.OperatingSystem != Internal.TypeSystem.TargetOS.Windows) { // Temporary work-around for Linux / OSX until CLI is updated endNode.SetSymbolOffset(objData.CountBytes); objData.DefinedSymbols.Add(endNode); objData.EmitZeroPointer(); } return(objData.ToObjectData()); }
public override void EncodeData(ref ObjectDataBuilder dataBuilder, NodeFactory factory, bool relocsOnly) { ProfileDataNode nextElementInList = ((ProfileDataSectionNode)ContainingNode).NextElementToEncode; if (nextElementInList != null) { dataBuilder.EmitPointerReloc(nextElementInList, -OffsetFromStartOfObjectToSymbol); } else { dataBuilder.EmitZeroPointer(); } if (relocsOnly) { return; } EcmaMethod ecmaMethod = (EcmaMethod)_methodNode.Method.GetTypicalMethodDefinition(); int startOffset = dataBuilder.CountBytes; var reservation = dataBuilder.ReserveInt(); dataBuilder.EmitInt(0); // CORBBTPROF_METHOD_HEADER::cDetail dataBuilder.EmitInt(ecmaMethod.MetadataReader.GetToken(ecmaMethod.Handle)); // CORBBT_METHOD_INFO::token dataBuilder.EmitInt(_ilSize); // CORBBT_METHOD_INFO::ILSize dataBuilder.EmitInt(_blockCount); // CORBBT_METHOD_INFO::cBlock int sizeOfCORBBTPROF_METHOD_HEADER = dataBuilder.CountBytes - startOffset; Debug.Assert(sizeOfCORBBTPROF_METHOD_HEADER == (OffsetFromStartOfObjectToSymbol - _targetDetails.PointerSize)); dataBuilder.EmitInt(reservation, sizeOfCORBBTPROF_METHOD_HEADER + _profileData.Length); dataBuilder.EmitBytes(_profileData); while ((dataBuilder.CountBytes & (dataBuilder.TargetPointerSize - 1)) != 0) { dataBuilder.EmitByte(0); } }
public override void EncodeData(ref ObjectDataBuilder dataBuilder, NodeFactory factory, bool relocsOnly) { // This needs to be an empty target pointer since it will be filled in with Module* // when loaded by CoreCLR dataBuilder.EmitZeroPointer(); }