public LinkerSymbol DefineSymbol(string name, SectionKind kind, int alignment, int size) { uint aligned = alignment != 0 ? (uint)alignment : 1; lock (_lock) { if (!symbolLookup.TryGetValue(name, out LinkerSymbol symbol)) { symbol = new LinkerSymbol(name, aligned, kind); Symbols.Add(symbol); symbolLookup.Add(name, symbol); symbol.IsExternalSymbol = false; } symbol.Alignment = aligned; symbol.SectionKind = kind; symbol.Stream = (size == 0) ? new MemoryStream() : new MemoryStream(size); if (size != 0) { symbol.Stream.SetLength(size); } return(symbol); } }
internal void SetFirst(LinkerSymbol symbol) { lock (mylock) { Symbols.Remove(symbol); Symbols.Insert(0, symbol); } }
public void Link(LinkType linkType, PatchType patchType, LinkerSymbol patchSymbol, long patchOffset, LinkerSymbol referenceSymbol, int referenceOffset) { var linkRequest = new LinkRequest(linkType, patchType, patchSymbol, (int)patchOffset, referenceSymbol, referenceOffset); lock (_lock) { patchSymbol.AddPatch(linkRequest); } }
public void Link(LinkType linkType, PatchType patchType, LinkerSymbol patchSymbol, int patchOffset, LinkerSymbol referenceSymbol, int referenceOffset) { lock (mylock) { var linkRequest = new LinkRequest(linkType, patchType, patchSymbol, patchOffset, referenceSymbol, referenceOffset); patchSymbol.AddPatch(linkRequest); } }
/// <summary> /// Initializes a new instance of LinkRequest. /// </summary> /// <param name="linkType">Type of the link.</param> /// <param name="patchType">Type of the patch.</param> /// <param name="patchSymbol">The patch symbol.</param> /// <param name="patchOffset">The patch offset.</param> /// <param name="referenceSymbol">The reference symbol.</param> /// <param name="referenceOffset">The reference offset.</param> /// public LinkRequest(LinkType linkType, PatchType patchType, LinkerSymbol patchSymbol, int patchOffset, LinkerSymbol referenceSymbol, int referenceOffset) { Debug.Assert(patchSymbol != null); Debug.Assert(referenceSymbol != null); LinkType = linkType; PatchType = patchType; PatchSymbol = patchSymbol; PatchOffset = patchOffset; ReferenceSymbol = referenceSymbol; ReferenceOffset = referenceOffset; }
public LinkerSymbol GetSymbol(string name) { lock (_lock) { if (!symbolLookup.TryGetValue(name, out LinkerSymbol symbol)) { symbol = new LinkerSymbol(name); Symbols.Add(symbol); symbolLookup.Add(name, symbol); } return(symbol); } }
public LinkerSymbol DefineExternalSymbol(string name, string externalName, SectionKind kind) { lock (_lock) { if (!symbolLookup.TryGetValue(name, out LinkerSymbol symbol)) { symbol = new LinkerSymbol(name, 0, kind); Symbols.Add(symbol); symbolLookup.Add(name, symbol); } symbol.SectionKind = kind; symbol.IsExport = true; symbol.ExportName = externalName; return(symbol); } }
protected LinkerSymbol CreateSymbol(string name, SectionKind kind, uint alignment) { lock (mylock) { var section = LinkerSections[(int)kind]; Debug.Assert(section != null); var symbol = section.GetSymbol(name); if (symbol == null) { symbol = new LinkerSymbol(name, kind, alignment); section.AddLinkerObject(symbol); } symbol.Alignment = alignment != 0 ? alignment : 1; return(symbol); } }
public void SetFirst(LinkerSymbol symbol) { FirstSymbol = symbol; }
public void Link(LinkType linkType, PatchType patchType, LinkerSymbol patchSymbol, long patchOffset, string referenceSymbolName, int referenceOffset) { var referenceObject = GetSymbol(referenceSymbolName); Link(linkType, patchType, patchSymbol, patchOffset, referenceObject, referenceOffset); }
internal void AddLinkerObject(LinkerSymbol symbol) { Symbols.Add(symbol); symbolLookup.Add(symbol.Name, symbol); }
public void SetFirst(LinkerSymbol symbol) { Symbols.Remove(symbol); Symbols.Insert(0, symbol); }
public void SetFirst(LinkerSymbol symbol) { var section = LinkerSections[(int)symbol.SectionKind]; section.SetFirst(symbol); }
public void Link(LinkType linkType, PatchType patchType, LinkerSymbol patchSymbol, int patchOffset, SectionKind referenceKind, string referenceSymbolName, int referenceOffset) { var referenceObject = GetSymbol(referenceSymbolName, referenceKind); Link(linkType, patchType, patchSymbol, patchOffset, referenceObject, referenceOffset); }
public void Link(LinkType linkType, PatchType patchType, SectionKind patchKind, string patchSymbolName, int patchOffset, LinkerSymbol referenceSymbol, int referenceOffset) { var patchObject = GetSymbol(patchSymbolName, patchKind); Link(linkType, patchType, patchObject, patchOffset, referenceSymbol, referenceOffset); }