public LinkedSectionPart add(LinkedLibrary library, uint sectionNumber) { LinkedSectionPart s = new LinkedSectionPart(); s.section = this; s.library = library; s.librarySection = sectionNumber; while ((size % alignment) != 0) { size++; } s.startAddress = offset + size; s.size = library.file.sectionVirtualSize(sectionNumber); size += s.size; parts.Add(s); ulong foffset = library.file.sectionFileOffset(sectionNumber); ulong fsize = library.file.sectionFileSize(sectionNumber); for (ulong i = 0; i < fsize; i++) { linker.target.setU8(s.startAddress + i, library.file.memory.getU8(foffset + i, false)); } for (ulong j = fsize; j < s.size; j++) { linker.target.setU8(s.startAddress + j, 0); // Clear any remaining "virtual" (reserved) memory with zeroes } return(s); }
public LinkedLibrary add(LibraryFile library) { LinkedLibrary result = new LinkedLibrary(); result.linker = this; result.file = library; result.symbols = new LinkedSymbol[library.nsymbols]; for (uint i = 0; i < library.nsymbols; i++) { result.symbols[i] = new LinkedSymbol(); result.symbols[i].library = result; result.symbols[i].index = i; } libraries.Add(result); for (uint i = 0; i < library.nsections; i++) { if (sections.ContainsKey(library.sectionName(i))) { LinkedSection s = null; sections.TryGetValue(library.sectionName(i), out s); // WTF? Why doesn't "Get"/"GetValue" work? result.add(s.add(result, i)); } } return(result); }